在sysbios下,uart中断收发数据,程序无法进入中断 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7559|回复: 4
打印 上一主题 下一主题

在sysbios下,uart中断收发数据,程序无法进入中断

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下
. y( W( u9 ?3 a5 |; \% y1 V// 发送缓存! ~. R0 X' _- r' M" C/ Q
char Send[] = "UART1 test......\n\r";
( E# W$ o9 B7 y2 i4 s8 v! \5 G9 h5 U+ P5 O) R" m
extern void UARTconfig()
, {; Y6 I7 q+ n0 D) G! g" I0 M{
) w& [1 y, M: X4 ~4 @ //使能Uart1
! x0 |9 k& Q6 ?4 v! h# m PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);' B* _( S. {' s
9 {& S1 ^# n) {
// 使能 UART1禁用流控
) M0 l, a* u& I. [) _: ~$ [ UARTPinMuxSetup(1, 0);5 N6 w8 m! f! l5 X: G9 N& {
1 y7 m; P7 c3 P; m, b) m$ P' `% I. V
// 波特率 115200 数据位 8 停止位 1 无校验位! K4 s( X/ Q% ?4 U* t9 T$ s* Y
  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);& q  x1 k3 P2 c$ d7 U( z5 V
* X! W$ |0 b3 {. G1 Y5 z
  // 使能 UART1
; O: u& t4 L( j2 A/ T UARTEnable(SOC_UART_1_REGS);
1 g0 f# |/ }3 A3 K: m& u5 h, k  // 使能接收 / 发送 FIFO
( h$ S0 e8 l4 E& S- f" E9 _+ i  UARTFIFOEnable(SOC_UART_1_REGS);1 B8 H, D/ a# M. n
  // 设置 FIFO 级别
- D$ h- G4 S$ I7 o& u- r+ d    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);
) e3 k2 ?. J. o# x  //Uart1中断使能( A. D" j9 G/ \& ~6 _; w; w
  unsigned int intFlags = 0;
4 T# R8 R0 Y4 o* e' J2 [# m" p  intFlags |= (UART_INT_LINE_STAT  |  \' w1 n" c; i, E, ^+ }: R1 \0 \
            UART_INT_TX_EMPTY |    \" e0 {2 a+ Z: H& `1 W
            UART_INT_RXDATA_CTI);
; X6 `5 n( G7 a% `            
' W1 P2 I/ ?0 `# u    UARTIntEnable(SOC_UART_1_REGS, intFlags);
7 l" N& x+ o8 d3 x7 p}
' A- }" }& }8 s//UART 中断服务函数
0 D( a/ _7 `6 I# d$ E# jvoid UARTIsr(UArg arg)
0 w4 s1 o7 K7 I9 {! `1 `$ z{
( h! X9 w  J& j5 Q1 {4 e) {    static unsigned int length = sizeof(Send);
& G7 x' \2 k6 |7 P7 V7 S5 r: C    static unsigned int count = 0;
3 F& g4 i8 n0 S  O4 E9 ]" i5 b$ Q    unsigned char rxData = 0;8 j2 C. x8 ~* }, w, n7 J- Y
    unsigned int int_id = 0;
* r  _# @- \1 X3 k2 Q    // 确定中断源
8 G" ]; g- I" Z$ Z% p$ }; W    int_id = UARTIntStatus(SOC_UART_1_REGS);0 R+ F4 w- z6 ^9 \% h' c# \6 Y5 Z5 s8 |
    // 清除 UART1 系统中断
2 |7 m  n# @9 Y    IntEventClear(SYS_INT_UART1_INT);
( b3 B) L" O  t6 [: ~    // 发送中断
7 A( x1 p3 `$ p    if(UART_INTID_TX_EMPTY == int_id); W9 Y" H% o) J5 S  T
    {
/ o, v+ {1 ~: k8 e        if(0 < length)/ m# v( [0 v7 k: ~/ B0 K
        {1 y8 X2 C# z+ Q" L6 C1 {0 E
            // 写一个字节到 THR0 d2 U4 s! w3 C/ F* ]3 }6 Y4 Y
            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
8 l" ]' P6 }- ]/ W            length--;
0 A+ G: Y8 }5 Y8 p8 I+ `            count++;# O. J5 J" H4 D# R' ^8 t
        }
8 `  T( a/ z. [  M& ~6 k        if(0 == length)
7 U; i4 z& ~- r$ U# }! X        {
/ O5 V/ t! P4 u            // 禁用发送中断
# I  v* J" z; g0 V            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
  C" G+ s7 c6 i3 n+ I& A  w" P        }
2 k3 @: E' m7 A9 D. ^     }
, m' G9 Z0 p4 T3 j2 B: U! ^5 t  E7 F    // 接收中断
8 r. G  c: ~" o. t4 ~+ w    if(UART_INTID_RX_DATA == int_id)2 g; v, a, U' s9 c, e6 |! ]
    {
2 a8 o0 I+ U* L! ]- h5 U) g7 U        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
9 V5 y% o: M' x- T8 p& ^( @6 A        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
; I7 b+ [& n+ H" b5 _    }
& _, q+ I: ?$ R    // 接收错误! V' ]/ ]: [# r/ R5 a* y
    if(UART_INTID_RX_LINE_STAT == int_id)
! O0 H8 i" g/ a" m5 X+ }6 o3 l    {, D! A' V, ~: d6 F
        while(UARTRxErrorGet(SOC_UART_1_REGS))
/ K* d$ q& v2 e: F4 X% i: R        {
- z8 J5 M" D/ b3 h. i            // 从 RBR 读一个字节
/ \5 ]. R6 m: W& a$ D% }$ ?0 k            UARTCharGetNonBlocking(SOC_UART_1_REGS);
+ p+ K' A- v+ T3 Y  C, K1 E        }
& b  Z# l, P3 z) s( `) A    }5 i- c5 O1 p9 ]" T9 N
    return;$ F% a; E% s- ]3 l: z
}1 z9 g8 y) w3 P: _- u4 j
Int main()+ K; X1 _$ c( @# N4 {. M3 f' t9 {
{
! M' ?( B  n9 B7 T" S# C# x UARTconfig();//uart 配置
% \5 `" F/ C" ^5 P5 @    Error_Block eb;
: B- z& x/ g5 e0 F& E- N    System_printf("enter main()\n");% A: k8 S/ f& u2 L
    Error_init(&eb);
0 ]- ]# v( ~% X5 F: B    // 动态创建硬件中断
7 D! @" G: ^9 I, l# Q* A/ ~- W    Hwi_Handle hwi1;
: k7 Q5 a5 L. K5 w; K  D! I    Hwi_Params hwiParams;
$ W. z4 l- k' c5 \    // 使用默认值初始化参数
% e9 s' e0 f; N) G    Hwi_Params_init(&hwiParams);
5 U: o! H4 _; v; W; z: d( M) Q+ y! U) a0 m    // 中断事件
  |& R% W( q* _0 G) X    hwiParams.eventId = SYS_INT_UART1_INT;
+ N) b3 e+ y6 n0 t( h% R! m    // 传递到中断服务函数的参数
' y4 m  l+ s* g& e; u. H7 x    hwiParams.arg = 0;
4 B0 i3 w0 V# Y6 M    // 不允许该中断自身嵌套; {7 B) \9 s* z# ?* g* p
    hwiParams.maskSetting = Hwi_MaskingOption_SELF;' S3 M( s9 p; u2 q  s" t
    // 使能中断; Q6 {* F$ M) T
    hwiParams.enableInt = true;* m7 y! U  l( A! X* P& f3 @& ^  |
    // 可屏蔽中断 4
' J9 U2 c& B% G, n$ V4 h    // 中断服务函数 hwiMain
  T: y2 @% r! N# G/ C* |    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);) J- O$ l/ B  m2 |+ \% @
    if (hwi1 == NULL)2 R1 H- X" x& F* M, _
        System_abort("Hwi1 create failed");
  N+ T' t' j7 E/ K) s6 d" q8 K    BIOS_start();    /* does not return */
) e2 F, j: |( o% R- Q    return(0);
" v" ?. j9 g7 k2 e+ g5 T) G}
( _0 C9 R* x+ k
1 N0 A: K4 i& t% T3 p# O9 k
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?4 f" |/ z! c4 r: E* P
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点
# ]/ K/ G3 T+ L3 e; |8 _* U- ~/ z
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49
" j* z8 i4 c, }4 n# a在中断服务函数里放置断点
" w% B4 ^& ]. i& F
参考 GPIO_KEY- J1 a0 a* n5 W
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

积分
115
5#
发表于 2016-8-1 21:05:07 | 只看该作者
请问你解决没,我现在也遇到这个问题了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-5-5 19:40 , Processed in 0.039841 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表