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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下
0 q# v+ m. {* [' z2 |- z* ~// 发送缓存& X8 l( l# p/ h0 I
char Send[] = "UART1 test......\n\r";
  S; [: `/ c- p  o6 q, M( R7 J+ i4 j7 U7 P7 h/ Z6 Q* Y" R
extern void UARTconfig()( i$ U- p* [3 b; y7 F. P5 r
{
+ k+ u7 i( ~0 U- s8 t //使能Uart1
  i+ H$ o, U0 x( ]  R: R' r' j PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);, p( J$ m5 t6 ]$ {4 c1 e% H
* Z$ b% n! |2 O7 F
// 使能 UART1禁用流控/ \( j9 a/ N8 Y8 }4 D* p5 ^
UARTPinMuxSetup(1, 0);
4 x( F; q; o9 ^' v+ x/ N / G& c& D3 K' N$ d) w1 D7 v' S
// 波特率 115200 数据位 8 停止位 1 无校验位) O- q- K* E5 M% W' @- p
  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);6 H. r$ }5 ]; Z: ?7 S# o% s% g
  T3 _* l+ K7 B; c/ Z; }6 j
  // 使能 UART1) n& q- f% r! M! L) `6 N' M; n) k
UARTEnable(SOC_UART_1_REGS);' l. \1 u* d( X( \
  // 使能接收 / 发送 FIFO  I: k! w# P- X6 `
  UARTFIFOEnable(SOC_UART_1_REGS);- T  H; Y, P+ r
  // 设置 FIFO 级别
. \- x* a" v5 j9 B( i    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);5 l2 t- Z! Z- N
  //Uart1中断使能
5 {+ t' q5 f  @! |% m  unsigned int intFlags = 0;5 C4 ?2 N! D0 N9 |( D
  intFlags |= (UART_INT_LINE_STAT  |  \8 t4 C# j( I' u8 d
            UART_INT_TX_EMPTY |    \+ v) F: y6 H& j6 G2 H" r
            UART_INT_RXDATA_CTI);& s7 [4 _7 d3 S
            1 E- b' A. q. |9 Y4 H  m+ I
    UARTIntEnable(SOC_UART_1_REGS, intFlags);
) G* i. q7 f$ ^" c! J& i1 I8 ]1 M}
; K) G4 i* \+ o# }. n+ {//UART 中断服务函数
/ T% G5 y# k2 A6 u" Ivoid UARTIsr(UArg arg)
% L8 A& g+ q/ j8 `{, N* }) O8 b! |9 o7 h5 e: @
    static unsigned int length = sizeof(Send);
: n9 v" ^1 i9 x7 g- S) k    static unsigned int count = 0;
! G+ r& q7 T7 h" w- ~4 Z- \    unsigned char rxData = 0;
' Y5 V8 n8 o$ v( p) N  f    unsigned int int_id = 0;
5 E) |: n1 e2 [. Z. @  ~    // 确定中断源
4 H  W3 l0 b: \    int_id = UARTIntStatus(SOC_UART_1_REGS);1 ]' v) V1 y& i( j; Y! G) s  _  y
    // 清除 UART1 系统中断
6 s1 H5 }, ~; t" Y& h7 G    IntEventClear(SYS_INT_UART1_INT);7 S9 {; U  }" k) a! K& [7 n
    // 发送中断
2 T+ i; C1 i* X    if(UART_INTID_TX_EMPTY == int_id)8 R" {" o$ o& Y& ]! E; X9 `. G% `/ t
    {
& ^/ L3 M  C/ {! ~; G) n! c        if(0 < length)
3 q' L$ M5 |. ^0 S. `& f  ~# J        {
5 Y5 p8 l; O" v9 ?- c! O* S1 b2 L            // 写一个字节到 THR$ Q2 T( V4 I* e) u9 h: r3 w6 Q
            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
$ q+ }) z6 X# {  W! }            length--;9 D2 ^3 t8 s7 ]: B2 L: S6 r% }
            count++;5 Z* F7 |. Q5 k: b! a) v3 K  x$ E+ Z
        }
" @" g! h8 d8 T4 {5 O. {4 F        if(0 == length)7 n  B1 ^; W) P8 x/ u7 d
        {
+ r' M" f/ N/ Q* l2 r+ u            // 禁用发送中断
# a# z5 t1 |" N- \; D            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);/ v1 p# d0 y2 ]. }3 H2 Y0 \
        }- E7 T  z7 `+ `/ h* N' O
     }
