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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下7 I, l% ^0 u5 l5 o% m) @! G0 n" X
// 发送缓存
. ^" v, G- f1 ichar Send[] = "UART1 test......\n\r";
2 n  j4 D( U* N+ ^' N) y
8 K( w! M4 E" ^) j. `extern void UARTconfig()$ I  w/ m2 @+ d; |5 ]1 F
{3 q2 x3 |, g4 H% o) ?' I
//使能Uart1* y/ c  H9 X5 n% J$ G3 f( [
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
% P, ~* u) o! k5 E 5 t) W0 c* v, T& ?; D: R
// 使能 UART1禁用流控
8 E( n5 `5 U3 m2 a UARTPinMuxSetup(1, 0);
4 ?  t8 m1 ?5 I% A
$ p2 {- d# D' |" y' e0 d // 波特率 115200 数据位 8 停止位 1 无校验位/ F( b% s" q' [: Q+ h9 C
  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
9 X/ ?- J! t/ m3 q  M
7 j% U5 h4 x$ }* X9 }$ f/ a- k! R$ Z: R  // 使能 UART1
* T: T9 b. k7 c; t. P UARTEnable(SOC_UART_1_REGS);! K6 U8 P+ ^) f2 D; m
  // 使能接收 / 发送 FIFO
" [( X0 {' I. j* D* @5 O' w9 ^  UARTFIFOEnable(SOC_UART_1_REGS);
8 d; o  J# W5 D- N6 a* x2 E  // 设置 FIFO 级别
" B2 u  i5 ]+ P: {    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);- a3 h3 t* Q& n/ C# E
  //Uart1中断使能# d  T  X- w" A& p4 y
  unsigned int intFlags = 0;' ]& k+ W  G5 t  @/ \9 q$ {
  intFlags |= (UART_INT_LINE_STAT  |  \8 ~2 {2 X# ^! N( A
            UART_INT_TX_EMPTY |    \, N+ s# N& x& I0 T) L, e
            UART_INT_RXDATA_CTI);
7 u3 o$ s* d9 W8 Q9 @  I            / \. C6 t' s. }$ G
    UARTIntEnable(SOC_UART_1_REGS, intFlags);
0 ~& X8 V8 h6 l( X}
: ^: [9 a+ _; p: [- {//UART 中断服务函数
0 g  y0 U( @% t* avoid UARTIsr(UArg arg)/ _6 c# f2 B' e0 z
{# y! @- T" C8 ^" w
    static unsigned int length = sizeof(Send);
- ^: |$ @2 U( R/ ?, B4 }    static unsigned int count = 0;
# n& R% \7 U$ V( Q; A0 J# X- F6 E  ^    unsigned char rxData = 0;1 C; z% E3 t  ?, U9 n
    unsigned int int_id = 0;3 H; U5 A( W' N8 E& e# \: s
    // 确定中断源
3 S# R4 N. }& H    int_id = UARTIntStatus(SOC_UART_1_REGS);5 h% g- J" k8 u* R3 N5 y2 s
    // 清除 UART1 系统中断4 h8 ]7 Y$ z' Z
    IntEventClear(SYS_INT_UART1_INT);
; F; k3 H. Y+ u1 Y* y4 N    // 发送中断
3 @5 s3 g4 ~; ^- N* s5 S9 ?& l2 h    if(UART_INTID_TX_EMPTY == int_id)$ A/ Y( V# w4 i3 L
    {% H+ v; \2 f: q7 i3 ?! d
        if(0 < length)
, O" g5 X) z2 ~6 p0 V0 e6 g        {
9 ?% ~. u% V% t/ a( [* g- v: v            // 写一个字节到 THR$ V4 O1 Q( u+ b( ^: w" E) q
            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);- }% w: {: I: I3 e8 n
            length--;
9 N' k, Y2 C7 ]2 R: q            count++;
# N0 d/ |( m9 T0 C        }; t  h) {7 z& e  n
        if(0 == length)
8 N8 G) q  m# E: h        {) R# @, O( T$ `" s1 ~
            // 禁用发送中断. u9 o" @. k. v/ S! \8 z7 C
            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);: }) Y) [" w3 L" q. s* s9 c
        }! p1 B: S. O2 v5 k  ]. s0 s
     }
