|
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下
3 _, |. `! Y+ Y// 发送缓存2 @) Z! w M& H2 n8 B- l1 |9 F$ l
char Send[] = "UART1 test......\n\r";/ ?! a- Q4 _8 |" o# u& ~
2 u& ~$ p: n. C8 ~) G" pextern void UARTconfig()
' q8 k# B6 d" B{ s! |- j( q% M, H: z0 _$ }
//使能Uart1! @" a9 Q1 ? W" I+ p" O
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
+ u; z- j7 z+ E; t( |( H 6 O# C3 _. h' O5 P/ V
// 使能 UART1禁用流控
& ?4 j. N1 N4 D6 {! n: q UARTPinMuxSetup(1, 0);
3 ]2 w, m( W2 [ {2 y 5 b8 c: A2 m) \( K+ h% `' H
// 波特率 115200 数据位 8 停止位 1 无校验位7 u- o" C3 N5 I* J5 l
UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16); V+ d7 f) X' F( Y* H* v
2 }- v; v0 \7 k; H2 n6 @4 Q; ]( ] // 使能 UART1
/ ^" X+ f( w( t9 V UARTEnable(SOC_UART_1_REGS);: Q" y3 l- N2 y! i; _: y4 n+ C
// 使能接收 / 发送 FIFO q5 [9 o* H9 i2 _% f! |: Q& C
UARTFIFOEnable(SOC_UART_1_REGS);" W* I% u8 a3 z; O
// 设置 FIFO 级别* v( c0 D: |$ g, J4 U# M
UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);' n2 z# n9 M8 w( ^9 ` @$ r
//Uart1中断使能
y' c6 w- x( _ unsigned int intFlags = 0;
7 f$ k) ~$ y. ?5 N# E intFlags |= (UART_INT_LINE_STAT | \; s% `/ [9 j7 O+ h5 ^3 v# y4 V! }
UART_INT_TX_EMPTY | \
7 S) f, w2 d/ E) ^* { UART_INT_RXDATA_CTI);
& J6 M l) a- \8 ?7 Y3 R+ g
3 I2 h/ E. m4 S3 `' i UARTIntEnable(SOC_UART_1_REGS, intFlags);4 q) X9 E* y- V! k
}
* Q2 N; f0 d6 P( S, g: |% |2 w* _//UART 中断服务函数3 p8 k; i% e; m' w8 ^. e/ F4 n
void UARTIsr(UArg arg)
8 [. O/ b# u1 _; i% [5 k/ |6 V{# a. y' M" M/ ~2 ~& w) R% N" Z
static unsigned int length = sizeof(Send);' o) c! q G% p, W7 N
static unsigned int count = 0;
6 C8 Q7 C) t R2 Q* p6 z4 r( w/ [ unsigned char rxData = 0;+ N# o& k& o# T) ^
unsigned int int_id = 0;
! | j+ @' F: _6 C" k" m- ` // 确定中断源) @4 f1 R0 ?& I1 a+ Y, M
int_id = UARTIntStatus(SOC_UART_1_REGS);5 Q- ]( b! |; ?$ y& n
// 清除 UART1 系统中断
G, t. z( o9 C3 @# Y4 Z/ } IntEventClear(SYS_INT_UART1_INT);
# g% V$ Y. z) o+ Y3 U% i5 ? // 发送中断
6 B5 g% F" A6 ]5 @7 n if(UART_INTID_TX_EMPTY == int_id)
! z7 R) k9 v! C7 t {& A$ w8 \3 \# U8 D
if(0 < length): m1 n3 @# q/ i. d
{0 H' p4 W% }8 M# b0 G% x- Y
// 写一个字节到 THR
9 b) d+ ^# Q9 n# ^ UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);5 a9 u* B/ s$ V; D
length--;3 n6 h9 b# A5 z( A% c
count++;$ A' Z ?# S" e6 X( }: d& G- q
}# r/ Y' I% [2 r+ a
if(0 == length)( l0 m1 |3 ~2 X/ R; a0 n P5 S6 x
{
* X* L( w! J& \$ d% y2 v // 禁用发送中断) y8 _/ N7 V) g7 x
UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);# K3 S) r5 P0 O4 N2 H
}3 Y4 s+ P; l5 b* H* U4 V- q+ H( }1 h
}' Z/ d0 ?) t/ i* `( x2 ^
// 接收中断
! m7 Y3 N+ T7 r4 w; L0 { if(UART_INTID_RX_DATA == int_id)
8 F% x9 ]& Y! N$ T5 L4 c {, V/ s/ ?. P2 E& V! S/ \
rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);3 T" Y/ |8 |) r; d0 }5 H2 R* [
UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);6 ]2 S' K! U4 Z+ {: x4 n
}- ]5 c* G3 B+ S# A$ u @( c; r
// 接收错误& O" }& L- ^3 b9 b6 Y0 d4 z
if(UART_INTID_RX_LINE_STAT == int_id); K) D( r6 ?: v0 ^
{9 ~% T( a2 F6 G1 a1 `5 U
while(UARTRxErrorGet(SOC_UART_1_REGS))
( B! C& T W% R4 X {
5 G; s. E2 Z- h3 T! ^ // 从 RBR 读一个字节: Y8 z0 `* `! s" u# y
UARTCharGetNonBlocking(SOC_UART_1_REGS);
7 h O0 i l# S5 C+ s8 K }: [) N" r+ }9 C8 _) m% Y! ]
}3 F5 v7 t( B& ?+ k1 g5 w5 L
return;
' s" h- ^: l" c. k4 [; ~& y}# O; `+ S5 F3 t2 c3 ~( c; u$ S
Int main()1 p! H7 Y7 F* M% y
{
: X: ~) Q7 P: m$ `: y- k8 z+ h5 f UARTconfig();//uart 配置
7 n2 L9 Z" N1 A/ j8 a Error_Block eb;
2 w1 [, j5 ^" O3 @6 U6 m! k System_printf("enter main()\n");8 G& n$ w' L9 I2 P
Error_init(&eb);
% R' j+ w% L5 s // 动态创建硬件中断
( K) u1 x: B2 s$ Q Hwi_Handle hwi1;
5 T3 U, g; @9 \9 [+ ^% R) } h Hwi_Params hwiParams;8 @6 d6 J$ m2 M2 u% j- C
// 使用默认值初始化参数
" l# Q) o5 X8 v6 k" a }" x' _5 x Hwi_Params_init(&hwiParams);; }3 R/ N: o# [: m9 P
// 中断事件+ [( j! G: d/ F/ y3 c) q
hwiParams.eventId = SYS_INT_UART1_INT;
# u! z U" C& ]4 Y: X. O6 t // 传递到中断服务函数的参数
+ W0 B$ }/ M! v4 p+ S6 v3 n hwiParams.arg = 0;
& K+ _6 w; V- O# ^0 e // 不允许该中断自身嵌套
/ d. M% k, {+ B hwiParams.maskSetting = Hwi_MaskingOption_SELF;" X2 l9 i' Y$ Y' X
// 使能中断% {+ J( E2 K- Q6 Q: W& L6 L
hwiParams.enableInt = true;- j0 S0 H9 J' O( H ?
// 可屏蔽中断 4; h' m& D) y( d, \, E; w1 a
// 中断服务函数 hwiMain" R& ?: P$ v+ `! c
hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);$ C$ t0 G4 {) @3 G4 W" o8 N0 m
if (hwi1 == NULL)
/ R7 w. t& |" Y+ [+ R3 t System_abort("Hwi1 create failed");
" R9 a+ I9 F* }6 D1 } BIOS_start(); /* does not return */8 G5 K% g6 Y, E. i" ]! V( f1 y
return(0);+ ?2 p$ `6 E U: L4 ^% w$ c
}
$ ?# x; B) [$ }4 N$ M5 i3 X3 Y5 _! u
|
|