|
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下: t9 }! o' z( H) c
// 发送缓存/ H0 F {$ ^7 q, ~, r7 {: e
char Send[] = "UART1 test......\n\r";4 p; O5 G1 ~9 y) ^
% L4 \2 v& D* y- W2 J2 k- z0 V1 W. V. uextern void UARTconfig()
) P. V: b) S, @: O{
4 ~: i! W7 e0 p //使能Uart1( n' }6 v8 h$ k, q& I' D0 Q1 y Z
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
3 N' b& |9 V# b0 W6 J1 U4 E4 ` 4 U5 [( x/ Q D) F# Z
// 使能 UART1禁用流控% ?& L% a7 r% H& y7 N3 F1 h
UARTPinMuxSetup(1, 0);# z/ y! u( v8 |: J. b* R. X8 V! N) [
, R3 d5 c- B" P1 a! l5 y, I
// 波特率 115200 数据位 8 停止位 1 无校验位
4 f7 v! g0 p6 e& S* P3 X. ~ UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);1 _5 V4 w) K' X8 K4 V4 `0 B$ ~" T
& x6 q8 w& Z0 m% ?4 I
// 使能 UART1% u* f% M4 j# {* ^3 {
UARTEnable(SOC_UART_1_REGS);0 s9 W6 G& j; U; c* a
// 使能接收 / 发送 FIFO3 V. T1 b7 f2 h, f" c7 |; D2 r( M- h
UARTFIFOEnable(SOC_UART_1_REGS);
D8 @. I L3 |# x' b( O7 i/ _ // 设置 FIFO 级别" g* D& A; [& n @. Q% h
UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1); ?. i5 {8 Y9 H! }6 m% `# `0 F
//Uart1中断使能9 Z; h j$ {1 W- ?" y& R. n' J
unsigned int intFlags = 0;8 _" N2 L4 L/ M9 Y- n: t
intFlags |= (UART_INT_LINE_STAT | \
: C6 E5 ?( E* |' @ UART_INT_TX_EMPTY | \
- I7 ` t. T0 J6 a! b% L UART_INT_RXDATA_CTI);
1 B3 F) H' s* v" k) c. O( u : \' @1 O! q7 X2 q( s$ W
UARTIntEnable(SOC_UART_1_REGS, intFlags);
/ d6 T8 S# {5 ]* T5 |5 K}
% W5 Q0 t. I+ X! l1 Q* B//UART 中断服务函数6 f9 R T, i" C/ a+ Z6 {
void UARTIsr(UArg arg)
; B0 q$ Z: {3 m: x/ E' s2 Y{
6 \. U. V2 {; Q( a; u8 b static unsigned int length = sizeof(Send);
2 ?. S8 K, q9 {! x' P4 ]8 B3 {! @ static unsigned int count = 0;
* p% P" C6 @2 K1 ? unsigned char rxData = 0;
, ], n# ~: {: Y unsigned int int_id = 0;
3 w: B8 n2 g* Z" R5 u // 确定中断源3 ], W$ ?0 R* g. K9 B. K3 @
int_id = UARTIntStatus(SOC_UART_1_REGS);
% ^6 e6 A: ]/ _- }6 u; n, v // 清除 UART1 系统中断
! ]2 @6 d9 L) T, ]! u IntEventClear(SYS_INT_UART1_INT);
5 [0 {2 m- x' C( ~ // 发送中断+ m9 W/ G2 _% |
if(UART_INTID_TX_EMPTY == int_id)2 p6 T4 z; q; V
{: K& j4 f1 H3 T3 @" ^$ i, ]7 l: X
if(0 < length)
3 @7 ~: i. {$ U {
3 g: m z; ]6 {6 u ^9 Q, K8 i V // 写一个字节到 THR( [7 j" }6 k+ q- q
UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);% v, k2 N1 J+ k% a. c
length--;( d! z5 V* F! B
count++;4 m, V" { V: z8 Y) y( Z1 S' R
}' d2 }7 j" E* G3 J2 v
if(0 == length)) X. u/ i1 T, U/ Y
{) z" n- U( o! S# T
// 禁用发送中断, m3 s+ c) B0 H
UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
# V+ K" @* I6 w }
2 J* w: y/ O2 _5 E! d }, F' K& G1 c" y7 |
// 接收中断, m! J5 V$ B' b: H
if(UART_INTID_RX_DATA == int_id)
9 b3 P1 I* v3 } {1 r4 u" ~) b& @1 k% C* Y. c9 _: \9 ^
rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);5 m( K7 c1 q2 {7 f/ P! e8 I; |
UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);+ U- E& X% m; ?2 K" ~
}: _, q7 Q; z# L
// 接收错误( H6 h3 z1 m( k& F' N
if(UART_INTID_RX_LINE_STAT == int_id)
6 A8 s0 ?# V8 k' Z {
- L( R& ~9 u8 L/ b while(UARTRxErrorGet(SOC_UART_1_REGS))* F+ c0 n9 y q6 n& n8 E
{
9 @1 f# A' T. w4 x // 从 RBR 读一个字节! Z2 ]3 n$ |0 ]- {( V3 F2 b1 s' a
UARTCharGetNonBlocking(SOC_UART_1_REGS);9 X1 d! q& K: y! `% M9 L
}+ d* a3 q3 M6 ~7 b
}
0 k1 Z4 L$ T8 Q# Z* F return;% y5 m4 Z' `, P G- B' b
}
2 D5 M$ {5 {; J0 J6 O j, XInt main(): U3 Z7 k: S: i; l7 |. m" X
{ + D2 ]" g/ W" k: |
UARTconfig();//uart 配置
1 F6 L9 `* p( J6 {5 i! o4 B Error_Block eb;" W* J6 i. }- A1 W8 E# t2 u
System_printf("enter main()\n");: A' _1 Q2 s o: y; k% K
Error_init(&eb);2 Q0 R3 ~" Y. [# F( z1 g
// 动态创建硬件中断
' u( V( @) u) [8 U Hwi_Handle hwi1;
O0 ]+ r% ]# U Hwi_Params hwiParams;
4 |% D( `& S* l& f( @ // 使用默认值初始化参数, l& E t! \$ K3 ^
Hwi_Params_init(&hwiParams);( ]. Y) X! J8 Q; [: L3 R, F
// 中断事件
# a8 J" Z1 ^# Y" N3 y+ E7 {' ^& c hwiParams.eventId = SYS_INT_UART1_INT;7 s3 M2 \+ c# G, b7 m( r
// 传递到中断服务函数的参数- s3 k4 M$ v k, E. |
hwiParams.arg = 0;
G: [- k! v, k0 w/ ]/ D // 不允许该中断自身嵌套
~# |/ n: W8 ^& D hwiParams.maskSetting = Hwi_MaskingOption_SELF;. T5 y" Z8 o0 }, e& {9 D0 ^6 y
// 使能中断! g' z" B+ j' _1 t! l7 g8 t' E
hwiParams.enableInt = true;! d6 K' u* l, g
// 可屏蔽中断 4
) H' A5 m E5 V; d/ Z // 中断服务函数 hwiMain
- p& {$ @! p0 q6 T6 j- K hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);' T) U& [5 R% D% ^' e% V
if (hwi1 == NULL)
# t# M5 @) V9 H" Z( i& w4 q System_abort("Hwi1 create failed");' V0 Q S( }8 n% t4 J3 Y
BIOS_start(); /* does not return */) z5 ?$ d; `8 J+ D8 b5 t) ?1 z
return(0);
+ n7 Q2 v, c. Y2 B, e; S}) e' e; K9 o6 O, z7 `
* b6 @2 w) A7 }" Z7 Q" @, K
|
|