0 X4 C( n: o. K! j: N# v) P, A    // 接收中断; l$ G0 g3 m# E9 f4 c. M
    if(UART_INTID_RX_DATA == int_id); X4 I$ \6 A1 t0 A8 J
    {
8 m/ U" U# J0 ^8 Y: }        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
  z/ G# Y/ D, W0 A+ i7 Z6 S+ r9 ~        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
# |9 R  x, _3 G! l' h% R    }  u; {) j. _8 L
    // 接收错误
3 G5 [3 c. x+ w& J; O    if(UART_INTID_RX_LINE_STAT == int_id)2 {+ S( C9 s4 J3 H+ J4 g% U
    {
# P7 m. Y- F! y4 n6 L9 {        while(UARTRxErrorGet(SOC_UART_1_REGS))" v# W& q) u, p4 W7 _
        {
, m( j. |- J$ U3 u3 o" i1 j% B! K            // 从 RBR 读一个字节! O& ]5 B& X& T1 a1 d7 {$ B: Z& O
            UARTCharGetNonBlocking(SOC_UART_1_REGS);
5 ]' X& k! |! C4 j1 s9 o; R6 D        }' W2 [$ ~: }- g& E' e4 _" {) z
    }
! D6 Y5 v' L1 n+ y- {+ Z9 j+ T    return;  L8 I, u, y  @9 H. B" @
}
5 M  U: }/ m6 iInt main()
% g- F$ q4 ?5 b# ]+ ~{ ! ^- s9 a$ X* }9 m+ W
UARTconfig();//uart 配置# g. Y6 v, F6 h# A* Q
    Error_Block eb;
: D% T+ W: c/ h" b$ S% S    System_printf("enter main()\n");. V# p# O0 s$ \! M/ e! R
    Error_init(&eb);  Y4 q; Z( q6 A1 |
    // 动态创建硬件中断0 }* [- x+ A2 b% D0 d3 m& l
    Hwi_Handle hwi1;" E8 T6 w5 o' N7 y$ [% P
    Hwi_Params hwiParams;
3 r( |9 ?: [/ v$ t/ x. I    // 使用默认值初始化参数
& G  k" l+ s6 [' i9 T/ i$ c" P    Hwi_Params_init(&hwiParams);
, e1 O1 y! @; A* p    // 中断事件
1 w( y7 m8 [9 N2 D  ]    hwiParams.eventId = SYS_INT_UART1_INT;
3 M& w( P" S: S; }    // 传递到中断服务函数的参数, M1 n7 q0 J  Q  U- `* g  \) K
    hwiParams.arg = 0;
% }/ S: b/ u. k5 L; Q' d    // 不允许该中断自身嵌套
( _1 ^# [$ K# `  J  F    hwiParams.maskSetting = Hwi_MaskingOption_SELF;
' q/ ~, O) Q- A; e' V7 w0 o    // 使能中断; M; q' {$ i! w0 {. W( I
    hwiParams.enableInt = true;
. W4 k: t* v$ S    // 可屏蔽中断 4( J* `# m! ^* q& d
    // 中断服务函数 hwiMain  ~6 q4 w( |) y' w' h+ `
    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);+ p- H  U2 G! H4 s0 @
    if (hwi1 == NULL)
& l2 q0 ?7 m: d) U" j        System_abort("Hwi1 create failed");& B2 X6 K6 X( s: k9 m) J
    BIOS_start();    /* does not return */& Z2 M  x) Q& A, O% Z
    return(0);3 c& m: f, p6 T4 F. A) s- h& n0 w
}( W/ V4 n7 {- \5 g

6 o4 h3 z" S/ I$ [) f  \% P$ {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?
3 Q5 ?% {) _  _! ~
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点1 Q$ i; ~4 j! J+ B3 O" u
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49) ?+ Q. m6 o' x( P2 y; p- f* @
在中断服务函数里放置断点
6 l3 F0 n6 M& `: F
参考 GPIO_KEY! ~  ~1 `" K- r: z8 b9 i9 M! Q
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-12 09:45 , Processed in 0.039554 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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