|
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下5 [ T2 h G3 D9 A( I% T
// 发送缓存
" H. L9 w! _4 ^5 Jchar Send[] = "UART1 test......\n\r";
- l. ]. S. f) h+ I6 e) ^, `: d D7 u: K8 ?& E2 I
extern void UARTconfig(). r! K" Z+ P, }5 L
{
& U1 H) F4 S1 b //使能Uart1
; p x- `9 i7 n/ @. v# G) ]0 M PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
% A0 e2 i, q `! D* g6 j
- ?/ G7 Q; N: [' S/ Y8 z // 使能 UART1禁用流控
$ K; r" @7 O9 n* o* c n UARTPinMuxSetup(1, 0);
5 \3 `0 m3 N% m2 T$ g: a/ q6 l
& n2 T+ o3 P" }7 P3 ] // 波特率 115200 数据位 8 停止位 1 无校验位, j! Q1 b) v1 U% Z ]1 y
UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
) Z: V6 B( x* _/ |- g 8 b& l( ?7 J2 Y3 u7 a
// 使能 UART1) F0 q0 \! ]: L9 \: g1 G$ Y
UARTEnable(SOC_UART_1_REGS);0 ]7 U5 w) E' O% x8 ?6 E
// 使能接收 / 发送 FIFO& ?' x, Q) H( r! I
UARTFIFOEnable(SOC_UART_1_REGS);2 ^/ ?$ x$ f/ l) v+ @- w4 a7 p4 j5 q7 K
// 设置 FIFO 级别
4 @4 s2 \' X( B0 R) v8 Y G+ M6 a UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);6 A& y. h8 @# p7 F) q* K. u. X6 v
//Uart1中断使能
; H8 V' Z6 B2 F3 H+ ^" l unsigned int intFlags = 0;7 @; f& Z3 z$ M. p( ~3 ~% W. s# `6 G
intFlags |= (UART_INT_LINE_STAT | \
* Q, V1 @( n) G! {; s UART_INT_TX_EMPTY | \
" w6 v- M9 \ Q# b# w* @ UART_INT_RXDATA_CTI);6 c, e8 g: w8 |3 b; {
% q) u$ }" ?: Q n+ o0 O UARTIntEnable(SOC_UART_1_REGS, intFlags);& t% i, u8 g' g5 i5 V: L, r
}
2 r: d) Y- P/ h; _ D7 `, ^' N1 [& o//UART 中断服务函数
& ]5 X/ P% h2 f/ Vvoid UARTIsr(UArg arg)
( _( A6 f) P7 D0 T0 ~' v{
9 J" p j( L0 \; f# q1 e static unsigned int length = sizeof(Send);8 O& B' F4 c; }9 S+ \7 h: w' a( J
static unsigned int count = 0;
6 ?6 Z# N# c! B) w3 h4 J& h" W% y; _ unsigned char rxData = 0;
* o6 Q! y' n/ X t unsigned int int_id = 0;
9 c, A) J- j% l7 G) N$ [ // 确定中断源3 v, w# ^3 L4 m. J
int_id = UARTIntStatus(SOC_UART_1_REGS);
5 ]8 a L; F1 F& F! p // 清除 UART1 系统中断
+ _& ?2 K" F- p0 X9 Q IntEventClear(SYS_INT_UART1_INT);5 E( z4 d) G+ `: l
// 发送中断
/ E8 y4 m* v9 N+ d# } Y if(UART_INTID_TX_EMPTY == int_id), q1 N* z. o, p$ s* r' C
{
5 ?5 f* b3 Q x: G if(0 < length): Z. m1 p$ y$ \3 W8 P4 g& _
{
1 H6 n" g5 |% R; v, X4 I7 s // 写一个字节到 THR
6 l7 f7 }- I& }, q. H UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
# w) L5 D* S- @, f length--;
, W+ Y& }5 Z* o count++;
! q% ~" v: h* c+ L* ~; Y }- M C% h1 @" x3 S1 i; C
if(0 == length)
$ b; f6 R. R/ _6 { {
( F' l& _" n; W8 N2 N- j7 j' g // 禁用发送中断5 h* H# A, D& H8 A2 ^
UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);9 ?: m8 _# a' B) b+ A* W
}* y6 [+ y# j0 ^) `
}3 l2 e* ~0 f' H1 x Q
// 接收中断 o! r$ v: a' V- l
if(UART_INTID_RX_DATA == int_id)$ j# v1 y/ I5 ], j7 O Q
{
, V. W% H$ D( }+ ` rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);9 e9 Y0 F" f' U/ W9 C
UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
* ?% {4 N# a# L5 h6 I0 W9 c: k }
/ t, e6 b5 u) e; T: d // 接收错误* \2 _$ B1 t T* B' K4 o* x0 Z/ A
if(UART_INTID_RX_LINE_STAT == int_id)' c/ \5 Y0 k, t
{
# R2 M, ?) s) G2 @# _ while(UARTRxErrorGet(SOC_UART_1_REGS))
* U+ S+ Z! n" Y8 |! B8 E {5 Y3 w2 N( M0 P5 v' y
// 从 RBR 读一个字节 q4 k- p. M$ J0 ?/ G
UARTCharGetNonBlocking(SOC_UART_1_REGS);
8 P- c% O' K9 k8 m- x9 {% y# u }
4 a5 c3 S) J# [. e: {5 v }
. Z, n7 C* M" ~9 E- U5 X return;9 A3 O4 o" ?" x! o5 e. t
}4 O n; r, p/ E4 c# W
Int main()
- `+ l( A& T! f' t8 d% y, d4 o{
% I/ x: I7 ?* G! {' |3 A UARTconfig();//uart 配置
8 T9 n, V4 m9 y1 f# _/ |! `# A! I Error_Block eb;% V0 X7 i: F; j A" w4 m" u
System_printf("enter main()\n");" A6 \- h, X$ `. }
Error_init(&eb);& l5 p0 V6 ` [- |7 h: p! V! M
// 动态创建硬件中断6 U! R3 w5 U9 t* c7 n
Hwi_Handle hwi1;# W, B2 z9 G: y7 \- q4 \9 E4 O
Hwi_Params hwiParams;
6 X, x4 X/ T9 d2 B. c+ M // 使用默认值初始化参数
0 p8 o! [ w/ n Hwi_Params_init(&hwiParams);
* ? {$ i( R* k6 G2 n // 中断事件
8 Z+ n' [8 ~) i: @" }) O- L hwiParams.eventId = SYS_INT_UART1_INT;: R8 I, N8 f( O* m5 [/ y0 h1 |* m
// 传递到中断服务函数的参数1 Y8 _8 L- x- z8 l" [
hwiParams.arg = 0;
( B( B3 o1 ~0 ]: j! @+ O% N1 S7 q# f7 o // 不允许该中断自身嵌套9 s" V1 r* M, Q7 s) o8 F
hwiParams.maskSetting = Hwi_MaskingOption_SELF;
7 M" \2 X3 B* T* g% q // 使能中断
6 |( v: G% s, p1 c, S7 w; Z- N hwiParams.enableInt = true;
2 U# L) @' b7 Z, z7 P // 可屏蔽中断 4
q; M. l$ R! i5 c: f // 中断服务函数 hwiMain0 A. G: W4 N5 P5 d: z' P8 I
hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);
1 k9 S& ?* _. ~1 z# S, ~ if (hwi1 == NULL)& R; P; @; `' E9 V
System_abort("Hwi1 create failed");4 {* ?( ^& h7 V* _" ^
BIOS_start(); /* does not return */
/ H2 ]! v. Z% }4 m0 ~; h7 F return(0);
, ]% U. r% I# i( x}
4 x1 w9 t5 S/ P3 J/ v$ S' S
6 u% ^& e% e0 V( g8 K% X |
|