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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下* ?4 [: f$ p+ z7 J9 K, r% c
// 发送缓存
1 Y9 Y( C# g/ T( y% z! d3 a$ ochar Send[] = "UART1 test......\n\r";7 u5 ?6 |$ i' q% B* l& U

- y6 o. d5 Z# [: X" q1 Vextern void UARTconfig()' e% i$ a6 d  C; f& r
{
! b) {" w2 p! ?/ |5 @8 A //使能Uart1
0 d0 j4 N( Y! l& F; N PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);4 V4 ^3 Q* D5 u, Q; R7 @; F

2 y( R* a0 w2 \ // 使能 UART1禁用流控% b( p- N( x7 ~0 z7 A  G; `  K  i
UARTPinMuxSetup(1, 0);
7 W- T0 L" ~) \8 u3 x
1 J/ N9 o( ~9 i& K9 ^9 M // 波特率 115200 数据位 8 停止位 1 无校验位5 O$ g, ^: ^: g, x9 Z2 ~, K
  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
  B! C$ T' y8 U5 C/ p3 ]& J, L3 n
  g% ^6 C2 X) m# F0 H  // 使能 UART19 ~) i! J# Y5 Y3 j3 d) a) w
UARTEnable(SOC_UART_1_REGS);
4 _5 d) S( i9 V, g' g. y  // 使能接收 / 发送 FIFO
1 C/ m$ Q' N' p3 i  UARTFIFOEnable(SOC_UART_1_REGS);
7 i. ?. w- q- J% o( d/ i  // 设置 FIFO 级别- N9 I, v9 R. K5 v) Q
    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);
, t  u6 a2 T9 w, ?/ L  //Uart1中断使能
: [+ n$ a0 W& T/ s0 Q  unsigned int intFlags = 0;
% H  N; d# x  t  intFlags |= (UART_INT_LINE_STAT  |  \
' f4 w1 v$ P4 l+ f" N- J( P! h            UART_INT_TX_EMPTY |    \
) s  N6 Y9 }+ @            UART_INT_RXDATA_CTI);& M- f2 ~. j! @$ P7 h% Q
            
" d2 ^0 |4 n9 v& ]) [    UARTIntEnable(SOC_UART_1_REGS, intFlags);
1 x  N! ~! M& s. W}
6 ?2 n$ Z/ E" d% a: @7 ]//UART 中断服务函数
) t8 g1 ?9 @. E' S. dvoid UARTIsr(UArg arg)
. F. |$ F$ V! z{) R7 P/ l/ T8 C5 d  o, |
    static unsigned int length = sizeof(Send);
) S2 I4 V2 Q5 u    static unsigned int count = 0;0 ]+ H4 H5 X. T5 I% g- M5 J3 i
    unsigned char rxData = 0;. b7 K  V  x1 j; e$ m) S
    unsigned int int_id = 0;) L% R7 @9 ~  S
    // 确定中断源" M2 [  ]$ E( ^0 ^
    int_id = UARTIntStatus(SOC_UART_1_REGS);; n& S7 b" i9 h: G( K* Y% q
    // 清除 UART1 系统中断
