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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下, p8 k  q2 g6 X( x$ M- [
// 发送缓存
- F, v. m5 \! Tchar Send[] = "UART1 test......\n\r";
8 ?  }' i, G0 y, [0 v1 X6 l
( c; z; B5 B/ J1 y: c, Mextern void UARTconfig()
1 t* i' e) z0 k6 t1 L{9 \7 h5 c4 L9 H3 d
//使能Uart17 X* ?4 R9 \, [
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);4 e! J8 V& c! O) O3 y" o; l! r

% J4 s0 m) ^/ V% h% n // 使能 UART1禁用流控6 S; f# |# Y5 j6 j
UARTPinMuxSetup(1, 0);- z6 l& p# U2 m/ y# g' R* o

) y4 q* F" ]5 [& _+ @ // 波特率 115200 数据位 8 停止位 1 无校验位
; {/ b* f5 {4 Z$ m9 R( y% O  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
+ H3 M, y. {7 d9 Z5 w 0 l2 {5 T/ `0 w6 W
  // 使能 UART1! c5 {2 M* Z( ], P. U
UARTEnable(SOC_UART_1_REGS);2 H) I! s' b4 l, K! r1 p* N
  // 使能接收 / 发送 FIFO& s! w# h: v0 N4 y! y
  UARTFIFOEnable(SOC_UART_1_REGS);. I) J0 s( V8 C( G" U. M
  // 设置 FIFO 级别0 w! j0 M" l* J# ~! }, o
    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);
& [( W0 L: e0 p3 V2 s  //Uart1中断使能+ b7 @, y/ T% E8 l/ _
  unsigned int intFlags = 0;9 H. X( E0 p/ B' D9 v# V: }
  intFlags |= (UART_INT_LINE_STAT  |  \7 ^$ p; n* q5 i9 k' l" C
            UART_INT_TX_EMPTY |    \
  c- H3 G" M! ^! U  O! Q            UART_INT_RXDATA_CTI);. p4 K/ J  S, m" {& u
            
8 C) M) v' H# V4 g5 t3 X1 |2 m    UARTIntEnable(SOC_UART_1_REGS, intFlags);
5 V6 @+ z7 B/ ]' a# \2 O}7 @$ s; t  m) I  ]" b0 o
//UART 中断服务函数- A& d$ F2 [: h7 s! k9 g# n
void UARTIsr(UArg arg)
) k5 X% L. O3 M6 ?{
" a7 @: k+ r% q; N/ d3 N* M/ e# ~    static unsigned int length = sizeof(Send);
+ p3 I7 o5 u; c# R7 W# u    static unsigned int count = 0;
% T$ a7 S3 U0 P& _2 l    unsigned char rxData = 0;4 a' F4 _9 J2 x9 A' A6 i& q  \. s
    unsigned int int_id = 0;
' s$ a- N. H# D    // 确定中断源& Y+ a& J3 t. P$ P5 B8 }6 f4 F/ `
    int_id = UARTIntStatus(SOC_UART_1_REGS);
7 T' m- |. t' Z( [2 P  A    // 清除 UART1 系统中断
  B$ T& F6 o: K! D. ~, |% ]; q    IntEventClear(SYS_INT_UART1_INT);6 C) p' J' W: m8 q' X+ {/ ~
    // 发送中断
( G5 U5 n  I$ ^) D$ r8 L  r3 ~    if(UART_INTID_TX_EMPTY == int_id)1 T" B) |. C& e6 t
    {
/ p0 ?# T. l2 O6 h5 ]/ X# K# f/ U        if(0 < length)
9 }2 L# F% z4 N4 y9 s( p$ N+ u2 T        {
8 y! X7 |/ i6 d            // 写一个字节到 THR
+ ^! G. O, u( D5 X0 b# E) H            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
- s% U3 S5 H0 x3 T- `& C! Z! G! _- _            length--;! Q, p1 `) @! a& `! g+ f& I4 {5 T
            count++;
- g- P) M( W# Z% q1 Y. \        }) z/ F- g1 W# C8 c7 E; ~4 v
        if(0 == length)% z9 n$ \8 Y) V% R3 [
        {/ O2 i1 a7 v9 k
            // 禁用发送中断' G6 F: e6 V4 _! q7 X4 E# J  k( p
            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);3 i/ K  I' [) ^; i- c: a) s
        }' U( _+ [9 G3 B
     }: D% h' L2 Y1 @* b/ o* t
    // 接收中断8 Z. S5 j( o+ g* {  L
    if(UART_INTID_RX_DATA == int_id)
/ e! i* l& }+ d0 G3 i& H' R0 ?  e    {
3 p7 e+ N: b" r3 Q$ \6 [( q        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
: w  y7 f# D& E2 R& j        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
8 P& l. N- }; l; A/ L" k    }% b' V' [2 {' ?$ j/ R9 E) y
    // 接收错误8 m8 \& J1 S: X. \1 M4 ~  K
    if(UART_INTID_RX_LINE_STAT == int_id)
$ g4 @0 h' T# V+ M- N8 s7 U    {
8 V: u1 Y" Z9 V+ i: w" o' j; D        while(UARTRxErrorGet(SOC_UART_1_REGS))( F& J% n4 U" A9 X4 A
        {& \; R/ f. ]5 @  F, M8 ]7 j6 W" O
            // 从 RBR 读一个字节
; ]+ N9 J' V9 `) M            UARTCharGetNonBlocking(SOC_UART_1_REGS);
: ~7 _  o2 z, z' S) s        }
- @# g: P  \; `& n1 B    }  {( b. Y; [: t4 |# L' Y6 U
    return;& m9 Q) a2 _6 V% B: b! L
}7 F0 x$ U! M6 x; m0 C5 U( U
Int main()4 I" {- j: a0 N$ n( J
{ % o+ r1 s9 G: y2 C) J" q& _! }
UARTconfig();//uart 配置
# `: U8 q  n: K! A7 b) K    Error_Block eb;
# I" S6 O+ w& g# X0 _    System_printf("enter main()\n");+ N# F8 k( L5 J# k; I# [
    Error_init(&eb);
3 r6 I! }' `" m( D2 n% e    // 动态创建硬件中断
! b; l: K" k0 M    Hwi_Handle hwi1;! ?4 k- W4 i8 \4 [9 B( f8 [
    Hwi_Params hwiParams;
+ {4 J; E' }# F# e# p    // 使用默认值初始化参数
+ B. l5 x% n6 `/ C: j& |% v    Hwi_Params_init(&hwiParams);
) a3 c& G0 F, R" d3 s0 x. E    // 中断事件* K  T1 u% J7 y" J9 s1 Y* i
    hwiParams.eventId = SYS_INT_UART1_INT;8 E% q' E# U& [  ~
    // 传递到中断服务函数的参数
( n# n1 \* ], `6 ]$ \. A  h    hwiParams.arg = 0;
; D5 p! q) j. A4 ]3 j" }    // 不允许该中断自身嵌套, G  S. {( k3 F- {7 y6 r
    hwiParams.maskSetting = Hwi_MaskingOption_SELF;
- V, M; g  U2 f0 f+ e3 V1 N    // 使能中断8 k& U- r: ~4 A3 i6 H2 {  d
    hwiParams.enableInt = true;
$ v6 q) A# T' s9 D! G/ Z) i7 R    // 可屏蔽中断 4
8 U5 U* G$ h5 N: g( Z% c2 Y! `    // 中断服务函数 hwiMain% t, I% {$ D: G. }2 _# A
    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);
6 o! f& Q4 |: a+ n0 M    if (hwi1 == NULL)9 {$ q- Y8 W; c( s
        System_abort("Hwi1 create failed");
  e  M1 o9 o* `    BIOS_start();    /* does not return */
, N$ ]5 c- E& t    return(0);5 w% h$ `" `2 s, X
}; a2 Z5 p* w9 K* f
% N& K6 }5 e7 Q+ |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?
" J1 e* |6 ~/ ^& p1 ^$ D( m
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点6 L/ B) @, R7 h$ f( N! H
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49
5 }# g8 E; s. ~* o1 p9 H% d$ t在中断服务函数里放置断点

" \/ T/ C- j- _1 }8 \参考 GPIO_KEY9 V. x) X+ l! p! d$ @
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-8 08:12 , Processed in 0.046368 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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