在sysbios下,uart中断收发数据,程序无法进入中断 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下" z% }% N3 c! @: J6 A: Z: M, E
// 发送缓存
$ |$ x1 p5 e$ |2 k7 Q, h3 ~6 qchar Send[] = "UART1 test......\n\r";
- }3 Z- _: M0 T; b8 p  N/ @3 H/ n. @  ~1 m4 g/ n
extern void UARTconfig()
3 r8 [, Q: m% l5 v{
; h% y% O8 l  y( B //使能Uart1
% H' h- g0 q5 V: V- J PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);3 }6 f" r. v4 O. v

  A+ i0 w+ q6 o% ? // 使能 UART1禁用流控
8 L, b$ Q9 ?' V( e5 a6 P UARTPinMuxSetup(1, 0);, {# l$ M& ]& e' u& ~& m
% K  L1 c- i& L8 S' M
// 波特率 115200 数据位 8 停止位 1 无校验位" @3 _, H5 \. `' u6 C
  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);& S! W5 O/ b1 W7 e# P3 b

, c" M$ I9 H. x8 A  // 使能 UART1, T& t6 O, u# H' j" u
UARTEnable(SOC_UART_1_REGS);
. G* y% D/ R) k: p9 r$ A$ |( T  // 使能接收 / 发送 FIFO- V4 |6 l& |/ s6 `
  UARTFIFOEnable(SOC_UART_1_REGS);
5 ^/ X5 r2 o( B' b4 L  // 设置 FIFO 级别. R) X3 e; [! ]& k
    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);
9 u0 H1 |/ i/ t1 S* G1 h6 T! @  //Uart1中断使能" v& K. I, ~' H. U/ j2 z, c4 E* F
  unsigned int intFlags = 0;
: L+ a/ ~3 L- e. b  intFlags |= (UART_INT_LINE_STAT  |  \
' J! n$ u' i! G" |" p! r$ H' a! U            UART_INT_TX_EMPTY |    \
- V6 y+ Z* G# S# E( k7 a$ J            UART_INT_RXDATA_CTI);" m$ y4 S2 A, S; L
            
+ U7 }6 [1 I* V4 b- ]    UARTIntEnable(SOC_UART_1_REGS, intFlags);
# d# U" P9 I  Y% u2 B}4 g8 M/ V; A9 S9 X/ w
//UART 中断服务函数
" O% x6 ^, K  ^7 Ivoid UARTIsr(UArg arg)% {: j# K' Y+ O3 t6 u/ ]
{4 n: {$ b! j% M$ E5 U9 W" H; L- _
    static unsigned int length = sizeof(Send);3 _, g% e! r, V  b3 X' h: h  x! y
    static unsigned int count = 0;; G7 x, T% M, B" \/ G. T. J
    unsigned char rxData = 0;
; ]) b! \4 u: Y    unsigned int int_id = 0;
3 i! C0 Q; `, E- f1 i    // 确定中断源
3 s% J$ o! ^1 r" }! v    int_id = UARTIntStatus(SOC_UART_1_REGS);
* U+ e5 q. K. a6 d: N( O    // 清除 UART1 系统中断9 b$ q5 P3 r" D1 M5 b0 a
    IntEventClear(SYS_INT_UART1_INT);1 @" O. @4 ^6 W; ^! |
    // 发送中断9 K$ `' ]6 }& V- \* i* n
    if(UART_INTID_TX_EMPTY == int_id)( |) ~9 ]. j& J  L8 t
    {
8 r) K) m/ V; s2 o! u2 k/ ?; s7 x( b0 R        if(0 < length)
6 Y, M$ l7 y8 F$ x6 I4 r; o        {  l3 J0 t1 ^+ c& h
            // 写一个字节到 THR; D/ |, u5 E8 j; b9 S
            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);5 M  |$ h8 V8 R$ F
            length--;) Z! J0 a2 l$ W
            count++;, I+ {' J4 Q* w* P- o3 e3 b
        }# X) S+ F  l. }; q% ~
        if(0 == length)
