|
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下$ x& F$ {; x9 a0 Q7 }
// 发送缓存0 M. F8 c+ O; w1 o
char Send[] = "UART1 test......\n\r"; ]9 T' s7 m+ }0 l: g, M+ W* ?
_2 a% G# G2 P( w
extern void UARTconfig()
4 N% ^- I' d, [{
+ F4 }, p6 d! d0 k( ]" f //使能Uart1
) A6 |& s* K8 V% K9 z PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);0 n# n) G' B9 l1 Y" p$ R% M
% G9 W0 [- X1 V1 \. U+ g // 使能 UART1禁用流控/ w2 I# x B0 `$ f
UARTPinMuxSetup(1, 0);' h2 ]* z p( {7 j
: u+ b# }4 a3 y& K7 O
// 波特率 115200 数据位 8 停止位 1 无校验位
9 d5 ~/ T) ~/ ]4 ?, M3 c UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);; Z" [9 C9 F% t! F4 l1 f
- @. t: k6 |% D1 n# t/ V( q1 P0 @
// 使能 UART1
, p1 a7 M( n6 R+ I UARTEnable(SOC_UART_1_REGS);
) R% h9 [% ~! b) j. s+ C3 _ // 使能接收 / 发送 FIFO
/ y5 t& t. S. T: a) ? UARTFIFOEnable(SOC_UART_1_REGS);
) `: w$ o( }! u6 W% _! | // 设置 FIFO 级别( y# u/ B |; ~1 R7 t- R
UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);0 S2 p) |" E, g" f4 {
//Uart1中断使能
) n; X0 q V. x$ n) e unsigned int intFlags = 0;
3 T: M) L# s8 L1 q& e! Q2 U intFlags |= (UART_INT_LINE_STAT | \
& N! t& l1 R g; m UART_INT_TX_EMPTY | \* j1 ?- A4 K+ N
UART_INT_RXDATA_CTI);
* L- E7 B( I: v3 ?, r
6 d* U$ y; s O! O: t4 K6 R UARTIntEnable(SOC_UART_1_REGS, intFlags);* n# {2 k; _9 a: n1 c
}
( m; n& G* j0 q: `6 c. S; ? e//UART 中断服务函数' U8 b) m8 M- z; P2 q/ Y# w8 f
void UARTIsr(UArg arg)
; G9 E3 ^6 W, X{
, |9 f G! A W6 u( A7 d8 J; j static unsigned int length = sizeof(Send);( G& q* p* J! U
static unsigned int count = 0;
7 V% Y3 g" n2 o' h" k unsigned char rxData = 0;
+ ]' K; X. d+ T/ ]/ n( }3 P0 C unsigned int int_id = 0;
& s9 u# \$ n& h' m U/ p // 确定中断源; a+ E/ O1 y2 s- n5 c2 Y
int_id = UARTIntStatus(SOC_UART_1_REGS);
|$ q' {! B0 @) H0 J. G // 清除 UART1 系统中断
* U. \1 s* e$ y( c7 q$ y, l# Q IntEventClear(SYS_INT_UART1_INT);" J9 V$ }% ~* i# b, J
// 发送中断+ N* D1 J% }; E+ `9 m9 i
if(UART_INTID_TX_EMPTY == int_id)
% x! X; H: U& T! @ {
( x& w( R; f& i if(0 < length)
1 I% K1 I; M* K o {
. {" q- {* j+ e& w. D" p // 写一个字节到 THR
) e- T- T; ]- X& Y; G+ g UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
- X: C% n* W5 h& `6 }$ }" O2 O length--;
0 q( a) l* j# n& ]; q+ f count++;$ u G P& U7 a
}0 }0 N# }) }( i/ @2 ], ]3 h
if(0 == length)
. {$ r* P. B; G8 F4 }4 k! ^4 @ {4 a7 R6 I. T$ c- r5 u4 d9 M
// 禁用发送中断9 x6 i+ {1 B5 ]& R
UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);# w, j" q% J% x5 c* C5 ^- ]
}: a7 O+ c0 @) z- e$ o3 W
}
l' j* u' z5 v // 接收中断$ _1 u3 g2 ]! Y+ d( I& x: k
if(UART_INTID_RX_DATA == int_id)" S. P: d8 n" X+ R: f$ m; m6 f
{
3 y+ K3 C. [' t* D rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);+ w! W7 ~# T9 Q# \" w4 j2 e2 {
UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
6 E) y; i+ d: D }
W# Y' ?1 {1 K ], b // 接收错误! {2 v. P( }) y( E5 {
if(UART_INTID_RX_LINE_STAT == int_id)
' d( i: L5 t) E( j S7 m {: _: k8 M. S. S
while(UARTRxErrorGet(SOC_UART_1_REGS))5 ~ ]3 y! b& P6 M
{" o9 q1 k- L8 @9 M; }
// 从 RBR 读一个字节
, x% |1 `7 D, d( }. q* s UARTCharGetNonBlocking(SOC_UART_1_REGS);
2 w/ k/ {$ x/ z' N/ q/ U) K }4 o- ?8 g3 _3 ~) k- z
}: L- x% K% c: B9 d' [
return;/ N; [2 \, G6 I' g% T
}
- P# L+ j6 I% t% p4 BInt main()
5 Y8 Y. M" A" j* H{
3 k3 f/ U9 K& E UARTconfig();//uart 配置+ M* R) p# J7 S( w
Error_Block eb;
6 F0 i' z! D5 h. P% c% y) R$ G System_printf("enter main()\n");
6 R7 u# l) f |: D2 T' o* H Error_init(&eb);$ p% u7 y: V" F
// 动态创建硬件中断 v' E6 W1 x! Q- R0 T6 }
Hwi_Handle hwi1;1 c2 G- p; t9 B! y9 Z% j
Hwi_Params hwiParams;* C6 U' u; v: K% u& i
// 使用默认值初始化参数; W' y, u9 P& z8 g
Hwi_Params_init(&hwiParams);2 N2 k6 ^0 P; S6 p( u5 Z+ \
// 中断事件# S5 O% V% Y* T
hwiParams.eventId = SYS_INT_UART1_INT;
) n1 z5 | ?3 z" ?0 P+ ~% O: P // 传递到中断服务函数的参数
5 m6 i0 u) |: L7 g$ y hwiParams.arg = 0;$ P" h8 f" z* s7 V
// 不允许该中断自身嵌套
$ l* W8 @9 r# O0 n& J6 i hwiParams.maskSetting = Hwi_MaskingOption_SELF;4 j+ D5 P& {1 p
// 使能中断
0 P8 S$ ]% e7 D! t hwiParams.enableInt = true;
+ f |6 N3 G6 Z- \ // 可屏蔽中断 4/ t0 b/ \/ I$ _* u8 w- t0 ~' `8 @
// 中断服务函数 hwiMain
' x9 ~" A) q, Z3 b$ c# Z+ M4 x+ P hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);
2 {9 f& t7 H. p! I$ W( d w if (hwi1 == NULL)
5 h1 ?' O1 O+ s$ L System_abort("Hwi1 create failed");- P2 O7 E; a: b( m0 }! S
BIOS_start(); /* does not return */
1 |: [3 _9 ?+ T' x* u return(0);
2 b1 r! s& k5 q4 D0 |; F}* V0 ?8 b' ~$ Y) j
: h1 a. ?4 u- {7 O7 u, j
|
|