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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下$ \: l! ~& \4 F4 T' q5 h, ]5 O
// 发送缓存
3 l3 ^  c. I+ Hchar Send[] = "UART1 test......\n\r";
; _0 K5 T, N" Y2 j3 ]. b! f% T: M. N% a& {5 ?+ ^
extern void UARTconfig()3 u: v+ Z" L  s" P; o7 @
{
4 [. K6 P  M- }; E( M, [ //使能Uart1; e% n( |8 {4 F2 a" k/ O# X
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);% w, o+ |* _% W; h- }
% o6 H  L7 W# D; b; y( F1 `9 \
// 使能 UART1禁用流控
# f' H. M* }9 c1 C6 d UARTPinMuxSetup(1, 0);
- u, }, O* o' h) G$ l6 N
* |& ]% H- ?" D9 C/ ~; v // 波特率 115200 数据位 8 停止位 1 无校验位
) d. p0 r) f- Y3 v, v  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);6 F' w7 a5 j5 L* ~( \0 w$ P
/ i. C/ m8 T; H- V% d9 ~
  // 使能 UART1
6 c. O8 m3 P8 }! m UARTEnable(SOC_UART_1_REGS);& x; y9 w1 y* s+ n/ z; K7 g! z- n
  // 使能接收 / 发送 FIFO
/ R; x5 v- `2 q& Q' }5 g8 X) J  UARTFIFOEnable(SOC_UART_1_REGS);- z5 N, |$ I& Y  Q3 X  S
  // 设置 FIFO 级别
, n  t3 d2 f* l1 e# S5 F    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);0 n8 l9 U/ w- H4 M7 e) r- `, B
  //Uart1中断使能  q4 R" e5 W! a, x# X
  unsigned int intFlags = 0;
& N9 Q6 s% s9 K0 _9 G  intFlags |= (UART_INT_LINE_STAT  |  \+ r4 d4 ~6 v- [: P! l  Z
            UART_INT_TX_EMPTY |    \
/ W1 D% w( z. r/ b9 T            UART_INT_RXDATA_CTI);
0 w( h# @6 u; V) @: Z" V- a            
5 i3 D# Y( W* \2 {    UARTIntEnable(SOC_UART_1_REGS, intFlags);
$ S) U) t9 q$ \# m; U' w}
) _, L0 V; l' u* r: G& z//UART 中断服务函数
& M  M8 Q4 d# |2 i1 t  jvoid UARTIsr(UArg arg), O5 b7 P6 \4 D) T' Y
{
+ @. a0 L0 I# Y8 k5 z    static unsigned int length = sizeof(Send);
; ?; f. x7 r# t$ ?3 y    static unsigned int count = 0;
. \1 o# [( E2 l4 T" G    unsigned char rxData = 0;
- v1 ~- o& ^6 V: ~3 K  `    unsigned int int_id = 0;9 @4 r' \3 f6 }4 j8 g8 g
    // 确定中断源; `+ j0 E. Y$ H) n1 \% b
    int_id = UARTIntStatus(SOC_UART_1_REGS);
* t9 r* u7 h$ _( v' P( l3 [    // 清除 UART1 系统中断
! s1 O, D; p9 B" H    IntEventClear(SYS_INT_UART1_INT);
8 a3 f8 m, a5 `% r. a4 V4 u    // 发送中断8 E4 J% Y* Z0 ~6 I* I
    if(UART_INTID_TX_EMPTY == int_id)
$ q, J* b1 y1 y' h7 m- B4 V8 U, H0 I    {1 _3 y% l+ O9 J3 ]% [+ ~. `
        if(0 < length)
- I% D0 e# K7 v: R& n/ O        {
: f! i; e9 S8 j$ m) {" m$ s            // 写一个字节到 THR
: D' U# n& R! r" t/ v- g. F: v0 ^            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
; p8 N0 G$ D1 A" R" z$ _$ H9 ^2 f            length--;
, n3 p- |$ K6 |# S  W            count++;
. j4 l) L$ t, L0 D: \& f" Z! ^        }
& L  d! @. B2 l' W        if(0 == length)
4 I0 q1 s' }3 m. b- [0 n! K        {
/ D- E: J, p1 j            // 禁用发送中断
% c/ u! w/ D0 U7 ?/ E  G( @: {2 \            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);, \) {4 s# d! Z( g8 @
        }" r/ v; X) H! o* ]: g
     }
