|
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下
: E: l# b% p* M$ m3 d// 发送缓存7 F" B7 f0 s4 e$ e* ^: g
char Send[] = "UART1 test......\n\r";2 [# f9 j1 \4 c" i1 P. O [: p/ M( [9 e
6 F/ v1 a, ^+ h2 e m% W2 |# B8 z
extern void UARTconfig()
4 o* ]4 h+ W3 W# H( \{
& P3 x" H/ j. D, ]% @2 i //使能Uart15 _; S7 C, Z* ]* A3 F+ Y3 e2 A6 n o, {
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
- f1 Z; J( M" ^4 J6 p5 p
+ K) {7 m5 l+ J0 I$ u5 N7 j // 使能 UART1禁用流控
- T: @$ p- R. M* ~: Q7 a7 _ UARTPinMuxSetup(1, 0);( @/ F O" L; M( k
) A; L9 V2 V8 [3 g4 \! J* ~ // 波特率 115200 数据位 8 停止位 1 无校验位
! W3 `! w" o6 |+ g" t5 m UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
: f6 M6 g0 S8 b) O# i4 ~/ r
. V! x& s1 R9 K, Q // 使能 UART13 `& g% U5 Y1 V# h& L) T
UARTEnable(SOC_UART_1_REGS);
1 \; R7 e: ~3 f# L) Z // 使能接收 / 发送 FIFO
3 }9 Z2 {& O( ?0 j5 Z+ T* u UARTFIFOEnable(SOC_UART_1_REGS);# n$ e* E; Y( T
// 设置 FIFO 级别: A0 a0 y" w" P r0 U% }
UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);# i& e6 g' U& f$ {+ T; @$ P
//Uart1中断使能; w7 d8 a# T2 w5 b
unsigned int intFlags = 0;0 p* K3 G9 }6 y; P
intFlags |= (UART_INT_LINE_STAT | \
& J2 B9 |1 s/ w- ]: |1 ~ UART_INT_TX_EMPTY | \& a, x, s/ i& {1 L" s. e& B
UART_INT_RXDATA_CTI);
0 u+ e( _1 K1 C8 P5 `9 Q8 Z$ a
: l4 B: D, I& A7 |4 c* x+ h% o UARTIntEnable(SOC_UART_1_REGS, intFlags);, {- |) n) S7 u; t& q" A
} g) L# o% D3 [4 g) V4 h) q
//UART 中断服务函数4 C/ n2 W- x) m8 e1 V2 {- y; Y: Q7 s3 {
void UARTIsr(UArg arg)! V# c1 H6 U$ o; n, C
{
3 w* ?: L& n& }% t: |& t static unsigned int length = sizeof(Send);
' D4 B+ G' ~" V. n; R& A, q static unsigned int count = 0;8 s F% C' I2 O1 l% e+ r
unsigned char rxData = 0;
- ?$ g8 Z+ M4 t, @2 A3 v) d unsigned int int_id = 0;
/ U# Z3 Y& _- s: r. Z# f4 y // 确定中断源" v9 C4 R( }% y+ M' h T" y. C
int_id = UARTIntStatus(SOC_UART_1_REGS);
8 [: ] K' g% Y) k9 R* K, F6 N& A3 e // 清除 UART1 系统中断# |" |0 l% d" X$ W' l
IntEventClear(SYS_INT_UART1_INT);
: K' s% {0 }+ E. G: z$ L N // 发送中断
7 H! t f, q. o+ |- g if(UART_INTID_TX_EMPTY == int_id)
$ t) y T( D$ `/ c$ \) c2 G+ B {8 V- X) s/ S8 p5 [; A
if(0 < length)( p% }- A8 H1 [. F, \: E
{3 b, c& k$ B$ t
// 写一个字节到 THR
1 q5 I" B4 F i1 i! o! S UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);- X) E. S2 x5 A
length--;
% f# A C3 C Z1 A# `2 U; Q* f. o count++;
: p7 K5 N" {9 j* ] }8 W$ b( L4 J5 y/ q5 @, B* S
if(0 == length)
5 A7 \( k }8 P' n, H' e {
8 d/ b( E7 w: S. z/ X3 @ // 禁用发送中断
. S+ w8 [5 t$ ?% g3 M UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
% ^7 M( B. a! M9 F0 q }) V0 X$ T H, i0 S/ ?8 m" I
}
8 t. M8 u P8 b5 T8 g5 U: f // 接收中断2 K5 S4 X7 d4 B3 x! m+ Q
if(UART_INTID_RX_DATA == int_id)6 u( H8 j) ?* s% E; h8 v
{4 S3 ]4 K7 M9 ^: c k
rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);. M& T# \ f9 T, i6 N
UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);' I& r$ I9 M' L& ~2 {
}
1 f5 ?! u' t* f$ K, |) o // 接收错误
' N, x% S5 _3 ]8 p! F! {5 V if(UART_INTID_RX_LINE_STAT == int_id)- A1 M6 {2 p' H3 c9 j" ~
{0 @' h& e# F' T: C& a' }. [; K+ e
while(UARTRxErrorGet(SOC_UART_1_REGS))
9 Y5 B' D* N5 B! N% Y {
( M |4 G y% ] // 从 RBR 读一个字节
2 o! _+ r' L5 {& ^; ] UARTCharGetNonBlocking(SOC_UART_1_REGS);
' f) ?! w2 C+ w1 E' L }3 u" ^* Z' o/ Y9 e* A
}
7 a4 S2 x7 p. Q return;
+ N8 H% w& K4 R" y}
I) v- j+ r" _ L1 Z0 B. j" A8 _Int main()
6 L m. M2 H# H/ `3 k{ . A0 k5 q3 g# X7 [
UARTconfig();//uart 配置
( S# k4 @2 u* o) x* z& H5 f! b Error_Block eb;
3 w5 N3 d+ v) a& g# N System_printf("enter main()\n");# j% c% K9 P9 z- G8 s
Error_init(&eb);
' L- ~9 m/ s, g7 h# t( K // 动态创建硬件中断. a7 g5 u! j" x
Hwi_Handle hwi1;0 V8 W" N4 Y, ?: a, T
Hwi_Params hwiParams;8 e& Q) @: o$ V) R$ s5 P% Z2 }
// 使用默认值初始化参数, g; D1 c9 ? s/ l& ?/ t0 t$ Z0 }
Hwi_Params_init(&hwiParams); I: X- x& u7 p
// 中断事件) j, C* q2 g" ~( u: b
hwiParams.eventId = SYS_INT_UART1_INT;% _1 }0 q! n; I7 @, Y* v: d
// 传递到中断服务函数的参数: \: W+ j3 X6 _* Y y
hwiParams.arg = 0;
+ |( o5 A. B% V: H% j1 Q* c7 ` // 不允许该中断自身嵌套# G& M \4 c5 U, @
hwiParams.maskSetting = Hwi_MaskingOption_SELF;
1 L0 G% ^; q: P5 K2 j // 使能中断- c$ o6 v7 [3 v3 f: k- p+ E( {
hwiParams.enableInt = true;3 B' f; F1 o8 ]: Z& j
// 可屏蔽中断 4
7 B' g1 a" V5 ?5 V( z0 y // 中断服务函数 hwiMain
. u( R6 `5 l7 p+ }1 N( U hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);
# g5 ~% D- B/ o1 O) u2 B if (hwi1 == NULL)
/ l6 n6 D0 Y$ b5 K. c5 l- H8 K System_abort("Hwi1 create failed");" f* k& x$ m2 V5 n7 Q, I
BIOS_start(); /* does not return */1 n; M/ Y/ _3 k, Q2 z1 H5 }1 N
return(0);
$ B1 s" R0 U8 s& Q/ D4 f* C/ l}/ W$ M8 F4 a) Y6 E6 a$ X
. v5 ^7 p* B, w+ M
|
|