|
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下7 q. J$ z$ @ w6 M
// 发送缓存4 j, S: A' P7 b# J' `, o
char Send[] = "UART1 test......\n\r";' P8 [! w; {6 S) J0 o* _6 a
- b9 M+ P% D4 J$ e; r( jextern void UARTconfig() p. n! s1 n* ~$ J
{9 R0 C+ ^/ S( r: _7 h( S, s- E
//使能Uart10 f7 h+ o% i5 Y" \! q1 ^
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);6 M& I, r5 |+ H2 h, X+ I8 @7 o& p
: w: H4 R" h! ?6 X( \, u! v // 使能 UART1禁用流控( W: B% A9 V3 |. O" {
UARTPinMuxSetup(1, 0);. c, M; ~4 H! p4 t# a7 |2 }
; L! s- q8 t, e+ M
// 波特率 115200 数据位 8 停止位 1 无校验位- u) Q+ W6 T8 I/ l/ }0 E& U
UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);+ H% \: i2 _% i
1 m! l7 C) x Y7 w& X
// 使能 UART1
0 k0 \9 r7 H7 b4 O! ~, }' H UARTEnable(SOC_UART_1_REGS);
1 U* l9 V/ r/ G8 L2 z% R, q // 使能接收 / 发送 FIFO$ m3 [% V+ K j9 L
UARTFIFOEnable(SOC_UART_1_REGS);: O8 t+ o$ Q) V$ Q2 V8 Y
// 设置 FIFO 级别; g3 l, [2 y2 T9 N
UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);3 n" Q- T+ ^# R# C r2 a
//Uart1中断使能
5 E$ ~" [; [, Z! f unsigned int intFlags = 0;
! v/ }9 W2 E) u4 w: x7 P2 ~ intFlags |= (UART_INT_LINE_STAT | \' v1 x& r% q* y m
UART_INT_TX_EMPTY | \; p0 Y9 c; S' G8 l- x: m
UART_INT_RXDATA_CTI);1 X+ p4 ?6 D+ Z7 _( c
# K& G" h* J, M UARTIntEnable(SOC_UART_1_REGS, intFlags);4 e# l7 h! G$ M
}9 G/ A5 \/ { S/ [1 _
//UART 中断服务函数
% j" z8 M5 Z; X1 W+ {& D+ ?void UARTIsr(UArg arg)
7 D6 O9 o1 L. x/ u! e# f{
" A: ~. W, J( r8 Q static unsigned int length = sizeof(Send);; [, H5 W2 H3 t
static unsigned int count = 0;- q/ x+ Y8 h) k9 P' C) r' y
unsigned char rxData = 0;
5 M/ D: u$ P& ]1 ]% v6 M- m( i unsigned int int_id = 0;8 o1 C2 f' G4 K; O8 r9 `5 N
// 确定中断源# }0 p" h4 l8 F: C2 i
int_id = UARTIntStatus(SOC_UART_1_REGS);% g1 D& U) A, h7 ?9 h! V' s4 ?
// 清除 UART1 系统中断& g, D" m( y6 N* M6 [5 S
IntEventClear(SYS_INT_UART1_INT);& H( l+ l/ h0 U- ?* {" e
// 发送中断
" u; Q, V* B' B+ ] if(UART_INTID_TX_EMPTY == int_id)4 t- P" h5 z1 [( G: L' {, R1 y
{
9 i' q! q; C, ~( W3 |) l if(0 < length)0 T) |) b. s' z' q' n! Q
{
* A* b( m9 [$ R" [2 m // 写一个字节到 THR8 y9 [4 G! Q/ H2 W& T
UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
8 r3 }4 q& w8 a" X& L' t' g5 j length--;" p5 b4 w5 K3 g# c8 F
count++;: b. w2 C5 m# n$ Q$ i
}
6 u4 o% _6 X+ ^! K- z. }% @5 ?5 b if(0 == length)* w% r- h Y" o5 f
{
C# }8 b A$ n // 禁用发送中断
( b3 T" i4 B; D UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);7 V( V* o1 c% }+ c$ G3 O; p6 b
}1 d0 {% B9 E4 c; q. e
}
! N& t4 L' o4 B" P // 接收中断5 c" Y0 v6 t- s/ C' p" k7 E R
if(UART_INTID_RX_DATA == int_id)' r( R) @; N t* n, M
{; U- D/ `+ _ ]9 y2 n
rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
3 o" b, \: Y- q" K: { UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);4 o$ i9 q* Y9 ^2 n' j
}
3 M6 |2 `5 | e. w& L9 p+ u // 接收错误5 }0 F" X) W& \4 L& v
if(UART_INTID_RX_LINE_STAT == int_id)% V* A& o1 _6 M5 a3 ~1 ~
{
' B; B, m' ]5 J) K! @( {/ P; k while(UARTRxErrorGet(SOC_UART_1_REGS))
" x( l1 T0 o/ | {
, h7 w0 I) r# ?, B% Q6 l$ Q7 W // 从 RBR 读一个字节
7 m$ Y# I3 o5 N: h* S4 S; I UARTCharGetNonBlocking(SOC_UART_1_REGS);/ t* K' D' ~+ J7 u. p% I+ T
}
3 n3 K, Y- N) a. B/ I p0 v }
. K! e' s3 w: {1 x0 {" K return;
+ Q1 P* G1 H+ z! p1 n}
- q; X7 c! z* T$ n& M/ VInt main(): ?) x) f2 \! O
{ @) f/ A4 n( ?5 s. _: s0 e
UARTconfig();//uart 配置; c+ _9 T, T$ P/ A, \
Error_Block eb;4 |" y) `8 |' |: }2 f# W
System_printf("enter main()\n");0 _, h$ w* G$ K0 [+ a3 l5 u d. q
Error_init(&eb);7 ]& C9 g) a! ]4 i
// 动态创建硬件中断0 m7 g' P+ S& E$ N+ ?8 c
Hwi_Handle hwi1;7 l# q- l, u1 k) m0 F% Z) C$ o! e
Hwi_Params hwiParams;
- k8 Q/ B' k. p // 使用默认值初始化参数/ G- ]' f# l4 T
Hwi_Params_init(&hwiParams);
) a1 i2 n* _( U+ k // 中断事件
" |5 V, r2 x: s" ]$ j) @ hwiParams.eventId = SYS_INT_UART1_INT;
; k c3 Y+ a* Q7 V ^2 x // 传递到中断服务函数的参数
, j U0 M1 k: Q; |1 C hwiParams.arg = 0;
8 ]7 @& r2 b. l; o8 ]2 ~6 W // 不允许该中断自身嵌套
: S8 B. g1 h/ X& G! U' f$ Y hwiParams.maskSetting = Hwi_MaskingOption_SELF;
# N3 @9 v0 e2 F+ K% J // 使能中断% S) N; w- H' w
hwiParams.enableInt = true;
: X, x( Q! b2 c- e" k i // 可屏蔽中断 4
Q1 D+ c! J1 s* t' y. Y- s // 中断服务函数 hwiMain9 ^! H3 R/ o* O. I# P& X8 X' E
hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);; j# q2 q2 E- W! @9 n0 l. n' R
if (hwi1 == NULL)8 D9 d8 t9 V) H% S0 [! ]
System_abort("Hwi1 create failed");+ H4 ?: |# M! ?, I2 t- O
BIOS_start(); /* does not return */
; }, A' U+ X6 n: q return(0);
" q, O5 D9 x2 H$ |}. ?2 y) \1 f5 J5 A5 C/ x" o. m: {
4 b! Z+ W" M: x+ [( [) C |
|