在sysbios下,uart中断收发数据,程序无法进入中断 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下
; g- |; I9 E( |2 F8 U// 发送缓存
# |! b/ P' o6 o, D" {- A4 Zchar Send[] = "UART1 test......\n\r";# u. V4 V' I/ E" D7 J. Z6 o
+ n# M) {  {% j; {6 n7 F4 }; j' j
extern void UARTconfig()
# n- `5 Y/ M) ]2 K; q{0 `: p1 {  ~6 e+ G4 C# P' f
//使能Uart1
  O' Q) ?, M: W# N! G2 F PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);# w7 ?$ o# a3 R0 i+ f

/ c: l1 \) ^5 E# |. l // 使能 UART1禁用流控6 }6 W! `. o+ O6 `
UARTPinMuxSetup(1, 0);
! A- [% V  P  Q% m! Y9 w) @- W
# U* n4 }: X$ A7 ~! x // 波特率 115200 数据位 8 停止位 1 无校验位
* X8 _- S7 p6 `$ b. r3 z5 o$ L  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
( F. E, u! e7 @1 B# T5 ~
6 y3 E0 h# \# k! r: E" \  // 使能 UART1* j6 n6 l' Z9 z
UARTEnable(SOC_UART_1_REGS);4 D* @4 {# `* d# W
  // 使能接收 / 发送 FIFO! D) w( b* S% J! t7 X- b1 @. _9 T
  UARTFIFOEnable(SOC_UART_1_REGS);. u: i! H6 ~4 ?8 W7 d
  // 设置 FIFO 级别5 X* }7 }/ l  K! M% Y/ Q$ p2 }5 i
    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);! b3 {" k' N; B$ k! J; V( t
  //Uart1中断使能5 @( ?2 D2 {# ~% O
  unsigned int intFlags = 0;
) B& u, S3 s& H, N/ t# v  intFlags |= (UART_INT_LINE_STAT  |  \% G7 X2 e/ i/ _7 ^" Z
            UART_INT_TX_EMPTY |    \
& s  G, R" @# W; M# ]6 Q& L5 x4 C% d            UART_INT_RXDATA_CTI);( c" ^+ T' C* h2 ^) C
            
5 ~9 }1 f9 Y/ j$ a) M    UARTIntEnable(SOC_UART_1_REGS, intFlags);' }) T& X& ~( X3 |3 J2 P2 h
}
% m9 r- u3 g3 i, c% ~9 N0 f//UART 中断服务函数
9 K. i; R8 @, I3 K  P8 T3 X8 g) n. Nvoid UARTIsr(UArg arg)
3 Z4 m: Y4 }, L" V6 M, g{
- }8 c* a% J' T1 }0 L0 j! }    static unsigned int length = sizeof(Send);
. R# `: I3 y! j5 }2 X    static unsigned int count = 0;0 P4 |% f, A. t+ |
    unsigned char rxData = 0;
8 d1 B+ o  L; n) |; B$ X* W    unsigned int int_id = 0;
6 s4 ~; |: ?! O    // 确定中断源2 e$ d7 a, I4 M& }2 }* o* @( k+ ?
    int_id = UARTIntStatus(SOC_UART_1_REGS);$ H/ t/ T8 y; T# n# Q" Y
    // 清除 UART1 系统中断% U* d* W5 ^2 T# n9 i: \
    IntEventClear(SYS_INT_UART1_INT);4 C+ T  I4 F, q+ R/ {2 u
    // 发送中断
( D* M% N9 N& [6 h7 d    if(UART_INTID_TX_EMPTY == int_id)2 c2 y: E( m7 f' t# U3 b) q
    {$ U; R5 e7 i: q, o
        if(0 < length)
  H" x/ G; A/ V! b* @3 D, Z+ d1 r+ t        {
* ^. f: w9 j/ e" U9 M            // 写一个字节到 THR
; X( Z% J8 G) s+ _            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);7 R7 ^2 ~8 @+ |5 l+ E6 _# u9 W
            length--;) R& W$ C7 ]7 u7 C: m( a
            count++;4 v' S* e9 c1 w  m* [8 S0 o
        }$ r$ ]9 y. t& ?9 V. p
        if(0 == length): c2 I) Y0 {0 c
        {& q! ]7 E6 t& R7 E( ?) o
            // 禁用发送中断( g" d$ J/ a4 p5 w' d- X! ]
            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
9 }) s2 z1 {0 g% C2 _        }2 H5 O5 P; B. n! Q
     }% {3 f$ v9 O4 h% u/ }
    // 接收中断
