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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下) z. E* H8 t, G- O0 n' b
// 发送缓存: g0 D( M0 v' E9 u" b
char Send[] = "UART1 test......\n\r";
, K" z8 I4 ^3 h: r0 Q$ h2 f# y6 ]  O' S! R
extern void UARTconfig()
" `1 k* L: s2 ^$ k" q* {7 l{
6 h) U: i! ^' H4 i6 e7 Z1 p/ ~ //使能Uart18 O" D# n0 ], Q  n
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);$ r1 ^! F0 P- B- t
7 E9 y8 ^/ `: e3 n+ r% R
// 使能 UART1禁用流控
' l2 n8 z7 X7 j* r/ S UARTPinMuxSetup(1, 0);
5 U0 |6 h3 _- U, Q" v# v9 l% ~ ( V% v! N0 G& k' x. f: y( b- W9 D
// 波特率 115200 数据位 8 停止位 1 无校验位
* x% [) a+ N$ i8 C* I5 I  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);1 f, U( Y  r& |: i6 C- g/ H, d7 `2 ^

; Z& |; ~% F; R  // 使能 UART1
* t% s0 d' d$ A7 B# E2 i1 c UARTEnable(SOC_UART_1_REGS);
4 Q. v- `+ U) L% A6 a* ^  // 使能接收 / 发送 FIFO
. q: n8 k8 B4 c) U3 f, `/ Q# x& `  UARTFIFOEnable(SOC_UART_1_REGS);
5 W! O. N  z' S  // 设置 FIFO 级别$ {$ C- h5 T: P. L
    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);
