|
|
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下, p8 k q2 g6 X( x$ M- [
// 发送缓存
- F, v. m5 \! Tchar Send[] = "UART1 test......\n\r";
8 ? }' i, G0 y, [0 v1 X6 l
( c; z; B5 B/ J1 y: c, Mextern void UARTconfig()
1 t* i' e) z0 k6 t1 L{9 \7 h5 c4 L9 H3 d
//使能Uart17 X* ?4 R9 \, [
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);4 e! J8 V& c! O) O3 y" o; l! r
% J4 s0 m) ^/ V% h% n // 使能 UART1禁用流控6 S; f# |# Y5 j6 j
UARTPinMuxSetup(1, 0);- z6 l& p# U2 m/ y# g' R* o
) y4 q* F" ]5 [& _+ @ // 波特率 115200 数据位 8 停止位 1 无校验位
; {/ b* f5 {4 Z$ m9 R( y% O UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
+ H3 M, y. {7 d9 Z5 w 0 l2 {5 T/ `0 w6 W
// 使能 UART1! c5 {2 M* Z( ], P. U
UARTEnable(SOC_UART_1_REGS);2 H) I! s' b4 l, K! r1 p* N
// 使能接收 / 发送 FIFO& s! w# h: v0 N4 y! y
UARTFIFOEnable(SOC_UART_1_REGS);. I) J0 s( V8 C( G" U. M
// 设置 FIFO 级别0 w! j0 M" l* J# ~! }, o
UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);
& [( W0 L: e0 p3 V2 s //Uart1中断使能+ b7 @, y/ T% E8 l/ _
unsigned int intFlags = 0;9 H. X( E0 p/ B' D9 v# V: }
intFlags |= (UART_INT_LINE_STAT | \7 ^$ p; n* q5 i9 k' l" C
UART_INT_TX_EMPTY | \
c- H3 G" M! ^! U O! Q UART_INT_RXDATA_CTI);. p4 K/ J S, m" {& u
8 C) M) v' H# V4 g5 t3 X1 |2 m UARTIntEnable(SOC_UART_1_REGS, intFlags);
5 V6 @+ z7 B/ ]' a# \2 O}7 @$ s; t m) I ]" b0 o
//UART 中断服务函数- A& d$ F2 [: h7 s! k9 g# n
void UARTIsr(UArg arg)
) k5 X% L. O3 M6 ?{
" a7 @: k+ r% q; N/ d3 N* M/ e# ~ static unsigned int length = sizeof(Send);
+ p3 I7 o5 u; c# R7 W# u static unsigned int count = 0;
% T$ a7 S3 U0 P& _2 l unsigned char rxData = 0;4 a' F4 _9 J2 x9 A' A6 i& q \. s
unsigned int int_id = 0;
' s$ a- N. H# D // 确定中断源& Y+ a& J3 t. P$ P5 B8 }6 f4 F/ `
int_id = UARTIntStatus(SOC_UART_1_REGS);
7 T' m- |. t' Z( [2 P A // 清除 UART1 系统中断
B$ T& F6 o: K! D. ~, |% ]; q IntEventClear(SYS_INT_UART1_INT);6 C) p' J' W: m8 q' X+ {/ ~
// 发送中断
( G5 U5 n I$ ^) D$ r8 L r3 ~ if(UART_INTID_TX_EMPTY == int_id)1 T" B) |. C& e6 t
{
/ p0 ?# T. l2 O6 h5 ]/ X# K# f/ U if(0 < length)
9 }2 L# F% z4 N4 y9 s( p$ N+ u2 T {
8 y! X7 |/ i6 d // 写一个字节到 THR
+ ^! G. O, u( D5 X0 b# E) H UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
- s% U3 S5 H0 x3 T- `& C! Z! G! _- _ length--;! Q, p1 `) @! a& `! g+ f& I4 {5 T
count++;
- g- P) M( W# Z% q1 Y. \ }) z/ F- g1 W# C8 c7 E; ~4 v
if(0 == length)% z9 n$ \8 Y) V% R3 [
{/ O2 i1 a7 v9 k
// 禁用发送中断' G6 F: e6 V4 _! q7 X4 E# J k( p
UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);3 i/ K I' [) ^; i- c: a) s
}' U( _+ [9 G3 B
}: D% h' L2 Y1 @* b/ o* t
// 接收中断8 Z. S5 j( o+ g* { L
if(UART_INTID_RX_DATA == int_id)
/ e! i* l& }+ d0 G3 i& H' R0 ? e {
3 p7 e+ N: b" r3 Q$ \6 [( q rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
: w y7 f# D& E2 R& j UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
8 P& l. N- }; l; A/ L" k }% b' V' [2 {' ?$ j/ R9 E) y
// 接收错误8 m8 \& J1 S: X. \1 M4 ~ K
if(UART_INTID_RX_LINE_STAT == int_id)
$ g4 @0 h' T# V+ M- N8 s7 U {
8 V: u1 Y" Z9 V+ i: w" o' j; D while(UARTRxErrorGet(SOC_UART_1_REGS))( F& J% n4 U" A9 X4 A
{& \; R/ f. ]5 @ F, M8 ]7 j6 W" O
// 从 RBR 读一个字节
; ]+ N9 J' V9 `) M UARTCharGetNonBlocking(SOC_UART_1_REGS);
: ~7 _ o2 z, z' S) s }
- @# g: P \; `& n1 B } {( b. Y; [: t4 |# L' Y6 U
return;& m9 Q) a2 _6 V% B: b! L
}7 F0 x$ U! M6 x; m0 C5 U( U
Int main()4 I" {- j: a0 N$ n( J
{ % o+ r1 s9 G: y2 C) J" q& _! }
UARTconfig();//uart 配置
# `: U8 q n: K! A7 b) K Error_Block eb;
# I" S6 O+ w& g# X0 _ System_printf("enter main()\n");+ N# F8 k( L5 J# k; I# [
Error_init(&eb);
3 r6 I! }' `" m( D2 n% e // 动态创建硬件中断
! b; l: K" k0 M Hwi_Handle hwi1;! ?4 k- W4 i8 \4 [9 B( f8 [
Hwi_Params hwiParams;
+ {4 J; E' }# F# e# p // 使用默认值初始化参数
+ B. l5 x% n6 `/ C: j& |% v Hwi_Params_init(&hwiParams);
) a3 c& G0 F, R" d3 s0 x. E // 中断事件* K T1 u% J7 y" J9 s1 Y* i
hwiParams.eventId = SYS_INT_UART1_INT;8 E% q' E# U& [ ~
// 传递到中断服务函数的参数
( n# n1 \* ], `6 ]$ \. A h hwiParams.arg = 0;
; D5 p! q) j. A4 ]3 j" } // 不允许该中断自身嵌套, G S. {( k3 F- {7 y6 r
hwiParams.maskSetting = Hwi_MaskingOption_SELF;
- V, M; g U2 f0 f+ e3 V1 N // 使能中断8 k& U- r: ~4 A3 i6 H2 { d
hwiParams.enableInt = true;
$ v6 q) A# T' s9 D! G/ Z) i7 R // 可屏蔽中断 4
8 U5 U* G$ h5 N: g( Z% c2 Y! ` // 中断服务函数 hwiMain% t, I% {$ D: G. }2 _# A
hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);
6 o! f& Q4 |: a+ n0 M if (hwi1 == NULL)9 {$ q- Y8 W; c( s
System_abort("Hwi1 create failed");
e M1 o9 o* ` BIOS_start(); /* does not return */
, N$ ]5 c- E& t return(0);5 w% h$ `" `2 s, X
}; a2 Z5 p* w9 K* f
% N& K6 }5 e7 Q+ |
|
|