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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下& y0 p- B; L5 G9 C* B7 }7 o' R& G1 `
// 发送缓存
1 |4 [$ L8 R2 ]+ \. m! Gchar Send[] = "UART1 test......\n\r";
/ l* t2 M# s7 S& x) Z4 q8 N4 a5 H7 @- ^, q4 R5 E2 w" T0 x- {0 N1 f
extern void UARTconfig()0 c3 v$ S! W! q, s! C
{: O5 t7 G6 [8 K. n, E! J
//使能Uart1
$ r* g1 q% V, _ PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
' N+ u, Q' |; e7 C
  L8 w$ k% f6 f- l# ]& u3 i) Z // 使能 UART1禁用流控- W6 I6 ~/ F8 Y. N. x/ I
UARTPinMuxSetup(1, 0);
. m# j) D7 k; L; @, Z! n; l 7 y& A1 e% z# \4 G2 N# ^
// 波特率 115200 数据位 8 停止位 1 无校验位
$ g1 m( @: W% @8 l9 h  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
7 Q. b- f9 y/ j0 F) a) b
3 b, Q. G; l. z  F+ `' R/ L  // 使能 UART1" v/ }& V" Q$ w( K! x2 R1 b. @
UARTEnable(SOC_UART_1_REGS);: d, }; q5 b& t7 Y. t5 v8 f4 ]
  // 使能接收 / 发送 FIFO
) f- u0 s1 M; F0 t  UARTFIFOEnable(SOC_UART_1_REGS);% t# W- [) D: J: N; x8 ~6 I/ a
  // 设置 FIFO 级别
! o8 x; b! A- Y1 y6 d& ]    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);
* M" \9 _6 [( c8 h5 D7 y5 r. V  //Uart1中断使能
# T, b) ]5 x. ?' O: Z  unsigned int intFlags = 0;
, ~* j0 R7 z8 h  intFlags |= (UART_INT_LINE_STAT  |  \3 I, z* O9 v3 E7 d9 v) @
            UART_INT_TX_EMPTY |    \$ G/ |+ W9 g/ X4 \' b
            UART_INT_RXDATA_CTI);0 f* x/ O! D* @! O: Q" ?
            5 x) p$ q" b( I, H
    UARTIntEnable(SOC_UART_1_REGS, intFlags);) P+ g  t* s5 ]8 A7 Q; f' A
}
9 q& B9 U" R, {//UART 中断服务函数8 _+ |* [( s5 T; I5 l7 y
void UARTIsr(UArg arg)6 F! R# P' {4 F1 z
{
# q5 z" t7 [3 [6 E1 R  n    static unsigned int length = sizeof(Send);  T+ Z7 E2 j, o- E1 S: q
    static unsigned int count = 0;
$ v$ X  Q% R( K  m, [  I( \, A    unsigned char rxData = 0;
7 y- c: ]0 D& ^+ R; Y. j    unsigned int int_id = 0;% d' O. i1 s, s+ y3 F3 ]7 Z; q
    // 确定中断源
7 o+ E$ @: v3 E. j, {    int_id = UARTIntStatus(SOC_UART_1_REGS);
+ T8 l7 i! |7 Z7 |    // 清除 UART1 系统中断+ Z. K' I6 f8 u+ R9 i
    IntEventClear(SYS_INT_UART1_INT);% `: ]+ f1 u* i' l
    // 发送中断