+ Y8 Z, W4 _8 l6 e/ P) b    // 接收中断
# f: P3 H% z  k8 a8 f" J5 _  G2 N! e    if(UART_INTID_RX_DATA == int_id)% s6 x. V  G; N" G8 Z& k! j
    {1 g$ J0 T, ~. Q% v& ?  ?2 @
        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
& Y( m# c* D7 {" \1 l8 ^        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
5 w/ p# h# M  C3 T+ F    }
* s: Y7 A, K- F, S# u- s+ I9 K    // 接收错误
# Z. u2 O& M, k  u9 ]9 R    if(UART_INTID_RX_LINE_STAT == int_id)% m6 m1 W8 _6 R( _& A
    {) ?# Z$ N& p1 x7 D3 f  @
        while(UARTRxErrorGet(SOC_UART_1_REGS))
# H3 q3 `6 _. ^4 C! K' r8 U        {
" C4 x# i) P: ]$ h/ E& D! F' C+ O            // 从 RBR 读一个字节5 q; }! P; u0 Y- l6 W9 n* z& K
            UARTCharGetNonBlocking(SOC_UART_1_REGS);
. n# s4 E3 U! O5 n& D1 ^( s: c        }
: D$ @; w" z5 ~7 D4 ^/ O    }
6 _4 |2 e, z( r  G& ]    return;
# V) t7 W# d8 B% U7 k: _3 k}
$ y6 b1 n0 s% G! E1 W+ B$ @1 l& A3 SInt main()
* j8 s/ _9 [4 X0 I' y. t{ 7 @+ E( g/ B) ]
UARTconfig();//uart 配置
8 f3 K" @6 a* N. A- z! H    Error_Block eb;
8 T7 A5 \9 v2 l! Y+ d; j; Q    System_printf("enter main()\n");* y" e( e( C7 b2 k1 Q
    Error_init(&eb);# P  g1 r! Q' }# i* L- p, b4 q
    // 动态创建硬件中断+ p1 I* R, d5 `
    Hwi_Handle hwi1;
3 \- ]1 u4 B7 h+ f1 L+ A, w    Hwi_Params hwiParams;
# f0 b& L, J" z) c, g) X    // 使用默认值初始化参数
! M8 r& a' G4 l    Hwi_Params_init(&hwiParams);/ O1 _2 b9 I0 c1 {9 C5 C! y* w- q
    // 中断事件1 v1 W, g+ r% |8 `
    hwiParams.eventId = SYS_INT_UART1_INT;8 S- \" G! d# l( M* v( `( D
    // 传递到中断服务函数的参数- H. L2 l. ]: k& z# U/ r7 _  U
    hwiParams.arg = 0;% T2 g2 D& `- a" G% D
    // 不允许该中断自身嵌套- V; |% l4 D- T2 G8 n3 I0 K
    hwiParams.maskSetting = Hwi_MaskingOption_SELF;5 k  ^+ E/ @& d! ]& i6 e& V
    // 使能中断
" h& g( s. [* q# |5 _6 F5 `! I    hwiParams.enableInt = true;
$ S6 L" o' `7 T* N2 B- p6 u4 i( j8 F    // 可屏蔽中断 4( k+ _* c  e& X8 m4 c1 u6 ~4 C( S: w: y4 Z
    // 中断服务函数 hwiMain- ^) W0 ?( f- P2 F8 _8 g
    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);
/ w8 C7 r; }/ y- V) K( d    if (hwi1 == NULL)
4 o+ S7 X( h; M4 G" O4 T        System_abort("Hwi1 create failed");5 m8 t6 a' \$ t* E
    BIOS_start();    /* does not return */. ^* {; v% D  h7 W3 l0 p! S8 p; N
    return(0);; [8 R; X5 f! i- }1 j0 N2 k
}
2 w# q8 u  u5 ]7 U, p: l
7 w$ N2 r" {. Q- C
分享到:  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
: G/ P* n, t) h  G$ k/ H2 P# a在中断服务函数里放置断点
# z% v; C2 H$ B  |
参考 GPIO_KEY: m) l0 j! k; d! }
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点
. W- S1 {" Q7 J+ J! p% e* J
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?; v) \; r3 {3 B
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-16 01:48 , Processed in 0.041645 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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