' @8 J; R. ]5 P3 L8 n+ l" }    // 接收中断
) m4 ]2 j! o5 N' S) ^0 E5 w7 s    if(UART_INTID_RX_DATA == int_id), r  h1 Y) }( o! |
    {& m9 h# x0 d# l# ~1 a
        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
/ L% Q4 u$ N  I* ~        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);# c2 {+ x  a1 B' s' j, e) _. W
    }
9 H; M9 G3 N7 O3 @9 |    // 接收错误! R, s4 r+ a9 W3 {! c
    if(UART_INTID_RX_LINE_STAT == int_id)
5 g0 E2 y4 J- V/ J    {
- o! F2 l3 V7 C9 q' |9 |" E        while(UARTRxErrorGet(SOC_UART_1_REGS))& {2 P8 C# j" l. a1 @/ B' L
        {0 B4 `. Q: F( R7 |
            // 从 RBR 读一个字节: f* k0 v' k8 y4 ^: E( E/ t
            UARTCharGetNonBlocking(SOC_UART_1_REGS);( g: K# A8 t3 K# F$ m7 p: r1 a
        }; T' H$ Y2 N( v. W$ h  C$ @
    }
6 w0 R* T: d" t9 D- ]4 n    return;. {8 t9 B! ~' R0 v2 w2 u
}
9 C8 E' d2 f# E6 B* jInt main()
. m; f" H& x3 U( }! B: {{ # b0 [% @& o$ [
UARTconfig();//uart 配置) x0 ?+ r. j1 J. P
    Error_Block eb;. x' ?( g2 b2 U8 Y
    System_printf("enter main()\n");
; j& \, G$ o8 e3 w  k    Error_init(&eb);. [6 x% d+ ]9 B$ ]3 q# B) J, N) G8 I
    // 动态创建硬件中断% Q6 K. j" }, c) T" f
    Hwi_Handle hwi1;
( j0 l: U7 s5 b( T    Hwi_Params hwiParams;; V- I0 j4 j3 `* k: O  t
    // 使用默认值初始化参数
, D" v7 r  f( \0 ]2 J- O8 T    Hwi_Params_init(&hwiParams);+ g3 W) o3 s; S7 s* _1 |
    // 中断事件3 O3 z* C( Z" ~
    hwiParams.eventId = SYS_INT_UART1_INT;
( h- n, B/ Q2 _% Q+ h! R    // 传递到中断服务函数的参数3 u9 Y! Y/ D( @
    hwiParams.arg = 0;
' I) n4 ^% ^- C% {    // 不允许该中断自身嵌套
1 E) t. x% w) ?" z    hwiParams.maskSetting = Hwi_MaskingOption_SELF;! e* U2 O  J9 F  N1 J& b
    // 使能中断
9 {, z- Z1 r, A; I2 e+ g; L% G* V    hwiParams.enableInt = true;
* z  M5 ~5 h+ A) F: L# @) g    // 可屏蔽中断 43 T+ I  c1 l& m) r
    // 中断服务函数 hwiMain
2 N$ J, T7 Q& y    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);. L! j* f5 V- P9 u: _  o! D1 e
    if (hwi1 == NULL)
7 `# x$ C: l9 ^4 t8 J  p0 p1 V        System_abort("Hwi1 create failed");8 S) F0 ^) Y" q8 V: W# G. R
    BIOS_start();    /* does not return */1 \( I  V4 L+ T+ q' Z8 d+ q
    return(0);: Z. z0 O- m+ ?$ s. b4 y0 n* |
}8 J4 w( z) L$ q" U
/ ?- P# S$ S! p( u+ N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?
% u& o: T4 l* t
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点
7 p: h5 |; `6 r2 R& ?. Y/ ^' \
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49  v4 L# R6 Q- a, A6 f6 b
在中断服务函数里放置断点
/ d  w! ^( U! c: Y% n
参考 GPIO_KEY
/ H/ T2 D0 A9 ?3 B7 J& ~0 d' U
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 18:56 , Processed in 0.039708 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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