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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下
  q: D2 t1 B4 {* r8 x// 发送缓存
8 }, M; C, \; v$ v0 j5 Ychar Send[] = "UART1 test......\n\r";- q7 B4 J' q( c; w, j6 k9 @8 K! I
5 S2 Z/ \+ [! n% Y# k: }0 C
extern void UARTconfig()' n9 }# K3 l7 S
{
: Z5 g& a1 [4 u2 K: x7 i8 G //使能Uart1
! M4 f' r( f( S. i7 v# p" Z PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
- L* d; i  V$ o( G! i - r7 b! B6 h7 \  `& ?
// 使能 UART1禁用流控
. v: q1 p$ j$ e/ L1 o, S' j* { UARTPinMuxSetup(1, 0);* c' r# |' s0 y1 {2 N
$ P% q4 O9 @) ^, u$ o6 d$ @- l4 r% [
// 波特率 115200 数据位 8 停止位 1 无校验位$ Q9 [! N7 l5 Y! s7 ?0 X# @
  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
% u. d! E* o' X& Y4 E: t, J+ R% y& l" _
9 D/ b" U$ @% d( Y6 P6 z- a3 ]7 J# ?2 s# o  // 使能 UART1
- N% j8 a# E5 s" P& D% U% I UARTEnable(SOC_UART_1_REGS);1 t. W, [" `2 N, a! _9 O4 Z8 e
  // 使能接收 / 发送 FIFO) \% m6 Q- @, Y  g
  UARTFIFOEnable(SOC_UART_1_REGS);
, g7 Q- E7 u0 W5 |! ?  // 设置 FIFO 级别
) t5 ^$ H( i' {% t. G+ I    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);! [0 N' H0 p' b, Y' M
  //Uart1中断使能5 @8 ^" v: J. X  M
  unsigned int intFlags = 0;
2 {. M" @: R1 e+ t' E9 C  intFlags |= (UART_INT_LINE_STAT  |  \4 y1 ?5 \3 D; L: s* ~, `! l3 m
            UART_INT_TX_EMPTY |    \
, P3 b4 h3 {& f9 t7 A1 H6 c2 A8 N- Z            UART_INT_RXDATA_CTI);
  |; V5 h% P4 j# {: L( a            
6 B# C9 l( M6 r& M+ \* {% j    UARTIntEnable(SOC_UART_1_REGS, intFlags);7 v7 C, E  B5 z0 {+ X, ^  S9 t- U
}, z4 T6 d) V" ]& @! K* D
//UART 中断服务函数. S$ A4 F, W, U4 ~! R. V
void UARTIsr(UArg arg)2 Q( e5 ?: D; H9 m. p' k* @5 d
{  G* Z) d4 n/ ]  V9 p
    static unsigned int length = sizeof(Send);
0 C3 d  l; r- e; b( |% ]! V  K    static unsigned int count = 0;+ G) _' [0 S* }
    unsigned char rxData = 0;
- t! ~- O5 f5 Y- S/ W& @* ?+ y    unsigned int int_id = 0;
6 s( Q( l4 D2 d: `& G    // 确定中断源
& ~! ?" K. \  y7 U0 n: l    int_id = UARTIntStatus(SOC_UART_1_REGS);
4 \1 u9 [4 M$ N" b    // 清除 UART1 系统中断
4 k6 s7 i' `+ h- E4 l0 C1 H    IntEventClear(SYS_INT_UART1_INT);# G$ y+ S; c; K, @& K6 r( H
    // 发送中断6 h3 m1 ?+ _) U- m. T# T2 f
    if(UART_INTID_TX_EMPTY == int_id)" t, [( T0 |' h; ~! @+ ^
    {
+ R0 F% ?5 v& ~0 V& U        if(0 < length)5 r  G/ w# d7 `' a+ r
        {
  `+ e3 Y6 \# F& B            // 写一个字节到 THR
# n4 D0 i# p7 X4 k, Q% ?+ V* h# q            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);' o; i$ J' B4 p' q
            length--;& y/ l9 g3 u* a4 i
            count++;2 Y+ T/ [" `2 A/ s
        }8 l5 r5 R/ r- L  l
        if(0 == length); k+ Y9 o+ R+ S) e( P8 n2 o
        {+ V9 ?) W( |1 c: R7 d
            // 禁用发送中断/ L4 e# }7 X2 ~9 ?" L
            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);6 y* ^7 D: ]8 x# L, E$ @
        }, m5 p1 x# v+ q
     }3 \5 n% p8 P0 V' R  t
    // 接收中断; h3 c. D( V2 v  ^, I6 E" }# D  K. X9 }# J
    if(UART_INTID_RX_DATA == int_id)
1 k: y( A0 g3 V& V! }) n    {$ u& K( P' l; l9 R' ^/ O2 }
        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
0 I8 z% s' ]6 P: y) @5 D        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);/ [2 M2 e+ D  l2 u5 N
    }) k6 F! {  }( R7 p% a
    // 接收错误
2 N1 e4 U& i/ ]4 T2 a/ T2 h    if(UART_INTID_RX_LINE_STAT == int_id)$ k7 b* b( ^, H/ O# \2 _1 J
    {
7 A' i, \5 \# M        while(UARTRxErrorGet(SOC_UART_1_REGS))
6 P7 U9 l8 ]0 Y9 v3 K        {
0 _% n2 }/ A7 r            // 从 RBR 读一个字节/ o9 T  e( L/ E7 X& m" U5 D! R
            UARTCharGetNonBlocking(SOC_UART_1_REGS);
, N) z$ X, O0 [8 D# ^: a2 v        }9 C4 K5 Q1 j% |1 F
    }