0 j% `$ q$ G0 \7 ?9 M) Y    if(UART_INTID_RX_DATA == int_id)
( z7 {! C# k" o3 ]# ~$ n3 }) p) ?( {    {
5 D' P9 N# T9 D. o4 v        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
! C1 Q+ T5 n! E5 V+ V, v! G% i        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
0 E: M4 Y, g. R! K- Y    }3 E- `5 e6 j- }7 Q
    // 接收错误$ a" b, u% n- _0 W! F% F6 T$ z
    if(UART_INTID_RX_LINE_STAT == int_id)
  O3 w0 z" j, m, n. C- H$ x2 v    {
8 ~0 T( ~7 \2 \6 o8 O8 F        while(UARTRxErrorGet(SOC_UART_1_REGS))
( q9 ?0 p& [1 Z8 k" d        {
, U0 I4 H8 c. ^# v8 s" p. R7 I            // 从 RBR 读一个字节! t6 c6 P$ J9 M$ M; c/ M
            UARTCharGetNonBlocking(SOC_UART_1_REGS);7 z2 \4 C1 U! i6 @3 `3 p
        }
/ K, e; ?6 {) l5 l    }" h$ n" ?5 ^- p# s+ a; J$ b
    return;4 p1 A+ E) q3 @( B& o
}
* c7 R+ r, ^3 L* F) Q5 W) V5 QInt main()" ~0 l/ E/ @+ q9 n  l5 M
{ 6 w$ O' a1 p5 h& M. Q6 m
UARTconfig();//uart 配置
* ~" S' p  }$ M+ B1 j5 w! N    Error_Block eb;+ h9 Q- _! C" f7 W
    System_printf("enter main()\n");
( v* U/ d8 z6 x. p. g6 d* Q    Error_init(&eb);
' J6 o- l1 W9 n( r' |3 b* Z  J    // 动态创建硬件中断. S5 {) k$ S$ Z) I. p) Q7 {9 Q9 s
    Hwi_Handle hwi1;: g- C( H/ y( `' D* W8 K" k  T6 p
    Hwi_Params hwiParams;
. Z- A9 r, [4 U/ V    // 使用默认值初始化参数
. k, [0 M. L( }( g) @    Hwi_Params_init(&hwiParams);
$ g3 J+ l- J6 h* T: p    // 中断事件
6 O) M1 i1 l$ a, X# R    hwiParams.eventId = SYS_INT_UART1_INT;
+ y$ @" R7 Z1 q0 O  L8 M# T: K; B    // 传递到中断服务函数的参数
* F9 x+ r; h1 t9 Y4 H' m    hwiParams.arg = 0;
2 z# u8 G  m" f1 [. q" M    // 不允许该中断自身嵌套, v+ e7 p) U1 [1 {! b  H
    hwiParams.maskSetting = Hwi_MaskingOption_SELF;' v9 O% `8 l4 P7 Y, A
    // 使能中断" _& j, o& j9 E* x  q
    hwiParams.enableInt = true;
3 j. Q! [$ U( q    // 可屏蔽中断 4
0 ?# _+ i$ Y8 ~1 b    // 中断服务函数 hwiMain8 n: l2 B) @( p2 v" p% l; y
    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);6 |0 g0 [1 h$ ~" {! ]
    if (hwi1 == NULL)
5 l1 P5 n: V1 ^9 r$ Q2 Z+ a; v        System_abort("Hwi1 create failed");* q& h5 {3 N4 H) h- l% B2 t$ _9 g
    BIOS_start();    /* does not return */
2 ~/ J4 V& l& Q& g. ~" O4 w    return(0);& E1 K  y9 `! b$ Y/ E
}; |; K  v0 f$ M; K: D& i: O% w

- x' B4 L7 ~4 _# j% x$ `2 S) z1 f
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?
( M& ~' N6 g! {- Q4 s' e6 E& K
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点- a& E& g- A& r# {) F, S
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49
6 J' \# h" e8 Z" v; f2 r在中断服务函数里放置断点
, m9 d5 z) i" s* I
参考 GPIO_KEY$ Q. M+ W0 `- T
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-4-1 11:54 , Processed in 0.044730 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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