|
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下
5 A# j% S! T# C/ @4 g// 发送缓存& `" E4 V5 U( h R# b9 [# G
char Send[] = "UART1 test......\n\r";4 f) b- H! z! h6 w; L* u3 l: k
& t. k' U9 k! K+ ?0 X, xextern void UARTconfig(); H8 {: s) I! j' Q4 v" n2 l/ c
{2 V& i! e0 X9 x% O; Q+ f/ m
//使能Uart1
K, S& L P, i8 E- w( r PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
; { y% v3 y- G- R 4 z% ^0 d. U6 J
// 使能 UART1禁用流控0 P4 a5 ?7 Y3 [7 C1 S7 [. h- `
UARTPinMuxSetup(1, 0);& m9 ^; s1 L- M9 _' j* J4 y3 B7 A
" E9 r: B& G8 e // 波特率 115200 数据位 8 停止位 1 无校验位- M% i. f, I% j; P$ R" p
UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);, B* G3 P/ Z1 T- D& _
2 `: m( m; e% c7 x) J; b
// 使能 UART1
( T& a- W" o4 I% v UARTEnable(SOC_UART_1_REGS);
|% C: y8 V! D0 V" B // 使能接收 / 发送 FIFO
$ I7 E) _, g9 u x( k0 W UARTFIFOEnable(SOC_UART_1_REGS);; F7 S! {# n; k* e. b
// 设置 FIFO 级别
, v* o) C8 O) P3 t9 n n4 n" i UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);: y O% W) k6 _# M5 ?
//Uart1中断使能
9 U2 R0 {9 q2 G+ u# w) m7 o" t! L. H7 c unsigned int intFlags = 0;
" Q { v5 B# q" h intFlags |= (UART_INT_LINE_STAT | \3 e9 E5 X# f6 f
UART_INT_TX_EMPTY | \
- K2 z9 |$ {( R UART_INT_RXDATA_CTI);$ o, U" ]0 r6 S( e) k7 ^
: _0 f* a/ U5 s, A4 b3 L& h UARTIntEnable(SOC_UART_1_REGS, intFlags);
! E! g5 s+ D, F; z}8 b) r+ o) }. U* R1 T3 K
//UART 中断服务函数- J6 J. U9 q6 S6 ]$ y
void UARTIsr(UArg arg)
% G* q- y) M7 t3 z" q5 f{
$ [& H( m) H+ Q% q static unsigned int length = sizeof(Send);: c( m# a" S* c5 s. I$ t! d, W
static unsigned int count = 0;3 B' a; ^2 C! S ]- @: W
unsigned char rxData = 0;
. {9 [) f3 ?$ q& [ B& a* D3 w. ? T unsigned int int_id = 0;7 }2 T. A2 S5 j% m! O/ P: W; U
// 确定中断源7 k% v2 E/ h! [& s3 O0 r
int_id = UARTIntStatus(SOC_UART_1_REGS);% n" }4 o2 m4 o4 R4 M0 x
// 清除 UART1 系统中断
- X$ v) z! a. S3 \( _" O IntEventClear(SYS_INT_UART1_INT);. X5 X$ D/ ]$ C* i( p8 q0 t7 w/ V
// 发送中断3 S3 D6 a# b9 a6 |
if(UART_INTID_TX_EMPTY == int_id)8 W* C# l, S+ e5 ?( ]
{
" q3 M. h* [' q. O; [% r if(0 < length)+ b5 ?$ ?, T$ c2 Z, j6 I0 ] v" s1 [& ~
{8 P6 `2 }, S' C+ w' v6 R
// 写一个字节到 THR& e2 B+ [2 S/ B9 h+ D
UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
4 H( G/ k* W/ c2 _2 g8 \ length--;
; f. [+ B6 W" N! H g count++;
# w, U& N5 g$ |6 o0 A8 ]: W L) c }
$ o3 }8 b! o/ u8 n2 K if(0 == length)
3 f4 H7 J: o6 ?% P) S% `& q. r; ~ {+ x/ c% X4 K: H$ R* o; q8 @- J
// 禁用发送中断% s2 J) v- }$ C
UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
* V- @+ N. y4 J8 U7 t }
% q& t# S3 W, O3 e; x9 R' W1 ~ K }3 L" t K0 V6 a. E) n* N/ K( y
// 接收中断- O: M$ I, o& I: J- K! z) K
if(UART_INTID_RX_DATA == int_id)
% E3 U% m1 b# }& D1 O {
/ F1 C; H* d* e8 _ rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);! I. u! {2 C2 g B1 {
UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
, ]+ R4 D! H1 p) ^1 Z8 h: ? }; d! U: H8 g; h% i9 ?' s
// 接收错误' ^1 T( B( f n |% [9 S- ?. i
if(UART_INTID_RX_LINE_STAT == int_id)
7 Z( r" y' L5 o$ s3 x, v# S$ C {
8 L I" N( Q# i, @8 H8 r9 R while(UARTRxErrorGet(SOC_UART_1_REGS))
, C" S t! L: P+ J1 V, J# I! `, x* ^ {, ]; p% ~! x- ?. | B5 x& @
// 从 RBR 读一个字节' H" ^3 F& a4 @% m, p: g$ G
UARTCharGetNonBlocking(SOC_UART_1_REGS);3 e" T5 ^' {0 S7 Q' g
}
0 S& n: h# c1 Q0 K u6 a }: Q, M9 B5 L; E w. I
return;
J$ }9 D. W+ [+ m9 S. b}2 I# `6 a6 |, r6 C: h( f3 a2 t
Int main()
! N5 a( L$ n4 M, }5 `: D) [. W _{
4 d; Y& B2 B, g; l) | ^' N UARTconfig();//uart 配置
7 z, ^/ J4 o2 S7 m/ O Error_Block eb;
$ c" G; d& }& l System_printf("enter main()\n");
( ^3 V1 ]5 _% F' q% D* Q Error_init(&eb);
, U# Z9 L z. C // 动态创建硬件中断: g( J% S8 Y1 l+ W9 b
Hwi_Handle hwi1;
# G; m0 w! l' K [. X4 E- E) _ Hwi_Params hwiParams;* c5 P, M( I1 @4 w0 n; D8 R; P
// 使用默认值初始化参数6 b+ [" }/ K" _5 j c5 q$ H
Hwi_Params_init(&hwiParams);& i$ [; Q8 M+ j8 k) g
// 中断事件& p8 c; k; ]/ T/ D- o8 j
hwiParams.eventId = SYS_INT_UART1_INT;
6 `8 W! x \& l) V+ q // 传递到中断服务函数的参数. L% ?/ y: k. d. q; T+ N- \
hwiParams.arg = 0;- ~, w, z6 {7 o6 M& s2 m8 y% s) A0 Q
// 不允许该中断自身嵌套
& W! p7 r/ o# M5 |& J- d hwiParams.maskSetting = Hwi_MaskingOption_SELF;
- [# \3 F) L' u/ I, ~! F- o [ // 使能中断3 H, O2 f& Z8 V
hwiParams.enableInt = true;
6 t# q4 e" h3 m% E' s$ ~ // 可屏蔽中断 4: o! O, S) V R9 `
// 中断服务函数 hwiMain
! z$ F2 A& n- R* g! k hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);1 ]1 R7 y2 O9 y: m- I
if (hwi1 == NULL)
& o+ D+ d) h) J! ~# J8 {. R: B System_abort("Hwi1 create failed");( s" b8 x% h; ~2 ?$ Z( k' t
BIOS_start(); /* does not return */
; A2 r* d4 y7 ]: ~. L$ ^: K4 ?! O/ N; \ return(0);$ x1 {) J7 G, ^" j. H9 f6 N, T0 q& V8 k
}
$ V% f# f- W* b: k& g# J& }' \; D1 d
|
|