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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下
/ Z! e4 T: O5 q: E6 Y9 i  e  b// 发送缓存
( O1 }! s0 a- B5 F$ ?6 _9 Q9 Bchar Send[] = "UART1 test......\n\r";
! ?. ]( f8 h) s: X& H0 y3 r' A2 C# ^/ r* l( V9 U$ V
extern void UARTconfig()
( ^$ R8 ~3 s9 V/ C{
# P  p9 K% b3 h+ E% d9 R- e/ d //使能Uart1
) d- X; K9 J3 c4 G PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);2 [5 h! Y( B  z+ K

1 g2 c. B7 y- l9 [* S // 使能 UART1禁用流控) O& K& P, e; G
UARTPinMuxSetup(1, 0);
% m* |& `" {6 U
: L3 C7 \3 E7 W7 v; K+ o, E5 c // 波特率 115200 数据位 8 停止位 1 无校验位/ g+ z9 R+ Q  v5 U4 H% }
  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);9 J9 W1 t4 Z* `( q, Y

" B" B( y' O, v- g9 U8 o4 g' o  // 使能 UART1
9 S: w5 Q; g7 X UARTEnable(SOC_UART_1_REGS);
- g$ I/ r" v- ?  e2 q$ m  // 使能接收 / 发送 FIFO$ K# t/ H; U& e" w/ W* C
  UARTFIFOEnable(SOC_UART_1_REGS);7 _6 J; I. `/ X2 X9 ]: ?6 W$ N, u
  // 设置 FIFO 级别
5 z. W& D5 ]; y! b( R! H    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);( k8 Z- ?' R6 C0 i) v
  //Uart1中断使能; d3 q6 J2 D4 E8 m: ]
  unsigned int intFlags = 0;0 p* N  I0 |, h; [% V6 [2 g
  intFlags |= (UART_INT_LINE_STAT  |  \3 z! @/ B* K( [& h& w: f
            UART_INT_TX_EMPTY |    \* J2 \- H. T8 Q0 f& X: ^7 Q) v0 d
            UART_INT_RXDATA_CTI);# @8 B7 j! G- b
            
' ?  m& y9 j3 m    UARTIntEnable(SOC_UART_1_REGS, intFlags);
3 l5 l% ~* O8 U4 J! Q+ h3 B6 |}3 v) Y+ v  e7 Y# p3 l( _
//UART 中断服务函数4 h! c2 g7 H6 k* M" \" w+ s2 g
void UARTIsr(UArg arg)
8 O4 q; L6 [- H4 d: Y5 `0 ]# r) i{. t6 [6 H) B2 C' @- I- o) l. ^7 q
    static unsigned int length = sizeof(Send);
/ M3 t$ Q  p5 U( H8 \    static unsigned int count = 0;
9 A& L' T3 f9 f    unsigned char rxData = 0;( ?5 n, Z% F! j/ P! {, l' h6 [
    unsigned int int_id = 0;
+ f' b& a) N, N* `! R    // 确定中断源
( C4 e7 v# k+ y. N/ |9 e    int_id = UARTIntStatus(SOC_UART_1_REGS);
; u+ j: P( P; V/ M" t  S- M0 H    // 清除 UART1 系统中断0 c+ @' B, G! ?7 n
    IntEventClear(SYS_INT_UART1_INT);
8 J! [1 C- z: v. q    // 发送中断
7 M5 V& D* G, p/ m4 O# W1 X    if(UART_INTID_TX_EMPTY == int_id)
* d; `6 ]$ F5 ^3 r" B    {
9 v: w  v* }/ T$ F- H! ~        if(0 < length)7 r' W5 \: i5 _8 O2 Y6 L
        {+ [* V& p7 `0 j+ G
            // 写一个字节到 THR- ~( g$ O7 f- x. I8 v
            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
- |6 ~4 H+ q: S) F% L            length--;: }5 H" }; m& }; N% M
            count++;1 E% N: `% w( Y( U
        }, `/ ~: [8 [/ u9 D4 W& }2 Q
        if(0 == length)! @, X5 w, s& E9 Z' v
        {
# |6 o8 z' H/ W* p            // 禁用发送中断
( ^+ W, k3 ]6 i, K  ?6 q            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
, _; |( Q, k# E- k! H        }2 \: s6 x: w* O* `; r7 B0 Y
     }
* X, b0 @# r# ^    // 接收中断
( M! h2 Q) V8 j+ R  T/ D" c6 S( V    if(UART_INTID_RX_DATA == int_id)" k3 I' m3 |/ k, _2 }
    {" X0 ~: G  w5 V
        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
9 ^# ?: n! W. l# e        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);* o; S! R  G' D
    }5 Y6 x+ E. M- ~) C; s9 u
    // 接收错误" I  ~/ L! f5 U" I
    if(UART_INTID_RX_LINE_STAT == int_id)/ Z* g0 |( {0 o) z
    {* p& T  @6 x+ D2 y1 w, X* i" b
        while(UARTRxErrorGet(SOC_UART_1_REGS))) B- K# Z" |+ j6 u% k! S
        {
( ^' Q. t7 `: `! o# r            // 从 RBR 读一个字节
" f  j8 r3 k. K9 Q& S$ [" O2 |            UARTCharGetNonBlocking(SOC_UART_1_REGS);) e2 X' w# U7 L8 r* }1 p) h8 W
        }1 o" l! s( k8 `: F- L0 a) m
    }9 y! v. d' ]4 u) D4 Q( k
    return;
# c# i! _2 m0 ]% [( p}# {/ {* G8 t2 l  w
Int main()
5 q' T: v; D( K1 h{   e4 F& s5 z; O' a. C& f
UARTconfig();//uart 配置
$ K7 e+ l2 _8 Q% w6 l6 a/ C; ]* E    Error_Block eb;
! z9 y' m7 E, T- S6 w; r    System_printf("enter main()\n");
: l/ U3 ^3 Y& B/ d3 ?" g5 f    Error_init(&eb);
7 \* @% H) ?2 }8 n( \% k0 l9 _    // 动态创建硬件中断
; n9 \! e+ U& ?) h$ u# `( F    Hwi_Handle hwi1;0 Q; p1 A6 P2 h- a* v- F
    Hwi_Params hwiParams;3 W- }6 I0 ~- C. ^% Q7 `3 z$ Z
    // 使用默认值初始化参数
. `+ L) y/ r( q; i" }9 T9 h    Hwi_Params_init(&hwiParams);
6 b! d- M: w2 W0 z- p4 `& f4 J/ J    // 中断事件! X+ D6 M. w6 d! _  A- K
    hwiParams.eventId = SYS_INT_UART1_INT;
9 s) g* I4 E8 y( z4 Q* Y    // 传递到中断服务函数的参数
% B+ l  a0 W7 X. n# ^% g( Z    hwiParams.arg = 0;
* e( B: V+ t* p8 v5 v1 y* S    // 不允许该中断自身嵌套
, h5 L$ q5 A8 U, J2 c3 h3 o    hwiParams.maskSetting = Hwi_MaskingOption_SELF;
2 J$ n0 W! f6 B0 k3 g    // 使能中断
8 |# H' y5 ~: x& s4 T; \- a% o, B    hwiParams.enableInt = true;! y" K1 q9 h* f6 w" P
    // 可屏蔽中断 44 G& I6 y7 z" z( H$ e
    // 中断服务函数 hwiMain7 h4 e! I7 \; C: y4 z! Y/ k
    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);, ]7 B- ]: d* d# C0 G
    if (hwi1 == NULL)
5 f0 Y' B; X- s1 u1 K2 N5 T        System_abort("Hwi1 create failed");
8 B9 i+ p4 h* I) D) P6 ^    BIOS_start();    /* does not return */
5 W: v- J: k* D$ t- d    return(0);
, H) U7 X4 S  \1 A/ I2 c7 E}
! C- e! d% x3 r# U7 P) I2 [/ c* o3 C3 \: J+ \$ I2 W
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?
4 C% I2 Z2 _8 K9 ^
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点
; ?1 f1 g( G& Y" ?: Z; l
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49$ S3 V6 Y" R4 [: M/ g5 `, a+ g
在中断服务函数里放置断点

1 i; X9 Q( ?: V4 d0 O0 ^参考 GPIO_KEY' e# r$ A6 n" z# G- s& Q1 U
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-7 06:58 , Processed in 0.039412 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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