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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下
# |8 r, J: ^! i: Y" i' `7 j& c// 发送缓存& k% M0 e* i/ B, X2 _$ {3 O; `: D. D
char Send[] = "UART1 test......\n\r";% d: g$ v8 M! p. \8 j* X9 B$ o
) u% [6 m- ]" b. I; O0 B8 D
extern void UARTconfig(); ~" X. l' x$ J: t- @' }
{% c- Y/ S8 M/ F- M% K  q4 u, `
//使能Uart1
7 x* m( ?! }" w  H/ \6 | PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);( {& K! F7 l' Y% |

( E" D( K5 |1 x- s. I+ K& Q+ t* ` // 使能 UART1禁用流控
( [- s6 J* I. F UARTPinMuxSetup(1, 0);
2 w8 ^( S& Y1 p3 A3 w 5 s6 B% m5 e! I2 m* c
// 波特率 115200 数据位 8 停止位 1 无校验位- ], k0 ]6 V2 I' o5 P  N! Y
  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);' r0 T9 A" }1 T4 A- G8 r

( q8 b6 E% W! F1 t  Q  // 使能 UART1
. P0 O  G# L3 {, H" W. l UARTEnable(SOC_UART_1_REGS);& r8 \. B  @4 @4 s4 m, I% J
  // 使能接收 / 发送 FIFO4 S; E% i& x' f
  UARTFIFOEnable(SOC_UART_1_REGS);3 F' U9 }  G/ z3 V9 U/ a
  // 设置 FIFO 级别
' k6 `% J- H$ a$ P! y' |3 U; r! W* D% e    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);
' v2 X( S) L! n3 H7 `  //Uart1中断使能
% O& q& I% L8 h; y4 Z  unsigned int intFlags = 0;4 _( b7 ~8 o0 E. N# S
  intFlags |= (UART_INT_LINE_STAT  |  \
; M+ c* |% c4 C6 F            UART_INT_TX_EMPTY |    \! d% N9 d4 a, v
            UART_INT_RXDATA_CTI);
, X. ^" w0 B- K- H9 W+ j# ]            
5 A6 i8 a! R: ~( e& g3 w) E    UARTIntEnable(SOC_UART_1_REGS, intFlags);1 Z: ~% ^& M* j# R- ^9 W1 J) C# a- r
}/ |7 c+ p* F9 \1 e8 v
//UART 中断服务函数
/ I# B: l2 j# g2 o5 l* [3 A& {: @void UARTIsr(UArg arg)5 F% E4 T+ [+ x0 d
{
* C# Y0 `$ B3 h4 C$ @0 t/ ?    static unsigned int length = sizeof(Send);& K' i  O& B; w6 [& T. M7 a
    static unsigned int count = 0;
6 e. r3 Y- l2 z# \$ @* t    unsigned char rxData = 0;9 a; U" E& Q8 V2 H/ z4 |
    unsigned int int_id = 0;
% ]9 `& k7 D6 i    // 确定中断源
  r7 k* c* _4 k, |4 @' t9 `5 _( T    int_id = UARTIntStatus(SOC_UART_1_REGS);
4 N# N7 e  k8 _    // 清除 UART1 系统中断
. c" k" H7 V, q& T* x8 z9 H    IntEventClear(SYS_INT_UART1_INT);* @; G$ t) L3 d
    // 发送中断8 d1 ^/ ~7 w1 Q9 t
    if(UART_INTID_TX_EMPTY == int_id)' I0 q7 F) j7 M. k/ Q4 L. x
    {
! p* k$ t+ a% t6 Y( j8 y- c. W        if(0 < length)
6 R9 p! t3 H1 @7 f) R' \+ _        {
" R# @" K9 G9 e5 d7 O            // 写一个字节到 THR% {% A, f2 B) f3 n
            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);3 V5 j$ l- k9 g
            length--;& n5 h6 [8 k1 _7 X( |( w; I
            count++;
2 h/ K; E2 r+ C% ~9 l        }
/ F; I; b9 H% [5 ]        if(0 == length)  U! a2 U% }9 H# h
        {8 R+ s3 c0 U# h# R' s; _3 |
            // 禁用发送中断
) d9 @# Z) n: \/ k# e. f" Q            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
* u' U7 i: E5 h- y! D; |  {2 p: z5 e) C        }0 k8 H3 t! f4 H4 ~! ]
     }5 a0 _: g* V6 [9 ?+ w
    // 接收中断+ B0 v* C% v' Q
    if(UART_INTID_RX_DATA == int_id)7 I% E, M# p. g) k! F
    {8 ~& ~: F( T3 x# M1 O8 f7 q
        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
% _) B+ Q& @: F9 k  c, ]        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);  N) ?* G! y; p  L* |# Q% V
    }1 ^; J5 ]/ N, [+ }% h; H& m0 q
    // 接收错误$ ]+ L6 l  f( {) I9 e% _( c
    if(UART_INTID_RX_LINE_STAT == int_id)% v* t. S$ v6 {
    {
* a- s: i3 C2 {) ]; U        while(UARTRxErrorGet(SOC_UART_1_REGS))
! B3 ^) D; G0 O3 I/ \2 A) u# k  O        {' S7 h5 a6 l, Q. _9 ?% R
            // 从 RBR 读一个字节
