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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下
3 _, |. `! Y+ Y// 发送缓存2 @) Z! w  M& H2 n8 B- l1 |9 F$ l
char Send[] = "UART1 test......\n\r";/ ?! a- Q4 _8 |" o# u& ~

2 u& ~$ p: n. C8 ~) G" pextern void UARTconfig()
' q8 k# B6 d" B{  s! |- j( q% M, H: z0 _$ }
//使能Uart1! @" a9 Q1 ?  W" I+ p" O
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
+ u; z- j7 z+ E; t( |( H 6 O# C3 _. h' O5 P/ V
// 使能 UART1禁用流控
& ?4 j. N1 N4 D6 {! n: q UARTPinMuxSetup(1, 0);
3 ]2 w, m( W2 [  {2 y 5 b8 c: A2 m) \( K+ h% `' H
// 波特率 115200 数据位 8 停止位 1 无校验位7 u- o" C3 N5 I* J5 l
  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);  V+ d7 f) X' F( Y* H* v

2 }- v; v0 \7 k; H2 n6 @4 Q; ]( ]  // 使能 UART1
/ ^" X+ f( w( t9 V UARTEnable(SOC_UART_1_REGS);: Q" y3 l- N2 y! i; _: y4 n+ C
  // 使能接收 / 发送 FIFO  q5 [9 o* H9 i2 _% f! |: Q& C
  UARTFIFOEnable(SOC_UART_1_REGS);" W* I% u8 a3 z; O
  // 设置 FIFO 级别* v( c0 D: |$ g, J4 U# M
    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);' n2 z# n9 M8 w( ^9 `  @$ r
  //Uart1中断使能
  y' c6 w- x( _  unsigned int intFlags = 0;
7 f$ k) ~$ y. ?5 N# E  intFlags |= (UART_INT_LINE_STAT  |  \; s% `/ [9 j7 O+ h5 ^3 v# y4 V! }
            UART_INT_TX_EMPTY |    \
