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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下) E% Y# c! r+ O$ W! W
// 发送缓存
) N3 J2 ^. }/ s* zchar Send[] = "UART1 test......\n\r";# V$ ^! O( `* f3 x! s) K

$ D" |6 e, j4 i7 Cextern void UARTconfig()7 X" [% A# ~! a' p; T: O; Z( r
{
! u$ P+ u/ ?( B5 d4 Q/ @ //使能Uart1
- Z: u* n4 X: O; r  ^+ a- j6 H PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);& q! K: @; s( P/ D: M

. q3 [1 G5 M' f& }0 O6 Q( n, B( o2 r( | // 使能 UART1禁用流控4 I" T4 a( d# ^! Z5 Y
UARTPinMuxSetup(1, 0);4 a$ }  y! _& V' h3 a% v
& D& Q% b; z% q. g9 |
// 波特率 115200 数据位 8 停止位 1 无校验位9 u+ J7 q* @# k2 `' F7 H4 M
  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
$ e# h* U6 X' G- K- N9 x' \
  w' U/ d( f4 D. m. U5 O  // 使能 UART15 z9 t; g$ G  I7 c$ E. M8 X
UARTEnable(SOC_UART_1_REGS);
& I  O7 ?4 Y% D1 }$ b; g  // 使能接收 / 发送 FIFO  S( A1 w' \* Y9 U4 Y' G& @
  UARTFIFOEnable(SOC_UART_1_REGS);' m8 K! c2 [3 X6 c5 Q7 J
  // 设置 FIFO 级别
& Z$ G+ w5 g2 X/ c  `: N% z    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);' B# K! a9 P. F. Y8 P
  //Uart1中断使能
3 d6 `  i) Y& K  r( ?& n+ {" E  unsigned int intFlags = 0;
. Y9 t4 B# q. [( x1 F6 R5 X7 E  intFlags |= (UART_INT_LINE_STAT  |  \5 \7 P) X1 k+ \7 G  B
            UART_INT_TX_EMPTY |    \
8 W0 q7 w* w6 w; {            UART_INT_RXDATA_CTI);
9 \8 D: P# m% T5 Y            
% x! K2 w2 n, {. J    UARTIntEnable(SOC_UART_1_REGS, intFlags);- i: b4 d. l& ~9 I
}
$ l/ o, B" A: @* Q! z7 G- I//UART 中断服务函数& V! x; K0 z1 k% y( B* k+ c8 o. E
void UARTIsr(UArg arg)) O4 {% ]5 D' ^7 I) I1 ?
{2 X4 W; d, R1 N" W3 Q8 W/ u
    static unsigned int length = sizeof(Send);  l6 L  @2 E2 X/ i
    static unsigned int count = 0;0 @' [  g1 [9 f3 \
    unsigned char rxData = 0;: g1 j' V# k: k% H$ X
    unsigned int int_id = 0;5 ~/ Y  I' k% ?0 Q8 O7 W) \7 V
    // 确定中断源
$ R+ W. r% W& O, L: Q+ ?* {, ?5 Y    int_id = UARTIntStatus(SOC_UART_1_REGS);
% ~" ~) e7 S6 C* s7 E$ C    // 清除 UART1 系统中断, i8 G; o2 t0 j* m( G
    IntEventClear(SYS_INT_UART1_INT);
/ F  }6 V8 K5 [    // 发送中断0 P  l) k' j9 e' T( M4 p$ L7 w
    if(UART_INTID_TX_EMPTY == int_id)
) s! s4 f$ I# o    {
) _$ I) u7 @' U% j        if(0 < length)2 |& K9 u5 F  J0 _& d
        {( k; r6 d9 \- s* K* x, }' }
            // 写一个字节到 THR% o8 Z% o8 F4 b" n
            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);% ~$ b, M" i3 e2 Z* Z$ S
            length--;& }9 R) ?  b6 d' V
            count++;* X5 t5 T8 X: O& [
        }+ E/ E) L9 Y7 X& n; u5 ^9 d& d: D
        if(0 == length); i) c1 v+ G  p, `3 T1 Y
        {# f0 D, e- q7 G  E2 }* j6 v, b
            // 禁用发送中断3 W: u  v+ L  T( G- A
            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
: b0 x+ U+ C) q5 {        }
, A2 ^1 F! r  n; L     }
, k0 q4 v+ J7 f$ o    // 接收中断% C  ^7 ^5 }8 `
    if(UART_INTID_RX_DATA == int_id)