/ F* o! N2 T, Y& m' `        {
. P( Q8 }7 ]6 [0 X            // 禁用发送中断, B5 c# _" U4 k3 Y2 o
            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
9 _# J' c& I3 Y) B# ~        }
$ d9 c- e) X/ V8 D  [. O& M     }/ n3 A1 F" w- P0 V. s2 p+ j5 e$ b6 C) S
    // 接收中断- |, V. z- H& M
    if(UART_INTID_RX_DATA == int_id)
0 W% v- h" T/ s  X/ w# u- J4 K) y    {" y/ Y3 e7 @- n! b3 Y$ V5 C7 j0 o/ Y
        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
0 a- V: B" N% }" L, y        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);. J0 M1 f8 q& e# g, s7 o
    }
& D# H  o1 P7 z. l& u    // 接收错误
( B0 d: u/ O* }4 `! L9 e& d    if(UART_INTID_RX_LINE_STAT == int_id)
2 Y) P$ C2 h* l) O    {
5 ?3 d$ c- u; O: m+ L; R- M        while(UARTRxErrorGet(SOC_UART_1_REGS))
, B* d0 s# B1 ~7 u8 y- G: [9 V        {6 Z: ^) `; i7 |, @4 w
            // 从 RBR 读一个字节
5 G' F: Q0 l# r            UARTCharGetNonBlocking(SOC_UART_1_REGS);% s% ?. h4 d& T& Z( {/ b
        }! _* U' R# K$ U! M! [7 T' }9 @
    }5 c2 H2 I- [* \# Z  q, w
    return;5 f; i5 K/ e6 ?" [7 v% @
}  ^4 ]% j3 h" G  n3 d
Int main()7 D4 R) _" K* Q" i: \
{ $ x2 i/ V7 q/ Q+ T
UARTconfig();//uart 配置$ }9 R$ E! x7 \* l- a: @4 d3 Y0 ], ~
    Error_Block eb;# |3 |/ R$ {3 L, v# Y
    System_printf("enter main()\n");
) I) f3 C$ C2 S+ R    Error_init(&eb);0 J6 l; @+ a( j& |6 K+ P. a
    // 动态创建硬件中断
- l4 _* _3 J. @. E+ l    Hwi_Handle hwi1;
% j" T: C/ S/ e: v( k    Hwi_Params hwiParams;
7 |$ D3 M9 K" \: T    // 使用默认值初始化参数: g% B- G9 _8 I) Z9 {# ~0 u
    Hwi_Params_init(&hwiParams);
# V- S3 J4 k: S: @0 f: B% k    // 中断事件
$ j; }" L) ~8 C/ Y* s0 Z    hwiParams.eventId = SYS_INT_UART1_INT;
' e, I9 `/ U( u: S    // 传递到中断服务函数的参数
0 a2 b6 l9 m. `  B  }3 V7 m    hwiParams.arg = 0;; D3 ]: g( Q' }8 ]4 M: A4 P
    // 不允许该中断自身嵌套/ ~" H* W( F  k/ f- \3 ?
    hwiParams.maskSetting = Hwi_MaskingOption_SELF;0 ^' q3 x% y7 I" l+ G' M# q# e) M
    // 使能中断
& Q- N) ^, x' Y+ d/ U0 Q    hwiParams.enableInt = true;
6 t9 @! A2 [- t    // 可屏蔽中断 4
1 c( g4 ^2 g0 L    // 中断服务函数 hwiMain
* w/ Z, {6 C) e1 `6 ]    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);
7 z& b) c% \, d" z    if (hwi1 == NULL)
2 {* o6 E" ^5 S9 \/ [! o! m        System_abort("Hwi1 create failed");
- w( s% l- h5 q" [, U8 X/ f7 `" j    BIOS_start();    /* does not return */
1 L+ `& |) w2 g3 b; E    return(0);
& G: O+ j* ]6 I& h2 l1 `) w3 Y}
& y& P9 F9 e# t3 n# a+ i/ F6 L& U( M/ q' o3 |5 Z+ b5 Y; i
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49
& Q& S1 d$ E1 ?% @5 J在中断服务函数里放置断点
' s2 E: m7 A' z  c9 y; b
参考 GPIO_KEY1 |5 `& y- r% M, T+ _' G" @4 @' M
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点3 e  z- g% V2 G9 Q: O6 L
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?: F: c: x# r0 b- n# Z! Q0 y
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-2-6 08:50 , Processed in 0.043304 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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