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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下9 M, a/ F: F3 k8 E$ A1 _# _
// 发送缓存
" i7 I  t3 w/ M3 F) Y1 H$ qchar Send[] = "UART1 test......\n\r";
: g; J' a* r% p4 t  D) _6 J. r
+ W3 J) {8 @% p1 `- wextern void UARTconfig()
& k& R$ v1 L% d2 b2 a{- |; I/ k: \/ Z7 y+ I1 z0 {
//使能Uart1
; a& e- z+ f* F6 U4 B' ? PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
4 t6 H: \5 r" ]& J6 r9 _7 L
; D2 {6 e( v9 M+ } // 使能 UART1禁用流控
1 g) Z+ ^! Y& e" j4 g2 [" V UARTPinMuxSetup(1, 0);) q$ v0 u9 `+ A8 U* y, z7 V" e
0 _9 C5 c; k  B
// 波特率 115200 数据位 8 停止位 1 无校验位
" u4 D' o- @: J2 B6 q# r- ]) K  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);' \) j% f" }  N2 T
- \+ |" L7 f# e6 V# ]& W
  // 使能 UART1" M1 h9 \& X3 c. ]9 n: ~  m
UARTEnable(SOC_UART_1_REGS);
  P; |+ B9 U$ y- I+ M; A& g, W  // 使能接收 / 发送 FIFO  ^8 y9 W. F# |
  UARTFIFOEnable(SOC_UART_1_REGS);
