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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下
( x! x5 g# D* h8 i' t# Z// 发送缓存% V, w5 H) n9 S4 l$ G  X
char Send[] = "UART1 test......\n\r";6 _# q; Q, e; x  v0 E
: k+ [* w3 Y. u! L+ t6 h6 S
extern void UARTconfig()( T  I3 ]4 K, w* c' {1 u2 Q
{, a! u* C, K% f5 X% t; B8 g, m
//使能Uart1% ~; v7 {# o" S8 X7 x; n: N
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);3 P1 f2 @( w. f% a

6 B; j8 M$ {! F/ L; ?' D: a1 W, ^ // 使能 UART1禁用流控
" X$ |4 J5 i' O7 I. Z UARTPinMuxSetup(1, 0);
1 v! X0 }5 w, q0 a% E
( \: e$ q7 }3 Y7 r5 b* [ // 波特率 115200 数据位 8 停止位 1 无校验位: `( l+ p, P# M
  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);3 q4 R* _) r1 D3 ?9 E9 d; C. D9 t
/ m/ Z; {0 p1 `/ n  z" W
  // 使能 UART1
) A% L4 O6 |) S, u. U' Q UARTEnable(SOC_UART_1_REGS);' g4 m- r0 s; e  W
  // 使能接收 / 发送 FIFO
2 H, ]! u& [  q, s* ~$ {7 B  UARTFIFOEnable(SOC_UART_1_REGS);5 K7 y$ g) [. G' r6 X1 T
  // 设置 FIFO 级别2 D6 L! ]# z2 n
    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);
& L: P1 w6 `; r  //Uart1中断使能* o/ \% m$ ~& G0 c1 Z+ H
  unsigned int intFlags = 0;
9 W0 X( T' ?" D. {. t  intFlags |= (UART_INT_LINE_STAT  |  \8 ]) B7 o$ z. H  M
            UART_INT_TX_EMPTY |    \
; e1 e, `8 j: Q6 G% v; c! c            UART_INT_RXDATA_CTI);- d7 d; a3 o* `9 [5 K) M6 }. T
            
# d; h2 T8 B2 r* b5 c, h% _  O+ ~    UARTIntEnable(SOC_UART_1_REGS, intFlags);
4 g6 q) x" p5 p! n: F/ r}
. c& k8 S' i) ?8 E7 F//UART 中断服务函数& }9 y: r* Y* j& k& {1 U- s/ ~* Y
void UARTIsr(UArg arg)9 [8 q/ A+ {4 d2 g& J. C
{
! g( V' D1 G# ~" s( F7 w    static unsigned int length = sizeof(Send);( Q; G' D! `1 X$ E9 p
    static unsigned int count = 0;/ e% U% V  r$ L3 Y6 G# z
    unsigned char rxData = 0;
0 v! m5 L$ _6 i6 a4 B    unsigned int int_id = 0;9 k( ]( M4 {7 o7 }2 O1 P4 O: `
    // 确定中断源$ c) U$ s" r* K& ]; B' u# F
    int_id = UARTIntStatus(SOC_UART_1_REGS);# u1 [& \' _, U& R
    // 清除 UART1 系统中断" N0 I. S4 ]2 @+ h/ A- I: u7 F
    IntEventClear(SYS_INT_UART1_INT);4 O, s2 g% I; A) |
    // 发送中断9 }2 p% J) _+ _" c% n
    if(UART_INTID_TX_EMPTY == int_id)
) {* F; Q; N5 }5 b) z+ E8 Z" b    {
  Y1 }2 w. m  J4 Q/ H9 B4 w* ~        if(0 < length)
0 R" A/ q9 B: O. \" F        {
/ i+ V* Y. R. u! A            // 写一个字节到 THR
8 P) L, l2 U1 u& X6 ?            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);) a9 U  O3 w2 o/ @, Z
            length--;) m+ ~( X( W1 N- d2 p  W
            count++;
# h: X  V# S% e- e: b0 D1 p9 Z) B        }
" z. l% L# f* Z, U0 q        if(0 == length)' e% j& F; N/ r" D; \" g8 V
        {
+ _. j& S3 b+ ~; z            // 禁用发送中断
# |  X4 L1 {% H" I# N, C            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);% J; X: q7 g, F& N' ^( b
        }
; G  I/ \# S8 k1 q$ {/ A$ E: a     }
& c- o$ Q3 V/ O1 [    // 接收中断
8 s3 r  }0 [/ P) G    if(UART_INTID_RX_DATA == int_id)
* i" U2 V# y0 Z# g" W8 N9 c    {7 G& C1 y/ Z  c( [* W  V7 A6 a. X+ t
        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);: N; _: V% {/ |2 l( L
        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
8 u! T0 E+ O, j' W" a    }
. p6 \2 _% J2 J# M* G  W    // 接收错误7 I- G0 o2 w; o4 \" j& [" h
    if(UART_INTID_RX_LINE_STAT == int_id). A: f3 @) R) @4 d! m# e* P1 b3 X. ]7 }
    {
% _7 P! T$ L  {: ]# I        while(UARTRxErrorGet(SOC_UART_1_REGS))) q5 Q0 t6 f, K  E, T
        {. Y8 c" @$ p7 X# l2 y1 q& [$ y/ S
            // 从 RBR 读一个字节1 b! l: P: j/ Y3 M: v2 _
            UARTCharGetNonBlocking(SOC_UART_1_REGS);0 L$ b! ^+ E) _& ]0 K) Z* W
        }
, x( D6 `  ?' t7 h3 \' x0 d    }  P$ s4 V4 X& u  M0 R
    return;
# x3 [- f( Q0 E  S}
+ \0 z& d# |) B  dInt main()
; l2 k1 e" Q- [" f& `# }, b9 l{ ' T+ P$ ]; I1 L& ^
UARTconfig();//uart 配置
2 Q* M) Z' d# S4 F4 N+ E  z    Error_Block eb;
  T) r& d! f2 S4 ]    System_printf("enter main()\n");
