|
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下
" u) f$ S4 d- i" x. K2 |' r// 发送缓存
5 G$ a M$ x+ c4 M6 e" T0 hchar Send[] = "UART1 test......\n\r";
, }4 ]0 _) Y: G3 p; r1 T
. Z2 y7 U; s; ?8 J9 \extern void UARTconfig()
# P: u! n$ f, }+ q{( ?9 z. L+ [. p. |
//使能Uart1
& g/ k/ X1 S7 a# {- i PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
& i4 H3 y' w% z: h# { * N9 L, P; R2 [6 S3 i2 T! K
// 使能 UART1禁用流控9 I( U$ W$ a! n0 w" [( t
UARTPinMuxSetup(1, 0);
9 U7 G8 \: Z+ y; y* X7 E- ?4 h- S; n
0 Q: i o6 `9 ^( q7 h% d$ r$ h // 波特率 115200 数据位 8 停止位 1 无校验位: }4 f0 H8 d9 V) ^
UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
/ r2 O" P( x: U* }
: M* \' R% y+ o9 Y. f/ h // 使能 UART1
1 p# x5 Y7 R% b) P, D- d: J r UARTEnable(SOC_UART_1_REGS);" p3 `: L. n' M1 V1 P7 P1 m
// 使能接收 / 发送 FIFO$ M# v4 g( k3 Q/ X M. `
UARTFIFOEnable(SOC_UART_1_REGS);
. L( x/ n; S+ \ J2 D // 设置 FIFO 级别, ~4 n3 B/ h; R* q
UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);0 h1 |! Q( k7 p3 [2 f
//Uart1中断使能4 o3 |- j$ |% H
unsigned int intFlags = 0;6 |6 e' p8 o3 a) a
intFlags |= (UART_INT_LINE_STAT | \
9 o v: p, x/ U$ M UART_INT_TX_EMPTY | \8 q+ _, V# u7 P' f' t. N* S, b
UART_INT_RXDATA_CTI);
2 V% y6 F$ {, {# u2 Z9 M 7 Z9 u$ Q; L" p6 ?5 r9 M2 Z' {' o
UARTIntEnable(SOC_UART_1_REGS, intFlags);' K+ Y. R. r4 e& Z+ P4 Y" G
}4 C _' @5 z' B
//UART 中断服务函数
; d3 M) [8 a. m% Tvoid UARTIsr(UArg arg)& u- q5 f+ B1 X) e' O$ l
{+ D3 }3 ~2 d" e. Z$ k- e
static unsigned int length = sizeof(Send);
i# U9 K/ s2 s/ b/ E q static unsigned int count = 0;& v* S. c( t' I% l& V$ W
unsigned char rxData = 0;
4 ~# l5 {( ^6 | unsigned int int_id = 0;' W" T0 n4 B, z/ U& v: ~) _
// 确定中断源- ^ v) S& ]9 K# |' J7 ^5 O* V$ Y
int_id = UARTIntStatus(SOC_UART_1_REGS);
# b( q a% b6 ]/ W- M; ^' `9 b // 清除 UART1 系统中断" S' T+ f y& `; p
IntEventClear(SYS_INT_UART1_INT);# {( G* M( c7 V7 h1 w+ r, D" r
// 发送中断
- @4 `! ^5 r; \* e# \ if(UART_INTID_TX_EMPTY == int_id)# z- g' W, p& r, v* P2 R/ x) y
{
$ B8 n- C/ i5 _ if(0 < length): ~/ Z( N6 |# e8 H0 I# U+ U+ x
{! W8 n' C' `9 s' G
// 写一个字节到 THR# ?1 m! i- b3 R4 g7 q: R" g
UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);1 V8 j2 Q: X/ w$ a5 X; q; q$ X
length--;
7 h; m% S7 M. y* j p- Y, j0 k count++;5 A5 l9 ?& w4 A' J3 m) d: d* h
}
* L$ T. K0 E/ H) `, U2 N if(0 == length)" I [; v9 j# S3 W+ G3 X
{2 L. T1 G3 ]' O! r0 h# f7 j
// 禁用发送中断
; w5 q. O6 i3 |0 E* m; ?+ k9 i UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
% Q4 W3 C# H7 D/ ]; @ }
9 d2 h5 x/ Y- O! v }
( P8 U- p5 w) ]! z' |6 `6 a // 接收中断0 q8 N5 o: Z* Z/ A6 F/ |5 f
if(UART_INTID_RX_DATA == int_id)
7 T* ?; i! \1 G0 R: k" ^2 n$ _ {$ K5 M J* p& {
rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
/ R2 U/ x H3 {( v( b9 x. i& c UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);$ U$ h: i; N$ E
}/ i, [0 d: G" e7 q" z5 O1 d& i
// 接收错误
5 q9 e% ^- M2 w& [, g& x* j if(UART_INTID_RX_LINE_STAT == int_id)
" T! D6 h, |$ t/ Z8 o" r( Z8 n4 e {
' j, t7 X1 e/ Z9 N0 p: Z3 L8 \ while(UARTRxErrorGet(SOC_UART_1_REGS))
`8 E+ M5 {* ?9 w+ g- { {
; J4 }: F- m3 z5 E- q2 X // 从 RBR 读一个字节0 ^6 l5 b9 S" u; a" a# F/ m
UARTCharGetNonBlocking(SOC_UART_1_REGS);
0 J; ]- _; g6 |. K }1 n& F+ g5 W- [" u1 |, T
}
# v8 M$ H) r; k% X9 B return;( ~% E/ L4 R+ a
}
@% [. l; z" q; FInt main()
0 |; k1 [9 ?1 ~6 D{
0 G% D2 d; w. U3 ?& v UARTconfig();//uart 配置
c. X# M+ R" l/ }' R' d; W Error_Block eb;
+ u) y$ ~0 w$ N- r/ v System_printf("enter main()\n");% H. |/ o4 l. Y9 ~! F
Error_init(&eb);
3 c7 P- g. ?" j, \ // 动态创建硬件中断- N' Q1 w" G, @5 L7 g$ y( V
Hwi_Handle hwi1;
8 J0 u2 S0 _7 K Hwi_Params hwiParams;
, P, }. d$ b# ]1 ]: u& V // 使用默认值初始化参数( [$ f$ I+ @; I/ B. E z
Hwi_Params_init(&hwiParams);, x5 q" w# n! i' @ N
// 中断事件0 M" Q( Y) p- O$ w9 z; m7 G
hwiParams.eventId = SYS_INT_UART1_INT;, W3 `0 m- q3 c: H4 ^0 M
// 传递到中断服务函数的参数2 }2 `, z' T$ Z* {7 L( S) Y
hwiParams.arg = 0;
4 i# q Y/ o; @% O- Y: | // 不允许该中断自身嵌套; m3 x$ K' g w; M' z
hwiParams.maskSetting = Hwi_MaskingOption_SELF;6 {, {2 O6 P$ _7 n3 O* Q$ c
// 使能中断8 T; M: N* u3 `. r. x
hwiParams.enableInt = true;2 _5 B$ @$ i& L- O$ u) B- r& `
// 可屏蔽中断 4
" v* }: P9 K7 p5 l$ s // 中断服务函数 hwiMain9 f. |( v" U# {
hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);
_& y: x" s' r' ~# e if (hwi1 == NULL), G @' e, y e! Z% |
System_abort("Hwi1 create failed");
$ `. E% s; s' p$ j) U: {/ t' T+ b BIOS_start(); /* does not return */; c' G1 g* h! I4 \" e5 ?$ C
return(0);
0 g8 A N0 m. I) q( }}- l6 ^& h/ H0 \4 N: l
0 X% X: ^6 ]$ {# ?' c( D# `2 Q+ A |
|