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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下
5 g+ l% C* E& t* Y2 L// 发送缓存
; L$ q( N3 U# j; ]  m: d4 Echar Send[] = "UART1 test......\n\r";2 L' J1 z4 I! v3 _

( d  U9 b' M" I& sextern void UARTconfig()0 G6 R* _9 n$ N  @' ^
{
/ ?1 B6 e. S% [1 X //使能Uart18 J0 f. N7 R0 O7 A- B( M
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);% p" ]) x8 r. O+ e6 J0 `, l
: Z1 q) E6 T9 s% g% b% G
// 使能 UART1禁用流控' `# s( {1 [1 E- `# t% c
UARTPinMuxSetup(1, 0);
9 V  z8 U6 `. P! \
9 t+ C2 k8 R2 S6 p0 C5 G0 h+ Y // 波特率 115200 数据位 8 停止位 1 无校验位
0 K2 v2 [% Z5 v2 E2 Y$ q  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);! z7 v8 ]8 z  a: _) \1 Z

: k  `3 j5 y" ]' p  // 使能 UART15 q. M4 p; }. B" ?* f6 f
UARTEnable(SOC_UART_1_REGS);
) T* |7 R9 k3 @! w+ ^  L  // 使能接收 / 发送 FIFO# ^1 p- |, Q, X
  UARTFIFOEnable(SOC_UART_1_REGS);
* o# l5 M9 J) [3 ]* q  // 设置 FIFO 级别/ W7 I6 ^6 g$ E" k5 y% `, l( I# H
    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);5 |; E! R7 z6 S7 C
  //Uart1中断使能
