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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下
: E: l# b% p* M$ m3 d// 发送缓存7 F" B7 f0 s4 e$ e* ^: g
char Send[] = "UART1 test......\n\r";2 [# f9 j1 \4 c" i1 P. O  [: p/ M( [9 e
6 F/ v1 a, ^+ h2 e  m% W2 |# B8 z
extern void UARTconfig()
4 o* ]4 h+ W3 W# H( \{
& P3 x" H/ j. D, ]% @2 i //使能Uart15 _; S7 C, Z* ]* A3 F+ Y3 e2 A6 n  o, {
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
- f1 Z; J( M" ^4 J6 p5 p
+ K) {7 m5 l+ J0 I$ u5 N7 j // 使能 UART1禁用流控
- T: @$ p- R. M* ~: Q7 a7 _ UARTPinMuxSetup(1, 0);( @/ F  O" L; M( k

) A; L9 V2 V8 [3 g4 \! J* ~ // 波特率 115200 数据位 8 停止位 1 无校验位
! W3 `! w" o6 |+ g" t5 m  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
: f6 M6 g0 S8 b) O# i4 ~/ r
. V! x& s1 R9 K, Q  // 使能 UART13 `& g% U5 Y1 V# h& L) T
UARTEnable(SOC_UART_1_REGS);
1 \; R7 e: ~3 f# L) Z  // 使能接收 / 发送 FIFO
3 }9 Z2 {& O( ?0 j5 Z+ T* u  UARTFIFOEnable(SOC_UART_1_REGS);# n$ e* E; Y( T
  // 设置 FIFO 级别: A0 a0 y" w" P  r0 U% }
    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);# i& e6 g' U& f$ {+ T; @$ P
  //Uart1中断使能; w7 d8 a# T2 w5 b
  unsigned int intFlags = 0;0 p* K3 G9 }6 y; P
  intFlags |= (UART_INT_LINE_STAT  |  \
& J2 B9 |1 s/ w- ]: |1 ~            UART_INT_TX_EMPTY |    \& a, x, s/ i& {1 L" s. e& B
            UART_INT_RXDATA_CTI);
0 u+ e( _1 K1 C8 P5 `9 Q8 Z$ a            
: l4 B: D, I& A7 |4 c* x+ h% o    UARTIntEnable(SOC_UART_1_REGS, intFlags);, {- |) n) S7 u; t& q" A
}  g) L# o% D3 [4 g) V4 h) q
//UART 中断服务函数4 C/ n2 W- x) m8 e1 V2 {- y; Y: Q7 s3 {
void UARTIsr(UArg arg)! V# c1 H6 U$ o; n, C
{
3 w* ?: L& n& }% t: |& t    static unsigned int length = sizeof(Send);
' D4 B+ G' ~" V. n; R& A, q    static unsigned int count = 0;8 s  F% C' I2 O1 l% e+ r
    unsigned char rxData = 0;
- ?$ g8 Z+ M4 t, @2 A3 v) d    unsigned int int_id = 0;
/ U# Z3 Y& _- s: r. Z# f4 y    // 确定中断源" v9 C4 R( }% y+ M' h  T" y. C
    int_id = UARTIntStatus(SOC_UART_1_REGS);
8 [: ]  K' g% Y) k9 R* K, F6 N& A3 e    // 清除 UART1 系统中断# |" |0 l% d" X$ W' l
    IntEventClear(SYS_INT_UART1_INT);
: K' s% {0 }+ E. G: z$ L  N    // 发送中断
7 H! t  f, q. o+ |- g    if(UART_INTID_TX_EMPTY == int_id)
$ t) y  T( D$ `/ c$ \) c2 G+ B    {8 V- X) s/ S8 p5 [; A
        if(0 < length)( p% }- A8 H1 [. F, \: E
        {3 b, c& k$ B$ t
            // 写一个字节到 THR
1 q5 I" B4 F  i1 i! o! S            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);- X) E. S2 x5 A
            length--;
% f# A  C3 C  Z1 A# `2 U; Q* f. o            count++;
: p7 K5 N" {9 j* ]        }8 W$ b( L4 J5 y/ q5 @, B* S
        if(0 == length)
5 A7 \( k  }8 P' n, H' e        {
8 d/ b( E7 w: S. z/ X3 @            // 禁用发送中断
. S+ w8 [5 t$ ?% g3 M            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
% ^7 M( B. a! M9 F0 q        }) V0 X$ T  H, i0 S/ ?8 m" I
     }
8 t. M8 u  P8 b5 T8 g5 U: f    // 接收中断2 K5 S4 X7 d4 B3 x! m+ Q
    if(UART_INTID_RX_DATA == int_id)6 u( H8 j) ?* s% E; h8 v
    {4 S3 ]4 K7 M9 ^: c  k
        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);. M& T# \  f9 T, i6 N
        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);' I& r$ I9 M' L& ~2 {
    }
1 f5 ?! u' t* f$ K, |) o    // 接收错误
' N, x% S5 _3 ]8 p! F! {5 V    if(UART_INTID_RX_LINE_STAT == int_id)- A1 M6 {2 p' H3 c9 j" ~
    {0 @' h& e# F' T: C& a' }. [; K+ e
        while(UARTRxErrorGet(SOC_UART_1_REGS))
9 Y5 B' D* N5 B! N% Y        {
( M  |4 G  y% ]            // 从 RBR 读一个字节
2 o! _+ r' L5 {& ^; ]            UARTCharGetNonBlocking(SOC_UART_1_REGS);
' f) ?! w2 C+ w1 E' L        }3 u" ^* Z' o/ Y9 e* A
    }
7 a4 S2 x7 p. Q    return;
+ N8 H% w& K4 R" y}
  I) v- j+ r" _  L1 Z0 B. j" A8 _Int main()
6 L  m. M2 H# H/ `3 k{ . A0 k5 q3 g# X7 [
UARTconfig();//uart 配置
( S# k4 @2 u* o) x* z& H5 f! b    Error_Block eb;
3 w5 N3 d+ v) a& g# N    System_printf("enter main()\n");# j% c% K9 P9 z- G8 s
    Error_init(&eb);
' L- ~9 m/ s, g7 h# t( K    // 动态创建硬件中断. a7 g5 u! j" x
    Hwi_Handle hwi1;0 V8 W" N4 Y, ?: a, T
    Hwi_Params hwiParams;8 e& Q) @: o$ V) R$ s5 P% Z2 }
    // 使用默认值初始化参数, g; D1 c9 ?  s/ l& ?/ t0 t$ Z0 }
    Hwi_Params_init(&hwiParams);  I: X- x& u7 p
    // 中断事件) j, C* q2 g" ~( u: b
    hwiParams.eventId = SYS_INT_UART1_INT;% _1 }0 q! n; I7 @, Y* v: d
    // 传递到中断服务函数的参数: \: W+ j3 X6 _* Y  y
    hwiParams.arg = 0;