. E+ P+ M5 @2 B* t    Error_init(&eb);8 s# \5 J% V6 O3 i
    // 动态创建硬件中断; }; r5 [& J) _# q
    Hwi_Handle hwi1;" C  b4 ?! k+ _; m$ b( R/ y; |
    Hwi_Params hwiParams;
! G  }! I# d: v0 p, G0 h/ v    // 使用默认值初始化参数
& e6 j/ \8 j" x# s3 s# p    Hwi_Params_init(&hwiParams);
7 ]8 H8 B8 b# _6 o    // 中断事件
" b0 k6 _/ ?/ P" D  v( L: `5 `    hwiParams.eventId = SYS_INT_UART1_INT;
! ?+ j& u7 v5 w    // 传递到中断服务函数的参数; O8 b+ v( Q+ C; ?
    hwiParams.arg = 0;
' F- i0 G. J$ \0 }    // 不允许该中断自身嵌套
7 j- v) D* V8 r% v1 g2 x; c    hwiParams.maskSetting = Hwi_MaskingOption_SELF;% H( e9 C' l6 g/ v4 @# f* E
    // 使能中断5 s2 d8 k- f4 ]' Y$ n# z! h
    hwiParams.enableInt = true;
: Q. M8 y" i( d4 ?, a5 @    // 可屏蔽中断 49 s# k7 |1 h6 d" d* Z: C/ n: Y* [
    // 中断服务函数 hwiMain, x3 k" J! f0 h* w. l3 L, ]3 }4 M
    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);2 W; c0 p% U& i3 W; r& }. E; w
    if (hwi1 == NULL)
0 \  [3 O6 ]; B3 ?5 ?0 ]        System_abort("Hwi1 create failed");% H3 k' Y" e' s9 t1 @) L
    BIOS_start();    /* does not return */
% n/ y% j4 B- O+ Z) I$ _    return(0);+ |8 {9 `# A6 l( u, {# I) B1 p
}
7 J8 R# s9 I( u5 P4 v
( Z! \& [2 n9 @) ~! j  J% Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?5 i; o8 h2 W1 L5 d7 O+ ~" ^
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点
0 I$ A! ^# B% L) q* U, T1 }2 I7 f
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49
$ y2 C: u/ k7 I5 ~& S1 x* `在中断服务函数里放置断点
5 G& X' [4 P9 H4 q
参考 GPIO_KEY
: K4 d- s/ R3 P* z- y$ j+ n
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-4 02:25 , Processed in 0.041201 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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