|
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下. I: [! z* c: h$ ^8 N! M$ |. p
// 发送缓存
0 @ [5 g2 ^3 e8 I w0 ]. _ }char Send[] = "UART1 test......\n\r";/ Z4 W7 F$ Y# O* j* m
* F! G- c: P. i$ F+ U% d; e7 d
extern void UARTconfig()$ B! m& s+ g5 O2 ]. M# n
{
& J, W) G `& A! M. R0 g) R& _ //使能Uart14 R$ k( X3 }1 B( ~/ l/ ?( m/ V
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
/ ?' S9 D. L: [0 I0 S2 F ( Y1 i6 {/ @* B$ y
// 使能 UART1禁用流控
( M4 M3 l2 w4 f0 m+ U) P, G UARTPinMuxSetup(1, 0);
3 r. }6 Y8 ?8 V1 y$ K2 C
1 r8 a2 t3 A% [# ], e7 y4 K$ f // 波特率 115200 数据位 8 停止位 1 无校验位
* C7 O9 m4 N6 k! m- {) G UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
N9 s4 r' E* z
2 k, q& j6 B# _ // 使能 UART16 g6 G6 V, p' T1 B9 n" L
UARTEnable(SOC_UART_1_REGS);
& E: r0 V0 E9 C2 W" ~ // 使能接收 / 发送 FIFO1 ~1 Z. `3 i* ]& \8 I+ W
UARTFIFOEnable(SOC_UART_1_REGS);! ^/ Y Q$ g! T$ n
// 设置 FIFO 级别
7 O+ k: R% \9 Y. J UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);$ ]& R4 |8 N( O ]) b4 d! d! x6 M
//Uart1中断使能
# C0 q! g. K; |" s unsigned int intFlags = 0;6 [( ?1 _' F. N/ F+ N0 x5 _
intFlags |= (UART_INT_LINE_STAT | \
$ s/ j# z. a+ F! i! [, D6 b UART_INT_TX_EMPTY | \
$ P( f! Y* { o2 o1 C: a2 ? UART_INT_RXDATA_CTI);: C4 i7 U$ Y" x, O5 V) p. G
. O# x) _" X$ ` n! p) Y/ I/ g. b, x UARTIntEnable(SOC_UART_1_REGS, intFlags);+ _3 N. w0 o/ G6 M! L$ i
}
9 b! p( f5 y k//UART 中断服务函数
% m7 \" {9 f5 g& ~7 lvoid UARTIsr(UArg arg)
! }3 j7 J2 e! D: Q9 |{
t- _8 `: I: u static unsigned int length = sizeof(Send);& |0 S' n5 g: N* i4 F9 c
static unsigned int count = 0;# a* }+ {' r: ?; A( h- d
unsigned char rxData = 0;8 v) k% a# V6 Z2 F7 \
unsigned int int_id = 0;
h" q% a' N2 T // 确定中断源6 j4 _* c; H" w+ V
int_id = UARTIntStatus(SOC_UART_1_REGS);
! Q9 G5 B9 c5 P0 O; [+ [ // 清除 UART1 系统中断# C" G: \. u7 @; G5 n# R9 v
IntEventClear(SYS_INT_UART1_INT);4 {* Q+ E. N+ g( k) d
// 发送中断
5 I2 b5 f3 L' e$ Q8 d7 ~4 } if(UART_INTID_TX_EMPTY == int_id)) ~: G3 E4 f3 }# A4 m3 W
{) j4 J% }% N# P% G
if(0 < length)( X8 I5 z' X& G6 L/ F: U& p( ?
{8 h1 g7 m# _! R, P3 {# x* g) {: e
// 写一个字节到 THR
$ W# H3 [6 Q8 `" A6 b; |2 o) T UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);) B7 T1 {9 t2 L4 e5 Z' h! B
length--;
8 C* H, s: ^; ^% Q2 ? count++;, X4 p0 j3 s$ V5 d' s
}) h% h! N! A; m- g' e& i
if(0 == length)( a ?- N. a6 V' C+ j- I
{
& m) e/ v( }1 E# x* J. K // 禁用发送中断
( K3 M; S# Q% G/ K! n UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
1 \2 I! L( l% a- a }+ z. }% Z) e6 B x( p. J4 E
}
4 e. {# l' ]4 K% A/ H6 j // 接收中断6 u" s( v& U6 d# b% D
if(UART_INTID_RX_DATA == int_id)
* \: R; v/ \& ?1 \ {+ V6 [! _, [0 K* ~, a
rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
& E9 Z& b3 _! Z0 P% Y UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
1 d7 |) l5 B% \6 W4 ?4 e& B# R }
2 f; u$ y' N# Y2 e0 k // 接收错误: E# r7 t8 l6 u, a1 |) e
if(UART_INTID_RX_LINE_STAT == int_id)0 _# R: x/ X6 ^: j
{
; ~: Z8 W+ y" p: g# |# d$ f. k while(UARTRxErrorGet(SOC_UART_1_REGS))" ], L7 d* M/ b: n& S# `" B$ Q
{
# Q5 w- l) U$ t9 L1 c* ~* { // 从 RBR 读一个字节3 D' k5 @0 I1 O3 f9 t4 v r4 L
UARTCharGetNonBlocking(SOC_UART_1_REGS);
; L$ J7 B4 t' Y% q }
- G7 u |+ E" Q& D. @7 y' } }: W: Q' b- I9 \9 I2 v
return;
, ]+ v% p' I, d: T1 F}
% P R `/ h/ u8 }4 {Int main(): L7 |+ t8 z; r4 Z) E% |0 C
{
r% S. f( [% p& U UARTconfig();//uart 配置
& E2 F1 a! Z' R3 C7 ?) j# M# x Error_Block eb;% n. j* [' Z! B
System_printf("enter main()\n");
1 u: I& ?4 ?- ?3 [ Error_init(&eb);
3 ~7 ?* O3 m. ^5 w4 c7 I3 O // 动态创建硬件中断
. P2 j( [/ u9 n Hwi_Handle hwi1;/ r, M! N( i, `; K; `9 H3 T
Hwi_Params hwiParams;* ]: `; U: z. C+ p
// 使用默认值初始化参数 f% s1 R$ Z3 J- F; I
Hwi_Params_init(&hwiParams);
O1 A9 A& {, Z6 p. Q // 中断事件- g o/ A R; o1 P
hwiParams.eventId = SYS_INT_UART1_INT;" a/ n; `( y/ P
// 传递到中断服务函数的参数
# d2 |4 c9 I% |: w& R hwiParams.arg = 0;
6 |7 |: t+ c3 ^- F // 不允许该中断自身嵌套 `; {0 I- U6 r" q
hwiParams.maskSetting = Hwi_MaskingOption_SELF;) @3 N: q1 T( C) z; F
// 使能中断' T$ W* R% }! w# u0 D
hwiParams.enableInt = true;# Q7 j* C. b0 e
// 可屏蔽中断 4
1 F X8 @: W; [& y% ?) h$ i* _ // 中断服务函数 hwiMain- W6 r3 C$ _8 r4 R
hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);4 y" A+ ~: S \( z% p
if (hwi1 == NULL)9 h9 }4 h7 ^5 @: m" [
System_abort("Hwi1 create failed");
1 X/ j( s# i4 _7 M" H( }4 s BIOS_start(); /* does not return */
* n X* w9 d& @2 X- Y; h- ?: x1 N return(0);
. J1 s% V! Q/ ?' s( m! u: p}
# u9 D# M/ O+ i7 E5 p. f: b% X) j, `# m6 ^& l
|
|