5 P2 s% a. l! B3 p: q  //Uart1中断使能
$ y6 o3 K9 C& c0 p! L: z  unsigned int intFlags = 0;% \9 ^2 ]8 @  ~& p  C
  intFlags |= (UART_INT_LINE_STAT  |  \2 v0 @2 K. o  P* _1 Z( V
            UART_INT_TX_EMPTY |    \' }/ P: J7 b  Q/ P1 _% f
            UART_INT_RXDATA_CTI);
, D' T( y- V3 W/ I2 C4 M6 s            
& ~1 m6 G( r* w5 j5 Y# I3 {: X- K- d    UARTIntEnable(SOC_UART_1_REGS, intFlags);
$ A4 d. D* W( P+ W  t) X" G}6 `4 {1 i! ]" Q) @/ k$ {
//UART 中断服务函数
; j' o: Z* \) S- t" T$ hvoid UARTIsr(UArg arg)6 E6 w9 G! H' @+ l
{7 M9 K: i/ `9 q* v6 e7 r" r, ^( i
    static unsigned int length = sizeof(Send);0 V5 p! x6 N- z+ T) N
    static unsigned int count = 0;
# p$ s, B9 q* P8 R  Y' T    unsigned char rxData = 0;) y1 }7 [. A; D
    unsigned int int_id = 0;0 K' ^* i+ b% z2 H6 p/ }: l
    // 确定中断源
: m# n  `( M4 h    int_id = UARTIntStatus(SOC_UART_1_REGS);
8 h- r8 D' J# Y    // 清除 UART1 系统中断
+ V3 R- b$ I% K+ Z7 u    IntEventClear(SYS_INT_UART1_INT);
: ?: l% V8 x6 G, C3 m    // 发送中断
# M* R6 s: D) w+ R" [9 `    if(UART_INTID_TX_EMPTY == int_id); H5 ~0 z7 d! o+ v
    {
1 x* u9 ~5 @4 H$ W. |8 @1 {        if(0 < length)9 L, ]# n3 f% G2 C: V
        {2 s9 w8 J, n1 P/ A/ B' F7 K
            // 写一个字节到 THR
! l5 p, j1 @* @9 u( o0 A1 O            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);+ R4 J+ N0 m5 G8 D2 [( I$ U
            length--;2 s4 L& W+ H$ A$ w  g# f
            count++;; [- ?- Q$ \4 G1 u4 x) K
        }1 p$ k8 C( F1 I9 C% J
        if(0 == length); l) X( C& H. }
        {
6 w- x0 H6 o. D" x7 F9 m' \6 ?            // 禁用发送中断- D0 R/ p/ A; W" g0 x  d
            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
/ m9 q) v0 c- T* A8 y. W  _# M1 n        }" z' ?9 E& `4 p( K- a
     }
! S+ [+ _6 p8 A: X9 V    // 接收中断
1 C% w0 Y% G! m7 M8 x2 R% o    if(UART_INTID_RX_DATA == int_id)
8 q) [" Q4 n+ r. K8 O5 ^' v! Z- I    {
8 w2 A8 \% d9 K5 R; w        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);2 q. J% g1 z/ c* O( S
        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
7 n7 S1 s  n7 V% U# K    }, V2 c* Z8 U9 b3 T7 Q
    // 接收错误
- S# c: Q: C$ L( ^. P7 j    if(UART_INTID_RX_LINE_STAT == int_id)
/ h# z, N: j- h% s    {: k; g* ^3 _4 Z% W! O, ~$ g' x
        while(UARTRxErrorGet(SOC_UART_1_REGS))% C' A, S+ J) S( ^1 A+ J
        {
# i) C! K8 D. o0 c: O) m- l; f6 O            // 从 RBR 读一个字节$ ?1 B! ?1 \6 G* h) _" O& y  \
            UARTCharGetNonBlocking(SOC_UART_1_REGS);
7 c. {' K+ m, F+ n; m' n7 G1 W        }' A; D, |1 K; R( @/ i
    }
) U$ E9 Y2 S+ K( V& e9 R    return;" g0 @% F) C8 N
}; O6 n" O; R5 ?7 E
Int main()
3 r+ l! F( E0 W" x2 L{ + A4 i0 }: B# ]8 {" j/ a
UARTconfig();//uart 配置
" B$ R: K; y" ?1 \( J4 A% F    Error_Block eb;
# M8 M0 s$ T( S  f) |    System_printf("enter main()\n");
. c+ ?: |% b% q    Error_init(&eb);5 ^& [1 J: Z3 t) a: A  Y, w" U
    // 动态创建硬件中断2 F" c1 p4 b- C7 x( B: T9 [
    Hwi_Handle hwi1;
! O% W- y1 D& s    Hwi_Params hwiParams;
+ ^1 j7 }: Z" p, C7 x) ?. w; p! G    // 使用默认值初始化参数
- f  A$ f$ R4 \7 [/ [1 I    Hwi_Params_init(&hwiParams);
0 Z- q- H" m+ z" K# ]    // 中断事件% V9 q3 C6 O9 f1 ^( C! ]3 n
    hwiParams.eventId = SYS_INT_UART1_INT;
. N# Z' P$ o' G' n    // 传递到中断服务函数的参数0 k  |5 R0 Z! M( K! }, @# X0 A
    hwiParams.arg = 0;
& _, m3 u, G2 m9 q8 s% j    // 不允许该中断自身嵌套0 r+ Y" G- H* S% y# X
    hwiParams.maskSetting = Hwi_MaskingOption_SELF;# X* S0 s0 q- @0 e
    // 使能中断- u$ f1 J5 k. H+ B% n
    hwiParams.enableInt = true;# w6 g0 a, X% \$ ]! u# X
    // 可屏蔽中断 4
+ s  |8 v' C$ |5 C6 `    // 中断服务函数 hwiMain2 i' `1 m* r9 i! [; ~; h% t8 V
    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);
' @1 H, e+ n: M; f    if (hwi1 == NULL)
& h* i$ d* a2 T  h: _" z        System_abort("Hwi1 create failed");
  J* p+ u6 S/ r- H( X# v+ L) {( B    BIOS_start();    /* does not return */
: n6 r9 L1 M3 ?1 Q, E+ o    return(0);- ?: z, A. t( O/ ~% o  M( d# v
}
$ h0 }/ h/ ~! J3 d9 I; T# l8 x9 `
# h$ w1 l; C8 Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?/ U0 [. B& C( E. _1 f+ @
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点: f8 r& U9 Q; a
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:494 e% ^2 X" i8 s8 ~0 h7 S  i
在中断服务函数里放置断点
% P$ Y" Q- C5 Y0 V" T. |  `
参考 GPIO_KEY- k% Z% M: r1 ?7 Y
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-16 00:07 , Processed in 0.039210 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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