|
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下) W5 Z# v* r6 D# d: j( z0 L8 r' B
// 发送缓存
+ ~7 `2 l7 K# w$ n0 d4 {; kchar Send[] = "UART1 test......\n\r";# f2 i) [' A6 g% H. A8 ^) @9 R
`- v4 G; n& w; R' `8 zextern void UARTconfig()
" Y' z% _, k( V{
3 B" f, i2 Z/ t4 H/ A1 R O- ~ //使能Uart1
7 M9 U$ n8 V$ E7 Z1 t, I# e PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);% ^8 d( w+ p/ o5 ?/ y" T# V
" ]9 z% k% [5 t$ T- |
// 使能 UART1禁用流控
: W/ j! Y0 H9 R Z) P: Y UARTPinMuxSetup(1, 0);
8 F. M. X2 n( @
/ E' n$ ] X2 h8 \ // 波特率 115200 数据位 8 停止位 1 无校验位
$ R- W( k3 Q! ?* g UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
- Z2 O' z. E. |5 S
w- K& B6 `8 J // 使能 UART1
0 T. i* }5 c. N) h* [ UARTEnable(SOC_UART_1_REGS);
! @) U4 \ Q8 S8 m$ O // 使能接收 / 发送 FIFO6 B" C8 D$ V" L
UARTFIFOEnable(SOC_UART_1_REGS);5 R2 |6 [6 ]1 {* r& [& r
// 设置 FIFO 级别' u# j* U3 @+ Q+ K3 ]7 v
UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);
0 d$ I% }7 Y# R3 }, c: @! i; w, W& b( w3 ~ //Uart1中断使能
% E1 t6 w/ K$ k: m" ~3 K unsigned int intFlags = 0;4 G2 F7 } h' X' i/ {4 i
intFlags |= (UART_INT_LINE_STAT | \
5 @$ z: w: ? w UART_INT_TX_EMPTY | \
" u( f# O0 V8 T) x* x9 E( F1 S7 E UART_INT_RXDATA_CTI);# t+ x! h, [3 N# _ g7 z
* X. P4 C: j" s3 p
UARTIntEnable(SOC_UART_1_REGS, intFlags);0 @3 @$ F! S; q6 S( Y9 b
}3 R$ F: S4 s9 R% N- |" G
//UART 中断服务函数
" k" _9 g9 z7 m4 W! y- T& {3 O: xvoid UARTIsr(UArg arg)
) D& Q2 ~" r0 Q7 I{5 m" d4 J$ [. n. v r7 Q
static unsigned int length = sizeof(Send);- @6 R( o5 q' M& F
static unsigned int count = 0;
; T! @0 F3 [' y unsigned char rxData = 0;
L) w0 _7 ]& i8 ]2 _ unsigned int int_id = 0;
% X- U' G* c) V& O3 r // 确定中断源7 n/ L! W U2 T/ p U2 i$ T' B" R
int_id = UARTIntStatus(SOC_UART_1_REGS);
) t2 `; t0 N( x+ _* y; j // 清除 UART1 系统中断, I; A- W; e$ ?. o; J
IntEventClear(SYS_INT_UART1_INT);
" o% B) x9 Q9 | // 发送中断+ P# s5 N, ^* m; n& A
if(UART_INTID_TX_EMPTY == int_id)( E t- p0 g! H1 Y0 t- k8 l' b }
{
) ~; C q( F8 R$ @7 Y if(0 < length)+ v4 W% \1 m( {1 e q$ k; \" F7 ~# @
{+ w5 v5 j0 ^3 }: H8 ]1 H8 ]8 M
// 写一个字节到 THR% M# r$ ^7 [1 m$ I6 \/ G7 s$ v
UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
! _4 U5 T) O, K; x" e I2 y- V length--;
K. S, z% [& l$ _ count++;3 B* D' w3 C0 m8 a) Y8 `0 r2 N
}
0 e. I- N1 q& `( B if(0 == length)
& I' J; X' t0 @& N {
! B. a7 V; u# k. @ // 禁用发送中断
5 @$ N4 ~# D+ a& G UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
( V7 A& P* [/ h+ _$ G* J/ T }
; y1 S0 }6 h! ] Q* C }
- b& K" ?1 v& t9 A; Y q* ^' r8 B // 接收中断/ T- B9 q7 t: @% M& Y$ [% B
if(UART_INTID_RX_DATA == int_id)6 ?) W" G8 f/ m- m, x
{& }5 ?, C$ Y4 M4 U' [* D6 h
rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
0 [9 Q! V, {$ J0 m% Z% { UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);; _0 @) ?3 C0 i Y2 S/ `( l2 |
}
* f/ p- p; L* ~: l2 f; B // 接收错误
8 u& h8 u2 q1 }* ?* G: { if(UART_INTID_RX_LINE_STAT == int_id)
8 ^+ J5 x, L6 y1 S0 n+ y {2 M3 `0 t$ Z5 o
while(UARTRxErrorGet(SOC_UART_1_REGS))
( }# B N$ W. E2 Z" I4 D {9 C" K, ?& Y2 S
// 从 RBR 读一个字节. e0 E# x" b$ g9 x0 R0 t
UARTCharGetNonBlocking(SOC_UART_1_REGS);
3 T# u. |5 ~: s }7 ~1 K$ F$ h* h2 V. k U8 R$ |( B5 }/ {
}
. H0 ]: b1 t5 e" g; b return;
' @4 X/ i" a4 I1 \: a7 j: x# V# }}
2 }' |5 p' k+ [: @ ]; A9 ^ BInt main()- A: @9 |4 H$ X F* N6 s* n/ k
{ ! p7 M4 [( N: P7 n! p
UARTconfig();//uart 配置0 E' i9 x. [) Y. {/ F. h! O' {0 E
Error_Block eb;1 A3 f5 m! M- p
System_printf("enter main()\n");' L3 U( ^1 ^5 q: n
Error_init(&eb);) Q M- O6 f8 l( N5 K7 P- B: T
// 动态创建硬件中断$ N; I! H3 {7 D @3 k- x" {/ g- ~
Hwi_Handle hwi1;5 ?4 W9 c' ^3 t' M) k$ o( Z2 P
Hwi_Params hwiParams;
$ Z& D% {$ z8 T7 M // 使用默认值初始化参数5 H+ V) p, l$ Y" X" j6 e
Hwi_Params_init(&hwiParams);* D/ g' }9 F" X
// 中断事件0 j, ?! r# c4 T
hwiParams.eventId = SYS_INT_UART1_INT;
# f: a0 n' q, g+ S; U) E: q // 传递到中断服务函数的参数
9 C" x4 w& i: c9 M hwiParams.arg = 0;$ o" m. A C& S' m( ^
// 不允许该中断自身嵌套3 L6 E* u9 u9 A+ E3 J) J
hwiParams.maskSetting = Hwi_MaskingOption_SELF;% W' P8 S1 v8 R, T
// 使能中断" q; \/ @% z; b# ~+ j5 Z
hwiParams.enableInt = true;
- ~9 @8 H+ _' v! M) y // 可屏蔽中断 4* F" P6 T4 d0 j% O& E# o ]& Y$ [1 s
// 中断服务函数 hwiMain( G T! Q1 ~8 Y% [$ A" l) R& u9 X9 ~. Q
hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);" ^9 w: |+ A" A& D
if (hwi1 == NULL)
5 ]" s7 |. X% H! h [" L# p System_abort("Hwi1 create failed");
' n ~. j S3 } BIOS_start(); /* does not return */
% P0 g1 o9 `6 X& H return(0);8 g! o; {5 i: J5 U6 j0 C
}$ M5 D6 C$ y1 I3 J% v+ B) ?- ^5 G
0 m2 }1 ?: X& }! ^. h( |$ W+ N |
|