7 S) f, w2 d/ E) ^* {            UART_INT_RXDATA_CTI);
& J6 M  l) a- \8 ?7 Y3 R+ g            
3 I2 h/ E. m4 S3 `' i    UARTIntEnable(SOC_UART_1_REGS, intFlags);4 q) X9 E* y- V! k
}
* Q2 N; f0 d6 P( S, g: |% |2 w* _//UART 中断服务函数3 p8 k; i% e; m' w8 ^. e/ F4 n
void UARTIsr(UArg arg)
8 [. O/ b# u1 _; i% [5 k/ |6 V{# a. y' M" M/ ~2 ~& w) R% N" Z
    static unsigned int length = sizeof(Send);' o) c! q  G% p, W7 N
    static unsigned int count = 0;
6 C8 Q7 C) t  R2 Q* p6 z4 r( w/ [    unsigned char rxData = 0;+ N# o& k& o# T) ^
    unsigned int int_id = 0;
! |  j+ @' F: _6 C" k" m- `    // 确定中断源) @4 f1 R0 ?& I1 a+ Y, M
    int_id = UARTIntStatus(SOC_UART_1_REGS);5 Q- ]( b! |; ?$ y& n
    // 清除 UART1 系统中断
  G, t. z( o9 C3 @# Y4 Z/ }    IntEventClear(SYS_INT_UART1_INT);
# g% V$ Y. z) o+ Y3 U% i5 ?    // 发送中断
6 B5 g% F" A6 ]5 @7 n    if(UART_INTID_TX_EMPTY == int_id)
! z7 R) k9 v! C7 t    {& A$ w8 \3 \# U8 D
        if(0 < length): m1 n3 @# q/ i. d
        {0 H' p4 W% }8 M# b0 G% x- Y
            // 写一个字节到 THR
9 b) d+ ^# Q9 n# ^            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);5 a9 u* B/ s$ V; D
            length--;3 n6 h9 b# A5 z( A% c
            count++;$ A' Z  ?# S" e6 X( }: d& G- q
        }# r/ Y' I% [2 r+ a
        if(0 == length)( l0 m1 |3 ~2 X/ R; a0 n  P5 S6 x
        {
* X* L( w! J& \$ d% y2 v            // 禁用发送中断) y8 _/ N7 V) g7 x
            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);# K3 S) r5 P0 O4 N2 H
        }3 Y4 s+ P; l5 b* H* U4 V- q+ H( }1 h
     }' Z/ d0 ?) t/ i* `( x2 ^
    // 接收中断
! m7 Y3 N+ T7 r4 w; L0 {    if(UART_INTID_RX_DATA == int_id)
8 F% x9 ]& Y! N$ T5 L4 c    {, V/ s/ ?. P2 E& V! S/ \
        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);3 T" Y/ |8 |) r; d0 }5 H2 R* [
        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);6 ]2 S' K! U4 Z+ {: x4 n
    }- ]5 c* G3 B+ S# A$ u  @( c; r
    // 接收错误& O" }& L- ^3 b9 b6 Y0 d4 z
    if(UART_INTID_RX_LINE_STAT == int_id); K) D( r6 ?: v0 ^
    {9 ~% T( a2 F6 G1 a1 `5 U
        while(UARTRxErrorGet(SOC_UART_1_REGS))
( B! C& T  W% R4 X        {
5 G; s. E2 Z- h3 T! ^            // 从 RBR 读一个字节: Y8 z0 `* `! s" u# y
            UARTCharGetNonBlocking(SOC_UART_1_REGS);
7 h  O0 i  l# S5 C+ s8 K        }: [) N" r+ }9 C8 _) m% Y! ]
    }3 F5 v7 t( B& ?+ k1 g5 w5 L
    return;
' s" h- ^: l" c. k4 [; ~& y}# O; `+ S5 F3 t2 c3 ~( c; u$ S
Int main()1 p! H7 Y7 F* M% y
{
: X: ~) Q7 P: m$ `: y- k8 z+ h5 f UARTconfig();//uart 配置
7 n2 L9 Z" N1 A/ j8 a    Error_Block eb;
2 w1 [, j5 ^" O3 @6 U6 m! k    System_printf("enter main()\n");8 G& n$ w' L9 I2 P
    Error_init(&eb);
% R' j+ w% L5 s    // 动态创建硬件中断
( K) u1 x: B2 s$ Q    Hwi_Handle hwi1;
5 T3 U, g; @9 \9 [+ ^% R) }  h    Hwi_Params hwiParams;8 @6 d6 J$ m2 M2 u% j- C
    // 使用默认值初始化参数
" l# Q) o5 X8 v6 k" a  }" x' _5 x    Hwi_Params_init(&hwiParams);; }3 R/ N: o# [: m9 P
    // 中断事件+ [( j! G: d/ F/ y3 c) q
    hwiParams.eventId = SYS_INT_UART1_INT;
# u! z  U" C& ]4 Y: X. O6 t    // 传递到中断服务函数的参数
+ W0 B$ }/ M! v4 p+ S6 v3 n    hwiParams.arg = 0;
& K+ _6 w; V- O# ^0 e    // 不允许该中断自身嵌套
/ d. M% k, {+ B    hwiParams.maskSetting = Hwi_MaskingOption_SELF;" X2 l9 i' Y$ Y' X
    // 使能中断% {+ J( E2 K- Q6 Q: W& L6 L
    hwiParams.enableInt = true;- j0 S0 H9 J' O( H  ?
    // 可屏蔽中断 4; h' m& D) y( d, \, E; w1 a
    // 中断服务函数 hwiMain" R& ?: P$ v+ `! c
    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);$ C$ t0 G4 {) @3 G4 W" o8 N0 m
    if (hwi1 == NULL)
/ R7 w. t& |" Y+ [+ R3 t        System_abort("Hwi1 create failed");
" R9 a+ I9 F* }6 D1 }    BIOS_start();    /* does not return */8 G5 K% g6 Y, E. i" ]! V( f1 y
    return(0);+ ?2 p$ `6 E  U: L4 ^% w$ c
}
$ ?# x; B) [$ }4 N$ M5 i3 X3 Y5 _! u
分享到:  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
4 H5 s6 }  G+ }" x# E在中断服务函数里放置断点
$ \* \: J$ v9 Z/ D# [# r
参考 GPIO_KEY
  O; Q( _& i: D! F( z9 f
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点, g; R$ R6 Y: C! u: R, i7 ?2 ?
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?2 Y" m: N( P0 J/ @3 f+ U# f
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 19:53 , Processed in 0.039859 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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