9 N  B) G; w% O- Z) }3 b  }7 I  // 设置 FIFO 级别
+ f% q6 T/ u  i7 n    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);$ U- c; j; `  K8 d, e. Q
  //Uart1中断使能
1 ^1 `7 o# F2 n4 B. s  unsigned int intFlags = 0;( r( g4 }/ i$ G; ?
  intFlags |= (UART_INT_LINE_STAT  |  \
: M. O/ x) ^6 O, Y6 L8 x. }( m6 M            UART_INT_TX_EMPTY |    \
$ K' b2 _8 v& X6 A! M7 }2 }# P2 {            UART_INT_RXDATA_CTI);* u- \. l# c' d
            4 B7 T8 e: }, J3 o8 v3 U
    UARTIntEnable(SOC_UART_1_REGS, intFlags);( _3 _3 C7 ]7 L. O! T
}
" W& Y* E- f" g# x0 d0 K+ \1 i, c) j9 n//UART 中断服务函数
, z" c; o6 k" S+ G5 evoid UARTIsr(UArg arg)) K; [- E  l; Y' O' O% K# Y  E. s, z- u
{) Q9 t8 ?. u/ Z7 ?9 L
    static unsigned int length = sizeof(Send);0 e$ d. ~; w' T2 V* t3 k6 ^. X
    static unsigned int count = 0;
( U! c8 W& z. `    unsigned char rxData = 0;
+ D- n3 E; a6 |* |5 M8 K) A    unsigned int int_id = 0;
8 \2 l, |( q, m  n) [# _    // 确定中断源
" v9 s3 R7 m7 J3 g( l# w+ f( W; H    int_id = UARTIntStatus(SOC_UART_1_REGS);
8 l* }& K6 b0 x; A    // 清除 UART1 系统中断
3 ~/ H( h4 a1 \1 R, \, F  i6 u) V    IntEventClear(SYS_INT_UART1_INT);% R  |" r. X  J. B
    // 发送中断
2 S1 `; @2 q% E9 [    if(UART_INTID_TX_EMPTY == int_id)0 l& \( @* B! H+ a7 o" Y; X
    {& \% G3 h1 i* _' U
        if(0 < length)$ ^7 S# I: c9 J, z" l
        {
/ {4 e- M; u$ U' t! R% f            // 写一个字节到 THR9 Z' A+ Z3 T5 a' O! H$ W
            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);/ d# W3 F- |/ W9 l) Y
            length--;
) B" |! ]7 V6 r- ?4 ~            count++;
3 S! W2 s; H5 _, J        }
3 a! K/ z8 Z: q* b) q4 n5 p0 k        if(0 == length)& z6 W- C9 D' ]0 F1 {
        {' H/ u4 ?+ f6 s# ^5 Z& ?$ M
            // 禁用发送中断
3 L! i7 z2 |( ?, w2 t8 G            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
( @3 B) C% H" C        }
' d5 f& V. T9 N     }
  c) E; R: a5 |9 [; v; S: q) I; N    // 接收中断+ ]. t0 h# I) [3 w3 J0 o
    if(UART_INTID_RX_DATA == int_id)8 n6 `8 Z- k. L# w6 T  h8 l. b
    {% q& s" D+ o0 E7 H% {
        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);( M" K/ ^- i! t% f) p; I
        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
0 h5 A2 B- X/ E& ?1 U    }
0 t2 d3 C, {! n9 L* D5 o0 }% j  d    // 接收错误
- _/ t6 ~# _( K* m    if(UART_INTID_RX_LINE_STAT == int_id)* J2 b  {1 R  Z! R1 c! B, }
    {! [+ ^1 Y% c' X/ R. Z7 J
        while(UARTRxErrorGet(SOC_UART_1_REGS))9 |2 \' [: d( K# z- ~( {
        {0 B* {7 W, N& B. d$ V; E) j
            // 从 RBR 读一个字节: z+ u, V7 w( y# g5 ^& v
            UARTCharGetNonBlocking(SOC_UART_1_REGS);% y3 b- c2 A2 d7 D
        }
0 Q, W- J/ ^& I' C    }
' v$ v2 ^' L' m3 X    return;
2 _8 x* }( M0 \1 _" L$ v  ]& k}
; e) A2 O( Y! G) @Int main()
4 P+ `* h+ f  e& P8 X" a# Z  Y{ 7 K* q6 l1 T6 K3 [0 n% H
UARTconfig();//uart 配置  ^& B5 }# S7 D4 {
    Error_Block eb;
8 _7 h) W; v: {, t: T# s& @    System_printf("enter main()\n");1 Z, {1 y# }% d; I; x7 L& e
    Error_init(&eb);
& [5 i4 z; \5 Z) F6 S    // 动态创建硬件中断0 C2 x& X  E4 X2 d0 h: x! [7 ~; n
    Hwi_Handle hwi1;
; S1 z/ ^8 k- G: P, V/ E( h    Hwi_Params hwiParams;# Y# T4 {* e% b* n6 j' z! Q% M
    // 使用默认值初始化参数
: v3 r. B8 J" d    Hwi_Params_init(&hwiParams);
" {  W  `" }; e) O4 L/ `. G. w    // 中断事件# r; @1 ~' `, g9 }7 l
    hwiParams.eventId = SYS_INT_UART1_INT;
  x# ]1 V" p( a4 E    // 传递到中断服务函数的参数
* N% _) i* k. Z8 ?    hwiParams.arg = 0;* T2 i4 v+ W9 t  {* f
    // 不允许该中断自身嵌套
. W# i5 c  t$ ]8 r2 P) v1 d    hwiParams.maskSetting = Hwi_MaskingOption_SELF;1 f$ [5 Z9 y+ `3 n# x/ J# F
    // 使能中断2 l7 h& Z* N/ ]# P3 I: x
    hwiParams.enableInt = true;; e+ Q# b3 M9 x; {
    // 可屏蔽中断 47 E/ }' u% }- i. p4 ?/ j
    // 中断服务函数 hwiMain# X' I4 F" w! _
    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);
) A: [. s1 z% f! K: S+ b    if (hwi1 == NULL)
1 k* W- o8 b+ q        System_abort("Hwi1 create failed");
' o0 l5 p; y; U8 z3 r: l3 O    BIOS_start();    /* does not return */) P% Q5 o5 [: U4 n
    return(0);
8 g9 n7 g. d$ t8 x# B8 a}
# p4 n# @, z7 n; k: G0 U' I: ?( H3 B7 K7 M1 p( B" F0 m# l1 x6 |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?/ H! `+ v! h5 H5 S' {9 U, I( V+ g2 h
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点
1 T) s- J8 s4 N4 S
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49
/ }8 |! `. }2 l; D在中断服务函数里放置断点
2 w  |, s4 O  j, `! a; z  n4 ]" m
参考 GPIO_KEY
% e) E6 E' {* N& J" F
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-16 03:30 , Processed in 0.039341 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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