3 z% T- S8 |+ y& l& L/ h+ v    return;
  C2 q5 c( s; x. n8 e}" M3 I1 [6 Q1 w: B5 M% B
Int main()
: C/ p0 o( @( Y0 G, F8 E3 t' a{ ; W! I( A' i2 L6 J% T8 A( Y* y
UARTconfig();//uart 配置
- Z: Y, q4 q' h: k    Error_Block eb;
) Q1 l" F! L! C0 {0 M+ G    System_printf("enter main()\n");( \8 _- ]6 K  C" \+ k$ Q
    Error_init(&eb);5 v2 i3 _5 d% A) v. |8 D
    // 动态创建硬件中断
0 `. j4 O3 U& u8 ^& h; d    Hwi_Handle hwi1;
* \: V6 a! U8 y2 ~    Hwi_Params hwiParams;
* q& i0 B* Q" I. ?2 f; A    // 使用默认值初始化参数
" Y8 D& K0 ?0 L# V% b    Hwi_Params_init(&hwiParams);9 M# p/ E8 ?& a! r
    // 中断事件
) O8 U5 N! I, v% w: Y+ f    hwiParams.eventId = SYS_INT_UART1_INT;
1 D! Y% ^; F. {4 L7 _. T' o    // 传递到中断服务函数的参数
- k6 G9 ]/ ~+ U3 i4 |/ `    hwiParams.arg = 0;! ~) `- U* n+ Q# Z& q5 @2 y
    // 不允许该中断自身嵌套; W% @8 Y% N& G* p5 h3 @
    hwiParams.maskSetting = Hwi_MaskingOption_SELF;. @" `  _! N" s" }! {3 R
    // 使能中断& }( M8 R+ f% Y- x; p% j
    hwiParams.enableInt = true;
) T. o! Q, y4 i7 H) I    // 可屏蔽中断 4' h8 U* ]$ o- t6 l, b
    // 中断服务函数 hwiMain$ ~, a! I: e* Z3 o* u6 i
    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);1 X- E) K  v7 U& A5 b" o
    if (hwi1 == NULL)
$ E. U& l/ |9 z5 D; }        System_abort("Hwi1 create failed");9 C1 ^: C( {' i& P0 e: s
    BIOS_start();    /* does not return */
# D& b% g4 m9 ~% X4 a/ c    return(0);; |, k4 m% G* U/ |8 M( ?: i; z
}
: m* d. z# i) ?
( o2 h' V, Y6 |3 s( R/ b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?% c( ^. A- ?- ^. s
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点
% C0 @4 [1 W2 W9 E3 o
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49
5 c, f/ B6 X8 O# u+ L# j: F在中断服务函数里放置断点

% N$ t) x, t7 h参考 GPIO_KEY( n) y% J( \& G8 q
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-19 20:08 , Processed in 0.038089 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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