$ |8 h/ h: ^, j- C4 Q" }    {
  Q* `9 |4 {0 Q+ O0 x3 j& q4 W0 u) s        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);6 ^! x* {2 p3 r/ U- v
        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
6 t2 [: @% P" N: f    }9 A& F  |# Z0 f8 ^; X  h
    // 接收错误+ \8 M8 h1 c2 l' g2 p6 ?' f+ v
    if(UART_INTID_RX_LINE_STAT == int_id)2 A: ~0 w4 s9 i# P- I) x" e
    {
' Z" p& F, }5 I& v1 v        while(UARTRxErrorGet(SOC_UART_1_REGS))
( I8 C$ `$ O% O1 U' @& a        {
/ }( i0 t) t4 {/ \; c) w: R            // 从 RBR 读一个字节
1 n* S4 I- j% @6 \9 J9 n            UARTCharGetNonBlocking(SOC_UART_1_REGS);/ G3 P$ g& v3 k5 ^7 S1 a
        }+ O7 [5 \& R# B+ e- Z
    }7 R$ q" K5 v$ z7 G% ^2 A+ e
    return;9 I5 N  u: f3 N8 c
}: h6 d" w9 _6 m
Int main()' Y: C9 p5 E5 j; K! g* T( r9 }
{
/ U8 u; {' D4 p7 k2 z% S UARTconfig();//uart 配置
/ ~- |) k/ {1 d+ \5 g9 a% g3 p% Z    Error_Block eb;3 ^) ?. W0 ^7 x( E6 F! o5 {/ r7 q* R
    System_printf("enter main()\n");4 V( F( w7 O$ E. I9 K
    Error_init(&eb);
( ?  C$ a( N- ?+ B, Q; F/ [% p8 Q3 b    // 动态创建硬件中断
6 {- b3 Y/ y. T& }2 F. ~    Hwi_Handle hwi1;
1 I' p' D7 p; t    Hwi_Params hwiParams;
, ]+ i& ], h0 g. P) I    // 使用默认值初始化参数5 y; r' K( N* c& U( s9 [8 \( j9 A1 w2 y
    Hwi_Params_init(&hwiParams);7 E, h0 ~; X7 m- g/ L
    // 中断事件
7 U' X" }6 |2 Q  K2 l2 F* t1 O    hwiParams.eventId = SYS_INT_UART1_INT;! k( A' m( P2 Z# M2 k
    // 传递到中断服务函数的参数% V! f! p& j+ V+ L9 N- `
    hwiParams.arg = 0;
- W6 p- q! `0 W# s8 T& I2 b    // 不允许该中断自身嵌套
: b) ], {1 C% @. n  F; p    hwiParams.maskSetting = Hwi_MaskingOption_SELF;
) u7 {8 w# g) s    // 使能中断1 L+ F% a  M1 ]$ E
    hwiParams.enableInt = true;
: m' M) q4 k1 L# d    // 可屏蔽中断 4
- I* D6 b2 l" P) R    // 中断服务函数 hwiMain( _7 r( t  t( J- O& L
    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);
5 P3 ?3 z, N2 l$ n. C" Y8 \    if (hwi1 == NULL)5 [7 e1 Z6 r1 |! e: q( X- E
        System_abort("Hwi1 create failed");. J- ]) x- l$ _0 {! |
    BIOS_start();    /* does not return */1 L. \9 K+ T# k3 P; n# @1 s* ]4 p: F
    return(0);
: Q; @/ _; `+ j* i% ]! V( X}! i7 m/ E4 Y+ y0 W+ H$ |

, K! {* U8 {0 J# a
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?; |9 v& U; S: K0 ]& w
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点# `$ e3 j/ r8 [2 ?  M6 d) L! [
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49
5 Z$ A( {7 z7 L; W5 W$ ?在中断服务函数里放置断点
! L" K4 X' u+ G6 u7 n: Y
参考 GPIO_KEY
3 `5 \* s  H: T0 S6 p
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-18 15:15 , Processed in 0.041248 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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