|
|
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下& `' t+ J+ \5 H. a6 ]
// 发送缓存/ n! b" L0 Q m/ `
char Send[] = "UART1 test......\n\r";
) A' d' R% W& w; i5 {- j
+ [2 q0 n# f& A/ zextern void UARTconfig()0 w8 v9 b1 T/ n" `7 a
{: F8 R( c+ a9 Y! f X4 A7 B
//使能Uart1
5 w' n3 g" ?; m PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);$ Q" w) M( |, c7 q
; v P4 h9 ~1 \- \: l0 A9 P9 ` // 使能 UART1禁用流控/ K0 ]" @- `% r; R0 O2 L: F
UARTPinMuxSetup(1, 0);
) c4 C `, g4 Q* W8 x
j% ?7 P( _* k; N" q // 波特率 115200 数据位 8 停止位 1 无校验位! O$ `5 C) L$ s1 j, w$ L
UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);, u0 H: }2 I3 V6 i4 j4 v0 Z ]
7 e7 C8 ?3 J- P- l // 使能 UART10 [& t* C, Z1 b! p; [8 V
UARTEnable(SOC_UART_1_REGS);) W H6 E4 U9 b$ U
// 使能接收 / 发送 FIFO
6 U8 ?( `8 o- i UARTFIFOEnable(SOC_UART_1_REGS);$ h# O) r2 E) z$ D, [
// 设置 FIFO 级别
5 I2 ^2 [8 {) T! B UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);9 d$ ?( d) b* x6 l3 c: b
//Uart1中断使能
Q3 w+ C; t) R# x unsigned int intFlags = 0;- i% k1 o6 Y6 b
intFlags |= (UART_INT_LINE_STAT | \
0 C( {/ X& f" \& h0 Q# |; s! Z UART_INT_TX_EMPTY | \) M2 ]9 v% Q- p6 d! C1 i
UART_INT_RXDATA_CTI);) k& i' m: }8 C3 _' z1 Z
% N( d+ u K; @. P! H8 G6 U
UARTIntEnable(SOC_UART_1_REGS, intFlags);
2 i E. c9 W" o}8 J g Y+ e$ p
//UART 中断服务函数! Z* H! e9 t6 N, Q% u
void UARTIsr(UArg arg)1 D, V6 i! q; b5 t4 }
{, h. Q* H4 \' T- K" f: a. k
static unsigned int length = sizeof(Send);
$ V4 Z' F. w8 w* D' a( O* j static unsigned int count = 0;9 q9 q l: o/ h0 F7 G' \: g
unsigned char rxData = 0;
& Y _! o5 z( r N6 Q0 }8 @' Y unsigned int int_id = 0;. d; P. a, d e/ m6 ^
// 确定中断源6 E1 [" g; D3 ^" [, y
int_id = UARTIntStatus(SOC_UART_1_REGS);) e8 h. \" A" }$ z$ h
// 清除 UART1 系统中断
6 t: I- \ g1 M! r3 v% A: a IntEventClear(SYS_INT_UART1_INT);
1 }, ~' @( l2 B: h/ |' p // 发送中断- j. H c$ V- _# L" C
if(UART_INTID_TX_EMPTY == int_id)
% P7 H/ K) q/ p5 I {# d& c: I* K' p- S; e0 N
if(0 < length)
5 `4 \ }* f2 `% }" M {! z/ |0 f! F9 a) X3 u6 G
// 写一个字节到 THR
5 y4 c3 I3 K6 L" S+ U& | UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
3 L5 j1 B* o% {# u* }* K length--;
0 s% c9 {+ @ @# b count++;
8 {4 F1 X6 L& t9 v4 L: J }/ J2 D; L( L1 T& n
if(0 == length)
5 s P3 ~4 O" X7 ^. O/ W- I: y {) j/ |9 k. W7 }( s/ D' ]7 R
// 禁用发送中断
2 f( o$ `- _+ ]1 y' o UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);/ ~9 ] N! I; Z. j. P0 w4 {
}
+ C0 Q/ e6 t) A) o9 ~ }
) {( [: i; ^1 {( c+ ]- h6 ^' q& m% Q // 接收中断
/ L5 g: d3 U6 W6 H' n, Z# M if(UART_INTID_RX_DATA == int_id)
( b" z) m9 }; e$ C, j6 k3 M8 [ {+ b5 T, v, V9 ~( t
rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);+ D7 D# a) p1 s7 y& C0 p
UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
$ Y' E4 d: ]4 |/ j8 ]$ e1 H' [. s }& _5 [6 a" W3 a& m
// 接收错误
; a5 g. Y1 X/ C4 e# K9 ^( T if(UART_INTID_RX_LINE_STAT == int_id)1 M1 F0 ~- u9 y# x$ Q* Q
{
% y* `& A/ U( S- ?" i0 s- E7 h while(UARTRxErrorGet(SOC_UART_1_REGS))0 Z7 n8 E. J0 w) Z' S
{5 [) p# e- B1 S# @/ U+ v
// 从 RBR 读一个字节
7 r- o$ j! K7 J; s$ _; D. U UARTCharGetNonBlocking(SOC_UART_1_REGS);8 _7 }6 a! b! e1 E
}) F! k, G2 n+ x
}( d0 ?2 [6 j9 K6 t
return;% f, H1 Y5 E# y
}
; }" t2 m: `3 ]4 Q. hInt main()
6 C$ F+ ?$ j* c5 {$ i! i# p{
- U# I8 z) i9 C4 P UARTconfig();//uart 配置
8 @" A4 z* j$ d0 z& U$ t3 m | Error_Block eb;4 v- M% b2 z$ k0 _% Z
System_printf("enter main()\n");2 t0 P0 m% S$ u3 A/ H
Error_init(&eb);
0 T5 n9 o; A% t- \ // 动态创建硬件中断
2 k4 X. m; A( V Hwi_Handle hwi1;) S# q; U' r& ^+ ~; A: ^
Hwi_Params hwiParams;0 \* [9 s! Z& v/ O+ M b3 R
// 使用默认值初始化参数3 t0 [9 r! ?' E- {
Hwi_Params_init(&hwiParams);9 n- p' f1 u- y+ O0 `$ m
// 中断事件/ d8 P- O1 d' j6 U
hwiParams.eventId = SYS_INT_UART1_INT;; Z5 e$ @2 K' z; _6 j l& |' q
// 传递到中断服务函数的参数- a$ \( ^* s, F0 V1 c6 [2 P; F, Z
hwiParams.arg = 0;
5 l5 |/ d0 ?: ^1 O // 不允许该中断自身嵌套
* V7 `3 n& k" E/ b9 T2 o. N8 F" ~ hwiParams.maskSetting = Hwi_MaskingOption_SELF;9 h* p& A# ]! E, K( V/ x
// 使能中断3 o5 Y: f: ?1 p
hwiParams.enableInt = true;
. Z W, M/ h' I1 n4 e0 C // 可屏蔽中断 4
$ [( |. P, l* m // 中断服务函数 hwiMain6 Q4 W7 v; V q' z" a5 |. n( L
hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb); t6 r8 e( ^& `1 p
if (hwi1 == NULL)
+ D6 k! w' j6 W3 b System_abort("Hwi1 create failed");
. v8 ^* M! @% b9 H1 ?* ?8 G BIOS_start(); /* does not return */
- n7 \" P5 J% h" ? g" K0 j return(0);
! O, U% J, e3 R8 }}; W+ \ M4 K8 o: ~, s$ V9 s4 A
2 {# ] O! K9 }$ J+ ~9 O% | |
|