& {9 O: s5 q; O0 H1 G1 A    if(UART_INTID_TX_EMPTY == int_id)
- C1 H+ N: t$ [8 ^    {
; ?- x1 P7 d& i8 D: P* k        if(0 < length)! D6 P  t+ u. o4 I4 k/ o
        {3 T3 k9 V. A! Q6 w
            // 写一个字节到 THR
% l0 q  [& }) O" X, o$ ~            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);1 r" b( y- ?* r: A3 e; w
            length--;* [, D, ~! @# H5 J
            count++;, z; a! q  d% O6 |' h7 x
        }, Y9 B9 x7 K  n& o5 H( n$ v$ c7 f
        if(0 == length)/ ^5 I, y8 F8 q/ J; d
        {( R3 L+ g) O' `6 R% Z
            // 禁用发送中断6 Q8 ~: A- G1 J& f5 x% m9 V
            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);9 U# T6 m& @9 {4 v- W7 [8 l/ r
        }) V& B- x4 ]% a" R" Y
     }* _0 A. Q0 G/ J( i, z; L
    // 接收中断1 G& p2 \2 L  {) `
    if(UART_INTID_RX_DATA == int_id)
) l: X) R( _4 V  Z    {3 h* N1 Q. p: A/ f2 }3 t
        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);; g# z( k7 |# u% Q
        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
  ?& j( k6 w* ?    }& {* N% i3 d8 N3 M. @5 V: i' }
    // 接收错误) V7 Y+ Y5 B( _0 @6 S+ f+ A! j6 {
    if(UART_INTID_RX_LINE_STAT == int_id)
0 V8 N. `1 c" b2 j. y7 A- i    {
9 G  ~" G0 T4 W  r( L3 C0 K        while(UARTRxErrorGet(SOC_UART_1_REGS))
) v8 T" I! c7 `5 h        {, n( ^& {0 M3 u. \) h/ J" D$ H
            // 从 RBR 读一个字节
: k6 p6 {8 x7 N9 T% `0 |/ f            UARTCharGetNonBlocking(SOC_UART_1_REGS);) ~" s' S1 S) Q0 h9 c2 n4 p
        }
; E% h3 [  Q$ B& e8 A) ]0 b. L    }1 C6 I& c; ]7 P$ I& o, f; g9 f. @! O
    return;/ }( }4 q- U8 x6 r4 X
}" K3 W  D: d6 I* J9 t( u
Int main()# g1 O& B( V. j* m2 D+ {" Y9 \5 g
{
! s2 `9 p- r0 x. y. _& j2 c7 P' r UARTconfig();//uart 配置
2 ^2 ?! g" y8 c6 h* e0 t6 a    Error_Block eb;& o0 M+ L; B* y% C8 w4 F: a7 T
    System_printf("enter main()\n");
, n' {8 t1 K3 n4 |  D% Q  o  K: t) I    Error_init(&eb);
( Q5 d6 c2 y, y    // 动态创建硬件中断
& @8 Z& |0 {2 {! q( U7 w+ G    Hwi_Handle hwi1;
, o! R- n6 D  q: Y/ V% b2 T/ S- \" C    Hwi_Params hwiParams;/ `( V0 I/ S9 h. c3 A* N$ g
    // 使用默认值初始化参数
1 X& }$ E0 `7 [  x( i, q* C" ~    Hwi_Params_init(&hwiParams);
3 j8 v/ F' g7 m( t. Y2 |    // 中断事件
' O' N' l9 J# ]0 f    hwiParams.eventId = SYS_INT_UART1_INT;
- O8 c+ q/ C* l  N+ n# h) h    // 传递到中断服务函数的参数1 n( X& c, B- n3 n' q! ~
    hwiParams.arg = 0;: d' s- \6 f8 e- b$ e
    // 不允许该中断自身嵌套; E4 X$ M* U0 ?3 U* O
    hwiParams.maskSetting = Hwi_MaskingOption_SELF;6 c8 E0 M+ i2 a9 }4 n% n
    // 使能中断4 @, A2 ~' F+ K& M
    hwiParams.enableInt = true;/ {; ^) ?* ]/ V$ [; X' j" i
    // 可屏蔽中断 4' G, p) {& M0 [' J1 L+ e7 {
    // 中断服务函数 hwiMain
; e7 n1 w& o- `' B' m6 }- P    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);: G, R" H% D% P" }1 u# l
    if (hwi1 == NULL)
  ~# `8 S, d8 J) `' m        System_abort("Hwi1 create failed");% h/ S! V9 k( r( o
    BIOS_start();    /* does not return */
! B2 @5 ~. Q7 I" T    return(0);
0 H  A- K( R) {% }' A( C  L, r}. [/ s1 J3 a/ G+ C5 Y

9 [# B! Z% M9 z* H9 i5 Y* O
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?
; {1 k  M( m- r* O% r
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点% H/ w5 n& w! ~* H( i: L7 ]
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49
& B) ^4 p) o2 m+ M1 Y5 ^) l* }在中断服务函数里放置断点

+ a1 G; M" T- g& T2 w' H6 l参考 GPIO_KEY
+ m& m2 T+ r) j- P  `# E
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 22:18 , Processed in 0.038573 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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