+ |( o5 A. B% V: H% j1 Q* c7 `    // 不允许该中断自身嵌套# G& M  \4 c5 U, @
    hwiParams.maskSetting = Hwi_MaskingOption_SELF;
1 L0 G% ^; q: P5 K2 j    // 使能中断- c$ o6 v7 [3 v3 f: k- p+ E( {
    hwiParams.enableInt = true;3 B' f; F1 o8 ]: Z& j
    // 可屏蔽中断 4
7 B' g1 a" V5 ?5 V( z0 y    // 中断服务函数 hwiMain
. u( R6 `5 l7 p+ }1 N( U    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);
# g5 ~% D- B/ o1 O) u2 B    if (hwi1 == NULL)
/ l6 n6 D0 Y$ b5 K. c5 l- H8 K        System_abort("Hwi1 create failed");" f* k& x$ m2 V5 n7 Q, I
    BIOS_start();    /* does not return */1 n; M/ Y/ _3 k, Q2 z1 H5 }1 N
    return(0);
$ B1 s" R0 U8 s& Q/ D4 f* C/ l}/ W$ M8 F4 a) Y6 E6 a$ X
. v5 ^7 p* B, w+ M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?. @& r0 C1 F% A
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点
+ r2 ^1 ~7 b: B
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49
$ d- l4 T# ?8 `$ n' K7 @" M& i在中断服务函数里放置断点

( D- N/ Z4 I6 ^2 D) H' w- j参考 GPIO_KEY8 U# V! B8 E* B8 F5 F! l1 F4 U
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-6 00:12 , Processed in 0.038858 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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