, Q5 D4 C  i; T  unsigned int intFlags = 0;, P( {8 o+ i. J
  intFlags |= (UART_INT_LINE_STAT  |  \
2 N4 n) r- y4 j. j& \+ O$ j- z' A            UART_INT_TX_EMPTY |    \+ b: S0 p: a% ^9 {* c
            UART_INT_RXDATA_CTI);4 ?0 d0 |0 U( X& p! _. d
            - e" a: Z( S# Q8 d! t
    UARTIntEnable(SOC_UART_1_REGS, intFlags);7 Q! \/ s/ |+ a) e2 _
}
* L3 [4 N! l. L" ^//UART 中断服务函数& p0 p2 w3 G0 R6 n
void UARTIsr(UArg arg)
; L* N( e1 R6 @& x{
! b, T' T0 ~( }  t8 e% H    static unsigned int length = sizeof(Send);. J7 E6 B9 A6 s4 q& V; g: e
    static unsigned int count = 0;
/ O$ _4 M, K& {& F& {1 ^5 ^! }    unsigned char rxData = 0;  p2 p  m1 ?. C- K2 m
    unsigned int int_id = 0;$ R7 G% l3 X" R; U4 w6 [
    // 确定中断源
2 Q# N+ o# e5 j    int_id = UARTIntStatus(SOC_UART_1_REGS);
( ]6 U& V6 ~% d( A; C    // 清除 UART1 系统中断
- z1 K( W5 F' `7 l    IntEventClear(SYS_INT_UART1_INT);
4 k2 |# Y4 @( {8 \3 \    // 发送中断  [" m) P* g* Q& A( m
    if(UART_INTID_TX_EMPTY == int_id)& l) t& O$ m. l: ~  ]. [, H% P4 k
    {
& p5 @" `: u# d+ B        if(0 < length)7 t+ G" f0 r1 }6 R* C
        {. i: t; u) Q/ d0 a  l( O8 k
            // 写一个字节到 THR# b; h7 X- Y, }  u/ J
            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
6 D  z6 |/ W! S3 p( X/ e, P/ w            length--;
$ U* _1 H! S6 X9 {5 S1 h& G/ _            count++;
) S- m( g1 ~6 R. [6 A        }* J( G7 q9 a* T1 @" h+ E7 D
        if(0 == length)
) w$ ]5 {) d6 Q        {  l2 R) T$ p+ i9 ^% f1 }
            // 禁用发送中断% u3 S) T- U; a9 V
            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
# V$ q/ Z8 C" e6 L8 f        }
* T9 T& g# j. z     }* _2 I6 {( ~4 I) N
    // 接收中断; I/ h9 E( C% S
    if(UART_INTID_RX_DATA == int_id)
1 y6 B. T( p. [    {
8 R2 h3 j! s3 M- a        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
4 c4 V7 E6 }3 R' v* K        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
& O( A. s1 I8 k/ D- @+ n    }; q& P# e0 L4 K) u$ l
    // 接收错误  t( z: Z, T* N+ u$ J5 Z
    if(UART_INTID_RX_LINE_STAT == int_id)
0 T( s- l$ j3 H$ w! A" L. h; u    {
: V0 ^' t: [! f( F  B" h        while(UARTRxErrorGet(SOC_UART_1_REGS))' r/ x4 C& T* u$ ~1 [
        {
/ i4 P/ E! R( q& U            // 从 RBR 读一个字节
! Y2 s; x7 Y3 q7 t2 K7 M8 v            UARTCharGetNonBlocking(SOC_UART_1_REGS);
2 Z1 o2 W9 G6 I        }
7 W3 s- l' H' y% @' y    }/ ^+ y: [4 D  l( K5 s/ m7 H& Q
    return;
1 N) y6 r, o5 P}( |1 a' ]$ ~7 z. P& `$ @9 K
Int main()
7 I% z7 M1 a$ I{
7 {7 R5 V+ k% s4 G. N5 v+ k UARTconfig();//uart 配置
; q7 J( J  w9 S* Y2 r6 W9 D0 [, _* [; g    Error_Block eb;
! z! L( ?) V( p" I  a: F$ ~    System_printf("enter main()\n");- j- [3 u9 c" Z6 r
    Error_init(&eb);
- W1 s7 q! G7 f    // 动态创建硬件中断
2 W: s: b- J, n8 N, C3 U    Hwi_Handle hwi1;5 {7 e& {9 S* q* q5 N
    Hwi_Params hwiParams;
: d% X1 [1 M2 \; c7 a0 M    // 使用默认值初始化参数
, h7 {; L$ @2 [    Hwi_Params_init(&hwiParams);( ~+ _) ^. O  c+ p1 r2 q) C* s: I
    // 中断事件+ V- ?! A" |9 u
    hwiParams.eventId = SYS_INT_UART1_INT;
; K3 S6 Q5 R3 \' _/ W3 _, d    // 传递到中断服务函数的参数! t, `9 O6 h7 S: d7 q
    hwiParams.arg = 0;
  p1 W0 R3 M0 C  P    // 不允许该中断自身嵌套
: U5 t8 u1 p; m% u* G2 i7 a    hwiParams.maskSetting = Hwi_MaskingOption_SELF;" B! Q8 {+ p. E# @3 e% U0 j
    // 使能中断
4 e4 r3 b( v# ]    hwiParams.enableInt = true;
4 a1 V2 X$ c7 O, v) ~' O    // 可屏蔽中断 43 y& E4 Z1 T3 R% m, B
    // 中断服务函数 hwiMain
! x3 Y! B. o. a2 W! n    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);: f+ O* ?1 W  f: }
    if (hwi1 == NULL)
: c5 [% F7 a& M1 x0 s        System_abort("Hwi1 create failed");7 f+ h- C+ a7 w0 L
    BIOS_start();    /* does not return */% F8 O' R0 |8 b4 F- D! s6 h+ K
    return(0);0 z& N, T9 b% s+ {2 P
}0 l. L( x  Q1 S% f

1 L( E4 {6 S) U. W! T% c$ P
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?
2 M9 M' H) w; H5 a
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点3 J9 M* L: _$ K: f! E3 V
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:491 ?* P; }( I# \* K
在中断服务函数里放置断点
" Y; I7 W0 c1 ?* W7 C
参考 GPIO_KEY
/ K+ f% H  t$ T* X* F/ x2 G' j
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-20 20:50 , Processed in 0.044791 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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