|
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下) z. E* H8 t, G- O0 n' b
// 发送缓存: g0 D( M0 v' E9 u" b
char Send[] = "UART1 test......\n\r";
, K" z8 I4 ^3 h: r0 Q$ h2 f# y6 ] O' S! R
extern void UARTconfig()
" `1 k* L: s2 ^$ k" q* {7 l{
6 h) U: i! ^' H4 i6 e7 Z1 p/ ~ //使能Uart18 O" D# n0 ], Q n
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);$ r1 ^! F0 P- B- t
7 E9 y8 ^/ `: e3 n+ r% R
// 使能 UART1禁用流控
' l2 n8 z7 X7 j* r/ S UARTPinMuxSetup(1, 0);
5 U0 |6 h3 _- U, Q" v# v9 l% ~ ( V% v! N0 G& k' x. f: y( b- W9 D
// 波特率 115200 数据位 8 停止位 1 无校验位
* x% [) a+ N$ i8 C* I5 I UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);1 f, U( Y r& |: i6 C- g/ H, d7 `2 ^
; Z& |; ~% F; R // 使能 UART1
* t% s0 d' d$ A7 B# E2 i1 c UARTEnable(SOC_UART_1_REGS);
4 Q. v- `+ U) L% A6 a* ^ // 使能接收 / 发送 FIFO
. q: n8 k8 B4 c) U3 f, `/ Q# x& ` UARTFIFOEnable(SOC_UART_1_REGS);
5 W! O. N z' S // 设置 FIFO 级别$ {$ C- h5 T: P. L
UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);
5 P2 s% a. l! B3 p: q //Uart1中断使能
$ y6 o3 K9 C& c0 p! L: z unsigned int intFlags = 0;% \9 ^2 ]8 @ ~& p C
intFlags |= (UART_INT_LINE_STAT | \2 v0 @2 K. o P* _1 Z( V
UART_INT_TX_EMPTY | \' }/ P: J7 b Q/ P1 _% f
UART_INT_RXDATA_CTI);
, D' T( y- V3 W/ I2 C4 M6 s
& ~1 m6 G( r* w5 j5 Y# I3 {: X- K- d UARTIntEnable(SOC_UART_1_REGS, intFlags);
$ A4 d. D* W( P+ W t) X" G}6 `4 {1 i! ]" Q) @/ k$ {
//UART 中断服务函数
; j' o: Z* \) S- t" T$ hvoid UARTIsr(UArg arg)6 E6 w9 G! H' @+ l
{7 M9 K: i/ `9 q* v6 e7 r" r, ^( i
static unsigned int length = sizeof(Send);0 V5 p! x6 N- z+ T) N
static unsigned int count = 0;
# p$ s, B9 q* P8 R Y' T unsigned char rxData = 0;) y1 }7 [. A; D
unsigned int int_id = 0;0 K' ^* i+ b% z2 H6 p/ }: l
// 确定中断源
: m# n `( M4 h int_id = UARTIntStatus(SOC_UART_1_REGS);
8 h- r8 D' J# Y // 清除 UART1 系统中断
+ V3 R- b$ I% K+ Z7 u IntEventClear(SYS_INT_UART1_INT);
: ?: l% V8 x6 G, C3 m // 发送中断
# M* R6 s: D) w+ R" [9 ` if(UART_INTID_TX_EMPTY == int_id); H5 ~0 z7 d! o+ v
{
1 x* u9 ~5 @4 H$ W. |8 @1 { if(0 < length)9 L, ]# n3 f% G2 C: V
{2 s9 w8 J, n1 P/ A/ B' F7 K
// 写一个字节到 THR
! l5 p, j1 @* @9 u( o0 A1 O UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);+ R4 J+ N0 m5 G8 D2 [( I$ U
length--;2 s4 L& W+ H$ A$ w g# f
count++;; [- ?- Q$ \4 G1 u4 x) K
}1 p$ k8 C( F1 I9 C% J
if(0 == length); l) X( C& H. }
{
6 w- x0 H6 o. D" x7 F9 m' \6 ? // 禁用发送中断- D0 R/ p/ A; W" g0 x d
UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
/ m9 q) v0 c- T* A8 y. W _# M1 n }" z' ?9 E& `4 p( K- a
}
! S+ [+ _6 p8 A: X9 V // 接收中断
1 C% w0 Y% G! m7 M8 x2 R% o if(UART_INTID_RX_DATA == int_id)
8 q) [" Q4 n+ r. K8 O5 ^' v! Z- I {
8 w2 A8 \% d9 K5 R; w rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);2 q. J% g1 z/ c* O( S
UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
7 n7 S1 s n7 V% U# K }, V2 c* Z8 U9 b3 T7 Q
// 接收错误
- S# c: Q: C$ L( ^. P7 j if(UART_INTID_RX_LINE_STAT == int_id)
/ h# z, N: j- h% s {: k; g* ^3 _4 Z% W! O, ~$ g' x
while(UARTRxErrorGet(SOC_UART_1_REGS))% C' A, S+ J) S( ^1 A+ J
{
# i) C! K8 D. o0 c: O) m- l; f6 O // 从 RBR 读一个字节$ ?1 B! ?1 \6 G* h) _" O& y \
UARTCharGetNonBlocking(SOC_UART_1_REGS);
7 c. {' K+ m, F+ n; m' n7 G1 W }' A; D, |1 K; R( @/ i
}
) U$ E9 Y2 S+ K( V& e9 R return;" g0 @% F) C8 N
}; O6 n" O; R5 ?7 E
Int main()
3 r+ l! F( E0 W" x2 L{ + A4 i0 }: B# ]8 {" j/ a
UARTconfig();//uart 配置
" B$ R: K; y" ?1 \( J4 A% F Error_Block eb;
# M8 M0 s$ T( S f) | System_printf("enter main()\n");
. c+ ?: |% b% q Error_init(&eb);5 ^& [1 J: Z3 t) a: A Y, w" U
// 动态创建硬件中断2 F" c1 p4 b- C7 x( B: T9 [
Hwi_Handle hwi1;
! O% W- y1 D& s Hwi_Params hwiParams;
+ ^1 j7 }: Z" p, C7 x) ?. w; p! G // 使用默认值初始化参数
- f A$ f$ R4 \7 [/ [1 I Hwi_Params_init(&hwiParams);
0 Z- q- H" m+ z" K# ] // 中断事件% V9 q3 C6 O9 f1 ^( C! ]3 n
hwiParams.eventId = SYS_INT_UART1_INT;
. N# Z' P$ o' G' n // 传递到中断服务函数的参数0 k |5 R0 Z! M( K! }, @# X0 A
hwiParams.arg = 0;
& _, m3 u, G2 m9 q8 s% j // 不允许该中断自身嵌套0 r+ Y" G- H* S% y# X
hwiParams.maskSetting = Hwi_MaskingOption_SELF;# X* S0 s0 q- @0 e
// 使能中断- u$ f1 J5 k. H+ B% n
hwiParams.enableInt = true;# w6 g0 a, X% \$ ]! u# X
// 可屏蔽中断 4
+ s |8 v' C$ |5 C6 ` // 中断服务函数 hwiMain2 i' `1 m* r9 i! [; ~; h% t8 V
hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);
' @1 H, e+ n: M; f if (hwi1 == NULL)
& h* i$ d* a2 T h: _" z System_abort("Hwi1 create failed");
J* p+ u6 S/ r- H( X# v+ L) {( B BIOS_start(); /* does not return */
: n6 r9 L1 M3 ?1 Q, E+ o return(0);- ?: z, A. t( O/ ~% o M( d# v
}
$ h0 }/ h/ ~! J3 d9 I; T# l8 x9 `
# h$ w1 l; C8 Y |
|