- T  [- a) i& o' D& t( U2 T% j( n            UARTCharGetNonBlocking(SOC_UART_1_REGS);& A6 W9 V/ O* b# `+ _8 L0 Q6 U- @6 Y- m3 V
        }+ h5 X$ v5 j6 q6 V6 D% l6 D9 z
    }
6 c% u& H5 ~# W$ y% V    return;) [9 d0 D6 G4 w' S
}
: k% [4 j) |  ^1 `6 w4 R# GInt main(): ?) ]$ @* ~$ w- {6 e
{
+ R2 h9 U- T# r, J+ [ UARTconfig();//uart 配置
9 t$ l0 k- k% \0 T" j    Error_Block eb;/ D' ~/ S/ _3 ]: j6 F/ G0 r
    System_printf("enter main()\n");+ ]6 z+ l: n% _) ]+ n7 m
    Error_init(&eb);
$ c: a" F$ y$ K1 Y4 W    // 动态创建硬件中断
) L( l2 c' b3 J# C; h* G1 l+ D/ i    Hwi_Handle hwi1;
) {- a8 `9 g% k+ S* f2 c    Hwi_Params hwiParams;. D, S  l; e1 J8 c, d/ K* J4 `
    // 使用默认值初始化参数
1 y: }5 S' s, E  |2 M+ m* J2 G    Hwi_Params_init(&hwiParams);
6 F5 p. `# e$ ]5 \$ H( H    // 中断事件) f) D; Q7 E7 W7 s8 L5 |
    hwiParams.eventId = SYS_INT_UART1_INT;
0 O4 Y9 K% _4 Y& j    // 传递到中断服务函数的参数
9 u' p* v2 m0 q/ n. W    hwiParams.arg = 0;
! w  T" p8 D% B" k    // 不允许该中断自身嵌套
4 R) [% D! X2 A/ _, \; L    hwiParams.maskSetting = Hwi_MaskingOption_SELF;' D5 t/ J4 ]5 U0 y1 o; p) }- c" ?
    // 使能中断% l! x2 a! e  t2 P% @- B
    hwiParams.enableInt = true;9 w( z$ l8 A# }! c
    // 可屏蔽中断 48 i: S# s0 Q+ N" Y7 `. l7 W( c
    // 中断服务函数 hwiMain) [9 S2 [7 q! ]. p
    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);
- i( e, Q) V) b& K1 u" P    if (hwi1 == NULL)' a$ q# `# S! H  M0 ?) f( c
        System_abort("Hwi1 create failed");- H" G, T$ x6 z! h2 Y
    BIOS_start();    /* does not return */9 b3 Z, z& n: B+ p+ I* ]% Y
    return(0);
1 C6 W$ d& I; c}, s) d7 o) `( f4 R( B( n
: L7 N. Y# ?' |' _
分享到:  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
$ {3 X( n3 L" V1 t' B9 _在中断服务函数里放置断点
7 w& t, m0 B1 d
参考 GPIO_KEY
. h+ i2 V2 X4 Z3 F' `9 ^) G% W; u7 g
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点
" i3 @' _! ^! I2 C
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?) f( e$ ^# l* J+ }
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-8 05:42 , Processed in 0.040333 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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