; n( s: Y* M2 L* u/ z    IntEventClear(SYS_INT_UART1_INT);
9 c9 R0 w5 Q; ~    // 发送中断
6 s: t% O& [4 ^" g  ^! X* `) ~  B    if(UART_INTID_TX_EMPTY == int_id)
4 w) ?- g, f( ]( B# ?2 d$ S( ?, U! t    {1 y% q7 g6 F! d, b9 g- b0 g+ \
        if(0 < length)8 t, J0 L% Q0 r8 s5 p
        {( w) D9 u1 H  O2 V
            // 写一个字节到 THR
, Z! J9 n- a9 ^( H4 ^/ H: M            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
- E# M; O4 m3 K( l, v- ?            length--;
- F! [- x$ `( u" e' O            count++;; l" n8 Y0 e8 F
        }( d) o; |/ q, {5 n
        if(0 == length), _* |" Y' r+ X: s, s( V, @) y
        {* K( O" i. F2 F/ P) B7 d
            // 禁用发送中断
. A* v7 M- g) O% c/ X3 Y            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
& q& K) E  B+ x& @: g7 L        }, l5 Y8 n2 @+ S- f
     }
7 _! }, g" q6 l. P! |    // 接收中断. H) A6 b1 x  ~. D0 z
    if(UART_INTID_RX_DATA == int_id)
& g: U& c# F# \- Z/ K    {
* [5 `% D$ |' \5 L" w        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
% `  w. O& M. k        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);1 W. k/ M: f. M+ F3 v6 u
    }
# S0 ~; w& U' }8 \    // 接收错误) ]; g, G4 G/ u5 r
    if(UART_INTID_RX_LINE_STAT == int_id)
3 M" \' ]! v9 O: k: {& d    {* M5 O, c1 v: N  M# g7 b
        while(UARTRxErrorGet(SOC_UART_1_REGS))* n! S0 y, ^/ [% S* Y) l
        {2 c7 I+ G- v' z* X( R, O
            // 从 RBR 读一个字节
6 x4 R2 m7 a! M: p; W! v            UARTCharGetNonBlocking(SOC_UART_1_REGS);3 g; o1 F4 }+ f
        }
3 Z. r% c0 s2 T: s, V    }- }8 L$ _, S! t4 b! S) u6 t+ w# ?+ l
    return;1 q% O6 ]4 S# M5 f9 E. k+ \  h& v+ V
}
- y- i, \9 b. f5 lInt main()
2 M% f) j3 w8 r/ i8 E{
2 i4 b. S3 V  Y5 v UARTconfig();//uart 配置
3 R3 s+ y5 E! D3 K# Q    Error_Block eb;+ i0 P( L- P/ w* u- v
    System_printf("enter main()\n");
& Q! p0 s7 t# e0 a$ ]/ Y; i+ e* ^    Error_init(&eb);
& \" ^% T) \( R* w# h. h    // 动态创建硬件中断
' m6 F' G$ [- Z0 ?* f0 T    Hwi_Handle hwi1;5 [& k1 k2 }. o3 }  F1 w8 N4 M7 M
    Hwi_Params hwiParams;8 Q( y) q+ C& E
    // 使用默认值初始化参数
, a* o! d, p- o+ `, y" o+ A    Hwi_Params_init(&hwiParams);
' r0 k8 J. F' X0 S+ ~+ ]) e    // 中断事件  H: \- M: j" W, _& r- H1 j
    hwiParams.eventId = SYS_INT_UART1_INT;" Y: l( d0 [8 n$ O
    // 传递到中断服务函数的参数+ ~7 e0 X7 ^( H1 V. W4 w
    hwiParams.arg = 0;
0 A# L0 P! ]. A) l: _) y    // 不允许该中断自身嵌套* t$ N. y% v% c
    hwiParams.maskSetting = Hwi_MaskingOption_SELF;
. d: M( Y/ a" ]    // 使能中断
' N0 d- ~# q$ c    hwiParams.enableInt = true;, k4 H9 \- u# K, l/ k2 s
    // 可屏蔽中断 4
' w1 V8 p* v5 |4 T3 ~    // 中断服务函数 hwiMain
  d5 [. |8 D( S    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);
' p( \" g1 i, [& i; T0 [  B    if (hwi1 == NULL): j8 c6 f! W# S( y2 F
        System_abort("Hwi1 create failed");% Z4 M1 C6 N( d8 Y* F  R
    BIOS_start();    /* does not return */2 k0 V6 s2 e" C1 T! Z2 q
    return(0);
; S  A8 c7 O" y2 J9 F}
- P0 M( ^+ Y; L2 ^- ~3 N$ W) t2 Z2 @' p0 T8 N+ O
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?
- j9 C: l& c' s5 n
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点; Q8 Q; F9 u6 t2 i0 g
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49
* S0 o/ a9 X/ F; B# }/ o在中断服务函数里放置断点

" o1 K0 j2 H7 G$ h" ~2 Q; C参考 GPIO_KEY$ L* P! `' o! K! `" f
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-8 20:14 , Processed in 0.039999 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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