|
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下' D s! B$ a" R9 p0 V/ x
// 发送缓存
' E: p' Y' p0 y6 j$ h" c5 L o' M5 cchar Send[] = "UART1 test......\n\r";
1 \& N, T( Y" j( k! B5 g9 Q4 E: O1 Q3 C6 W6 w, Y2 A9 v
extern void UARTconfig()1 V3 d& o0 C4 K) ]! }9 L& B
{2 y: D9 {1 z& Q: w9 A2 a* l! M- m
//使能Uart1, F% u; c5 N Y, c8 X4 F) L- f9 v
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
" C5 r1 ~, [* @' A, V* B( j ( N" e% V; i+ w7 G. _
// 使能 UART1禁用流控
# {! Z- e; X9 P& u6 z3 [ UARTPinMuxSetup(1, 0);( M6 o; A. @* h& L1 ?/ i
i' ?* H) A! o3 Y* k* I( B
// 波特率 115200 数据位 8 停止位 1 无校验位
" e6 G: {/ I, Z6 p. I UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
4 B: n4 U% {' I/ y
5 @' G, h" b- q% q6 y // 使能 UART1
# J# E5 r% n) ^/ S UARTEnable(SOC_UART_1_REGS);6 l, i1 v/ ^ I. T
// 使能接收 / 发送 FIFO
9 M3 v5 d. G7 g# Y UARTFIFOEnable(SOC_UART_1_REGS);* o2 c2 q$ w' u' W" Z' {' x
// 设置 FIFO 级别
& j5 \; v. P8 F% i UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);
, G! `& p$ A, G //Uart1中断使能/ Z) q1 f! ? b1 ]; U4 A
unsigned int intFlags = 0;; U6 I+ Y E# r! h0 I8 {
intFlags |= (UART_INT_LINE_STAT | \( [( k5 |$ ]1 M( U8 [( a$ S
UART_INT_TX_EMPTY | \: |. E' {7 f' |9 Y
UART_INT_RXDATA_CTI);% L% l( m4 o" n$ B5 y' T" S
1 y5 n6 Y8 C* S0 o+ G' m. r UARTIntEnable(SOC_UART_1_REGS, intFlags);
6 m4 G3 c8 x% f0 O1 t% u$ r}
; U' E6 B$ B1 w" T' [//UART 中断服务函数; _5 j8 }9 J" C( L, g
void UARTIsr(UArg arg)6 N: h+ R4 i: \ t2 y/ H& Z
{
1 Z* m, T) O. s static unsigned int length = sizeof(Send);
2 N7 q3 p4 _: m, ~8 Q% d9 m8 E static unsigned int count = 0;
+ H" i$ D, m) D4 i4 @/ K8 u( I% N3 B$ h unsigned char rxData = 0;4 }; N/ T: B' s+ n( l/ ]
unsigned int int_id = 0;
5 ]6 ?5 W x `5 S- u // 确定中断源& ^# i0 p. S& \6 a
int_id = UARTIntStatus(SOC_UART_1_REGS);9 q- f2 I8 f9 I3 \; d
// 清除 UART1 系统中断9 r6 M q% H7 g# G2 |
IntEventClear(SYS_INT_UART1_INT);
0 H0 |8 P: g7 H; ~) M" Z+ ]* `) c // 发送中断/ @; x* J0 V* v- i
if(UART_INTID_TX_EMPTY == int_id)
! L6 \7 K. j" ^: Q" R9 _6 }/ n {
) ~' D9 b/ f4 H if(0 < length)
: L5 w# P2 F1 c5 j5 \- Y& G. m/ Q {3 T# v$ E: \; g3 ?
// 写一个字节到 THR/ y9 g' o% z/ i! r5 n K
UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
( s$ p P0 Q) w ~$ k; G% j length--;
! ?* f/ h9 Q* b) O8 i( d" f count++;
* ~, u' q) c9 y& k0 u6 T/ P }1 t( ?7 e5 o: \
if(0 == length)& f- e) Z# k# O4 f. m2 L
{
; h' R+ K4 {7 s# E# |" Y // 禁用发送中断8 e# R6 K1 n* V. \
UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);$ X o% i% b! M) N. _. p
}7 n3 |- l# t) L+ X
}
9 R+ p$ o6 n1 _ // 接收中断
# f l. Y) r8 A$ V. H' ` if(UART_INTID_RX_DATA == int_id)1 E3 D4 X1 t% Z! @+ {) p
{3 s4 E8 X2 \( [& c' j6 X( h
rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);; j" e' @; o$ T& a3 I; @
UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);/ F2 f/ i9 E) _1 C- F1 c( _( ~
}' e1 X. G4 K1 P
// 接收错误( V. d) h* `5 c8 H6 \" j
if(UART_INTID_RX_LINE_STAT == int_id)' @) b1 S+ L: \, W
{2 `# P* ~4 r% k ?% Z
while(UARTRxErrorGet(SOC_UART_1_REGS))$ a# i) J" I: Z
{* w6 Z# g2 P+ ^& z0 f5 {
// 从 RBR 读一个字节
, X* ]( _" \: ^- p! q0 [: _; d, r( g! J UARTCharGetNonBlocking(SOC_UART_1_REGS);. H0 d1 ^5 D6 A* i9 B+ I
}$ y4 l1 H8 @% Y7 k
}
" c/ z+ H1 F( s# Q' @ return;1 q/ Q% `6 s5 q8 F2 `' N6 e. u s
}& v) K# S) R9 W2 p' X
Int main()
5 ]' H$ O0 v# m9 _+ T: e{ 2 s- S' F/ T! {$ K& O1 E6 l
UARTconfig();//uart 配置) K0 h$ z' I, p) G
Error_Block eb;
' l6 d% O" |$ T/ r( t4 l# j System_printf("enter main()\n");0 }: Y2 j. ^4 ^ v) |
Error_init(&eb);
5 m2 k3 d( ~9 n: `$ A // 动态创建硬件中断
% G- J- K) B4 L e Hwi_Handle hwi1;
9 i1 a1 R# l' E& h3 H Hwi_Params hwiParams;* T, p s1 h& ?+ T6 _' \* D
// 使用默认值初始化参数
5 B' q2 B* X0 F+ L i6 Z2 C2 r/ n Hwi_Params_init(&hwiParams);
8 C7 r' K: }7 V, M# {1 Q& } // 中断事件
9 p) ~+ t9 G5 E# g4 u hwiParams.eventId = SYS_INT_UART1_INT;& _/ |) K7 o) t. Z _: j% b
// 传递到中断服务函数的参数2 G O# v* M4 t% m6 f2 u# N0 T
hwiParams.arg = 0;
2 J- `3 g; n9 r/ @2 o // 不允许该中断自身嵌套
+ M$ W1 ^, Y# E' z: N2 }7 @( H' z hwiParams.maskSetting = Hwi_MaskingOption_SELF; Y5 v; p* G* B$ a' l7 Z, l" e
// 使能中断" A$ S s$ L5 K8 l
hwiParams.enableInt = true;
' m1 C6 [* D- E p& M$ @* M // 可屏蔽中断 4
! ~4 h d# o8 g9 {$ E // 中断服务函数 hwiMain
3 o! {: ^$ x* j: j Z3 z4 z4 h- n3 p hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);) O( p6 V1 s- ]" ]) R
if (hwi1 == NULL)
$ H$ f3 a' j) V! l System_abort("Hwi1 create failed");+ Q4 l& X" g/ J. d
BIOS_start(); /* does not return */, s! S% L6 X( j! ^. N, E
return(0);2 A/ ^$ A. k9 w8 }( A
}, E5 _* y& ] U0 Z8 x$ K& P
: h& o8 `4 @+ p3 Y
|
|