|
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下: h7 E4 l5 ^9 m+ @+ o. E
// 发送缓存* E) I; V1 G. L
char Send[] = "UART1 test......\n\r";5 j* a5 a. [1 |
2 _6 ~; ^/ P v0 d+ Q+ y
extern void UARTconfig()
' ^& z4 e# V E I$ X% ] V{( N1 c8 v' E, {# ]
//使能Uart1
% _ q/ F3 C! J+ s7 Q PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);2 @& [/ v% Q: c5 N
4 G& Z8 V- W% i" H, A% J3 F$ g
// 使能 UART1禁用流控, O5 ]9 l; c# h4 Q5 s5 v
UARTPinMuxSetup(1, 0);
7 C( d5 M1 u& ] j% t& l, _ 4 n+ _% ?& ]: ?7 `3 `
// 波特率 115200 数据位 8 停止位 1 无校验位; ?+ B* p; Z# T4 b+ ^" |. r6 f" b8 {
UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
- ?& Q& P1 N k7 s4 J i$ Q: U' q 5 {* k# Z( |8 o* N$ y. W8 t: M) F% Z
// 使能 UART1 j7 [9 O# J# M0 l! V& {% y" u
UARTEnable(SOC_UART_1_REGS);
7 m" j5 h) Z0 f+ E4 c // 使能接收 / 发送 FIFO
" D+ g* O @3 F) Z. D& c4 h v UARTFIFOEnable(SOC_UART_1_REGS);
% k( S: @5 h- O* @ // 设置 FIFO 级别* f3 x$ ^9 E9 g- ]* n+ w
UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);, B3 d' \7 W! [, Q) a
//Uart1中断使能
4 Q3 ]; e5 G, m# `( W3 v unsigned int intFlags = 0;
6 G( F: c( e/ U" f intFlags |= (UART_INT_LINE_STAT | \
4 x& ] I9 \/ t/ i UART_INT_TX_EMPTY | \
% b# Q Y; U8 K2 J6 P e' d UART_INT_RXDATA_CTI);
7 `3 p4 z6 @( s3 @% Z; ?
# ?0 @: [# o0 P3 U) c& w3 t UARTIntEnable(SOC_UART_1_REGS, intFlags);( \0 s8 k1 S1 C% U
}% | Z* L, J. \
//UART 中断服务函数3 |' C5 r& ]! l' ]- o5 @
void UARTIsr(UArg arg)
$ A: ?1 y( {: g( T2 y- Y1 u0 O{
. ?) ~3 E+ F8 G6 [% \ static unsigned int length = sizeof(Send);
7 A$ w: x$ E# n! t/ l h static unsigned int count = 0;! c- [$ V: ?9 |2 q' X: n- x
unsigned char rxData = 0;
1 a" s' O5 _) w0 Q1 R unsigned int int_id = 0;
# ]) ~! U Y& y/ T1 B: w5 t // 确定中断源5 t/ x. Y1 b6 h; m1 n; ~& }
int_id = UARTIntStatus(SOC_UART_1_REGS);, Z% k2 h3 O) X1 k! A* t) g
// 清除 UART1 系统中断
' ? M! c/ l: P: V/ z IntEventClear(SYS_INT_UART1_INT);
e" ?; d+ q! m/ V& E+ Y( R { // 发送中断
7 z# ^& f0 q( F4 T1 O: F. y- G if(UART_INTID_TX_EMPTY == int_id). ?- O) n: b- I( ^ V
{6 z2 D, G w$ ~ A* |
if(0 < length)- w* d8 a( g* \) m
{
: F! h% u8 r# _6 |. s. t1 u1 o4 ?' S // 写一个字节到 THR
( ~" c6 W! o9 N' _ UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
! h% F( u% k- S+ }8 l length--;
" L4 r% B$ `# j* I4 W count++;
# s0 P2 Q4 D! q }9 O) S( p6 x) n# ^1 U
if(0 == length)
. b6 ~9 C Q, E9 w* R {
* c* u6 N4 i/ S, P // 禁用发送中断0 u8 x7 [& T# e G0 Z# K
UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
$ r7 \8 Z. [$ k* N! M! a }9 l4 C. B: C$ Z3 l
}
3 K' Z$ g/ y2 y. Q // 接收中断7 @( L7 e; b- `$ `
if(UART_INTID_RX_DATA == int_id)6 @1 e- L/ ?4 @1 N4 I; c
{
8 L) e9 i5 s$ k+ o R+ _, c0 X rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
3 I( _) F' _5 z3 D$ L4 l3 D UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
* n1 t. h8 ]0 g }3 p! n4 @; A4 q
// 接收错误% ?0 N. O& H2 W9 R/ W
if(UART_INTID_RX_LINE_STAT == int_id)) p( {: D* @" i/ n; ^. [" O# d
{
1 B$ S5 G9 u! A5 f8 C while(UARTRxErrorGet(SOC_UART_1_REGS))
6 V& U$ F8 F7 M3 Z2 [ C {
0 a# F5 U3 L! M1 h9 o // 从 RBR 读一个字节4 a) l" J# o8 w3 [$ F& W1 m
UARTCharGetNonBlocking(SOC_UART_1_REGS);
/ K' D9 a" |, ?7 q }3 `6 A- G& F8 t
}& ^! {0 d) R( u7 u* ^
return;, v0 M: f, n6 @ H5 ^! R. w
}
$ ]* ^3 S% }1 K4 j1 s2 NInt main() Y0 B6 j6 P: @4 c! Q
{ ; j7 m8 g, z6 ]+ {
UARTconfig();//uart 配置9 S: j' h' H) p
Error_Block eb;; ]( _# f: R1 j: w& }7 w0 Y
System_printf("enter main()\n");
, ^- i* u( g: W+ ^7 R* j Error_init(&eb);
# o$ d- }* I0 i2 A f. b1 g // 动态创建硬件中断2 Z Z& v; Z" P7 n' G% V: x2 q
Hwi_Handle hwi1;
) U# T8 @% v E; r8 @4 \& \ Hwi_Params hwiParams;& L- M* d! `) J% S E- O$ Q
// 使用默认值初始化参数/ V- U5 E) f/ w5 G% S
Hwi_Params_init(&hwiParams);! f5 R6 h6 x, s- \! u! S
// 中断事件+ u4 L% r& Z. L6 R# z; O, _
hwiParams.eventId = SYS_INT_UART1_INT; _3 w/ [! @6 G# Z
// 传递到中断服务函数的参数
( ]9 j+ R$ e- t hwiParams.arg = 0;
4 S% C- B0 z( X3 E // 不允许该中断自身嵌套
# p( A) a0 Q/ D8 T4 G1 j) R; `9 e+ R hwiParams.maskSetting = Hwi_MaskingOption_SELF;/ g' | s1 e8 J
// 使能中断' T: M1 P* |1 S3 \8 m6 q
hwiParams.enableInt = true;
; m5 D1 S8 k6 _ Y- x9 f // 可屏蔽中断 46 H" X: D4 H# T, f5 u" f
// 中断服务函数 hwiMain" a1 p( i! m, w4 k0 Y: ?
hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);
+ D. x/ k* \3 w9 r" t' K if (hwi1 == NULL) o( b6 ~3 C; {1 V7 r0 A/ s+ q
System_abort("Hwi1 create failed");
0 j% T* A9 n' k& ?2 ] BIOS_start(); /* does not return */
5 _/ v& r5 j+ f( q! g7 d" h return(0);
! S+ s% O+ ~" n6 D}
5 M0 i2 f4 N2 p. H* G
. ~/ n3 \/ Y: Q |
|