|
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下* ?4 [: f$ p+ z7 J9 K, r% c
// 发送缓存
1 Y9 Y( C# g/ T( y% z! d3 a$ ochar Send[] = "UART1 test......\n\r";7 u5 ?6 |$ i' q% B* l& U
- y6 o. d5 Z# [: X" q1 Vextern void UARTconfig()' e% i$ a6 d C; f& r
{
! b) {" w2 p! ?/ |5 @8 A //使能Uart1
0 d0 j4 N( Y! l& F; N PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);4 V4 ^3 Q* D5 u, Q; R7 @; F
2 y( R* a0 w2 \ // 使能 UART1禁用流控% b( p- N( x7 ~0 z7 A G; ` K i
UARTPinMuxSetup(1, 0);
7 W- T0 L" ~) \8 u3 x
1 J/ N9 o( ~9 i& K9 ^9 M // 波特率 115200 数据位 8 停止位 1 无校验位5 O$ g, ^: ^: g, x9 Z2 ~, K
UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
B! C$ T' y8 U5 C/ p3 ]& J, L3 n
g% ^6 C2 X) m# F0 H // 使能 UART19 ~) i! J# Y5 Y3 j3 d) a) w
UARTEnable(SOC_UART_1_REGS);
4 _5 d) S( i9 V, g' g. y // 使能接收 / 发送 FIFO
1 C/ m$ Q' N' p3 i UARTFIFOEnable(SOC_UART_1_REGS);
7 i. ?. w- q- J% o( d/ i // 设置 FIFO 级别- N9 I, v9 R. K5 v) Q
UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);
, t u6 a2 T9 w, ?/ L //Uart1中断使能
: [+ n$ a0 W& T/ s0 Q unsigned int intFlags = 0;
% H N; d# x t intFlags |= (UART_INT_LINE_STAT | \
' f4 w1 v$ P4 l+ f" N- J( P! h UART_INT_TX_EMPTY | \
) s N6 Y9 }+ @ UART_INT_RXDATA_CTI);& M- f2 ~. j! @$ P7 h% Q
" d2 ^0 |4 n9 v& ]) [ UARTIntEnable(SOC_UART_1_REGS, intFlags);
1 x N! ~! M& s. W}
6 ?2 n$ Z/ E" d% a: @7 ]//UART 中断服务函数
) t8 g1 ?9 @. E' S. dvoid UARTIsr(UArg arg)
. F. |$ F$ V! z{) R7 P/ l/ T8 C5 d o, |
static unsigned int length = sizeof(Send);
) S2 I4 V2 Q5 u static unsigned int count = 0;0 ]+ H4 H5 X. T5 I% g- M5 J3 i
unsigned char rxData = 0;. b7 K V x1 j; e$ m) S
unsigned int int_id = 0;) L% R7 @9 ~ S
// 确定中断源" M2 [ ]$ E( ^0 ^
int_id = UARTIntStatus(SOC_UART_1_REGS);; n& S7 b" i9 h: G( K* Y% q
// 清除 UART1 系统中断
; n( s: Y* M2 L* u/ z IntEventClear(SYS_INT_UART1_INT);
9 c9 R0 w5 Q; ~ // 发送中断
6 s: t% O& [4 ^" g ^! X* `) ~ B if(UART_INTID_TX_EMPTY == int_id)
4 w) ?- g, f( ]( B# ?2 d$ S( ?, U! t {1 y% q7 g6 F! d, b9 g- b0 g+ \
if(0 < length)8 t, J0 L% Q0 r8 s5 p
{( w) D9 u1 H O2 V
// 写一个字节到 THR
, Z! J9 n- a9 ^( H4 ^/ H: M UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
- E# M; O4 m3 K( l, v- ? length--;
- F! [- x$ `( u" e' O count++;; l" n8 Y0 e8 F
}( d) o; |/ q, {5 n
if(0 == length), _* |" Y' r+ X: s, s( V, @) y
{* K( O" i. F2 F/ P) B7 d
// 禁用发送中断
. A* v7 M- g) O% c/ X3 Y UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
& q& K) E B+ x& @: g7 L }, l5 Y8 n2 @+ S- f
}
7 _! }, g" q6 l. P! | // 接收中断. H) A6 b1 x ~. D0 z
if(UART_INTID_RX_DATA == int_id)
& g: U& c# F# \- Z/ K {
* [5 `% D$ |' \5 L" w rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
% ` w. O& M. k UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);1 W. k/ M: f. M+ F3 v6 u
}
# S0 ~; w& U' }8 \ // 接收错误) ]; g, G4 G/ u5 r
if(UART_INTID_RX_LINE_STAT == int_id)
3 M" \' ]! v9 O: k: {& d {* M5 O, c1 v: N M# g7 b
while(UARTRxErrorGet(SOC_UART_1_REGS))* n! S0 y, ^/ [% S* Y) l
{2 c7 I+ G- v' z* X( R, O
// 从 RBR 读一个字节
6 x4 R2 m7 a! M: p; W! v UARTCharGetNonBlocking(SOC_UART_1_REGS);3 g; o1 F4 }+ f
}
3 Z. r% c0 s2 T: s, V }- }8 L$ _, S! t4 b! S) u6 t+ w# ?+ l
return;1 q% O6 ]4 S# M5 f9 E. k+ \ h& v+ V
}
- y- i, \9 b. f5 lInt main()
2 M% f) j3 w8 r/ i8 E{
2 i4 b. S3 V Y5 v UARTconfig();//uart 配置
3 R3 s+ y5 E! D3 K# Q Error_Block eb;+ i0 P( L- P/ w* u- v
System_printf("enter main()\n");
& Q! p0 s7 t# e0 a$ ]/ Y; i+ e* ^ Error_init(&eb);
& \" ^% T) \( R* w# h. h // 动态创建硬件中断
' m6 F' G$ [- Z0 ?* f0 T Hwi_Handle hwi1;5 [& k1 k2 }. o3 } F1 w8 N4 M7 M
Hwi_Params hwiParams;8 Q( y) q+ C& E
// 使用默认值初始化参数
, a* o! d, p- o+ `, y" o+ A Hwi_Params_init(&hwiParams);
' r0 k8 J. F' X0 S+ ~+ ]) e // 中断事件 H: \- M: j" W, _& r- H1 j
hwiParams.eventId = SYS_INT_UART1_INT;" Y: l( d0 [8 n$ O
// 传递到中断服务函数的参数+ ~7 e0 X7 ^( H1 V. W4 w
hwiParams.arg = 0;
0 A# L0 P! ]. A) l: _) y // 不允许该中断自身嵌套* t$ N. y% v% c
hwiParams.maskSetting = Hwi_MaskingOption_SELF;
. d: M( Y/ a" ] // 使能中断
' N0 d- ~# q$ c hwiParams.enableInt = true;, k4 H9 \- u# K, l/ k2 s
// 可屏蔽中断 4
' w1 V8 p* v5 |4 T3 ~ // 中断服务函数 hwiMain
d5 [. |8 D( S hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);
' p( \" g1 i, [& i; T0 [ B if (hwi1 == NULL): j8 c6 f! W# S( y2 F
System_abort("Hwi1 create failed");% Z4 M1 C6 N( d8 Y* F R
BIOS_start(); /* does not return */2 k0 V6 s2 e" C1 T! Z2 q
return(0);
; S A8 c7 O" y2 J9 F}
- P0 M( ^+ Y; L2 ^- ~3 N$ W) t2 Z2 @' p0 T8 N+ O
|
|