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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下. y) r! W$ R8 N' i$ L
// 发送缓存
# P* }6 Z+ _) a# T; n, Vchar Send[] = "UART1 test......\n\r";8 f- T5 p1 X; O0 Y$ D

1 D) }+ }8 B5 Kextern void UARTconfig()" r- v& P. C! L8 U
{
9 C8 @3 ~& `% I( i" C$ t. O //使能Uart1
1 j% n6 C1 |) s3 m' E PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
: p( _$ d, F! o* f# N
$ J( x( }5 y5 s1 X- j5 H) V7 y // 使能 UART1禁用流控
! t2 }2 v; T: X, n- Q8 l/ U UARTPinMuxSetup(1, 0);
1 ?: P8 H/ G- J" S  M- a + `& v5 z/ k; F4 T; A; l# R1 J
// 波特率 115200 数据位 8 停止位 1 无校验位
: h/ `" |' p* g8 \. n4 j9 D8 W  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);2 m# `. P0 }( G+ n" J6 I7 D

( P6 K7 d6 o4 k  // 使能 UART1- }: d" v% S) L- ]# @2 n) W( h0 C
UARTEnable(SOC_UART_1_REGS);3 P8 g  r' J: p4 n( l- q
  // 使能接收 / 发送 FIFO! c/ C& i; y# x, M
  UARTFIFOEnable(SOC_UART_1_REGS);" u1 `7 O& q# z+ ~2 @: G
  // 设置 FIFO 级别2 ~. L( f3 g! E9 T8 d. E. P
    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);
6 W! A% w8 h9 T! R. c  //Uart1中断使能7 j' \! {1 G/ O! V3 H3 F9 z
  unsigned int intFlags = 0;
8 K4 @+ X8 `3 N8 P# O  intFlags |= (UART_INT_LINE_STAT  |  \
! }+ b% F1 m0 O- L) r$ n            UART_INT_TX_EMPTY |    \
$ I  O% j9 u$ O5 w' W            UART_INT_RXDATA_CTI);
7 h& V& r+ f3 m1 m" f; o            
( q9 `9 q" E8 \- {9 X" V! {/ F    UARTIntEnable(SOC_UART_1_REGS, intFlags);% h( @- Y7 M# T# f5 X3 M
}  F' a. C  B. T; j
//UART 中断服务函数0 a2 n, `7 d1 J/ W. F) I
void UARTIsr(UArg arg)( X- y3 C% d& s) g5 t; }1 y, {
{
$ U3 U, S$ i3 ?4 k5 h    static unsigned int length = sizeof(Send);
, S1 k$ ^' ]- }5 q    static unsigned int count = 0;! z1 i8 C+ I. n* ]/ a5 v
    unsigned char rxData = 0;1 B' m* N, A8 X  m3 t; I# ~
    unsigned int int_id = 0;# e- G. E& {  W8 b9 W3 |) B  }: }
    // 确定中断源
) I5 Y6 Y& L# C    int_id = UARTIntStatus(SOC_UART_1_REGS);& ]# A; x1 G+ G$ I' Q6 b
    // 清除 UART1 系统中断
. k# |8 ?8 x* Z$ r. w3 |% S% T    IntEventClear(SYS_INT_UART1_INT);
) y& j5 c! R8 d8 D$ I$ R* a    // 发送中断
/ R3 \0 F1 R1 }( X$ {    if(UART_INTID_TX_EMPTY == int_id)2 U: r% A: v1 Z& `6 N  H4 x3 L
    {
1 o# |. y' K( g# O        if(0 < length)7 B- i$ }/ }$ ^/ J9 n" Y
        {
" B3 A& @+ e6 L9 a" [            // 写一个字节到 THR
& [+ M3 j0 l& w+ f            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
# k- ~" v2 g+ j3 d8 m            length--;0 Q3 }/ ?: G0 ?4 m
            count++;
& X, o; C1 i9 n* x: k        }) G2 J7 f: n/ A! V+ i9 p! |$ E
        if(0 == length)
9 n+ B& S9 ]! l2 m/ ~        {
4 l0 U, ~5 t6 r9 {: q            // 禁用发送中断  M# `- P; [8 t! p$ c! R
            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);# p0 k" Y  O* I$ Q# H5 H
        }8 V' I0 {8 X" J# ^
     }7 h( i6 r( t' ~9 I" Y
    // 接收中断
$ Z4 ]; E: o- Y; s) d+ w+ `- U# T    if(UART_INTID_RX_DATA == int_id)
! A& I1 z' d/ l: ?    {% z& j3 s( i1 s5 X) o
        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
  i6 L; N0 L% V2 o! C% t1 ?        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
5 q% E: p" }: [' @# @' w; O# C% |    }
+ B6 s' a) h' {3 r    // 接收错误
+ e- K0 b3 M& y  [3 s6 @/ t    if(UART_INTID_RX_LINE_STAT == int_id)
2 ?& G  d. E5 _4 v9 _5 B    {
( b- ?/ @3 e8 b  o- u        while(UARTRxErrorGet(SOC_UART_1_REGS))4 q$ r2 \7 Q, v" z, d2 ?6 B
        {
; ?+ `6 M8 M0 L: o* z; I1 H            // 从 RBR 读一个字节7 N* ~! O+ l& T6 ~3 e
            UARTCharGetNonBlocking(SOC_UART_1_REGS);- n# m# e& V1 P: G% H
        }$ D: T7 b9 X. M; R7 o8 F! }/ X
    }, j- r+ g5 o: q' ^0 ?# ~* b
    return;
' ~* U; c  F- Y}5 a/ j$ B6 K1 Z( P4 e+ s! p$ b( R
Int main()) Y2 b7 i2 ~6 b, X1 l
{ # Z5 Q  D* `7 V8 A. Y$ j, d
UARTconfig();//uart 配置
2 d( \: ^; s- @7 W1 R$ ]    Error_Block eb;/ W8 Y4 i9 q. d% n7 g" K4 k0 Z
    System_printf("enter main()\n");/ Z; V' U4 v5 B
    Error_init(&eb);
( ]3 I7 K) q1 |  Z4 J7 Z7 V* x. y    // 动态创建硬件中断
- s6 y. U$ M9 J2 h7 @) F    Hwi_Handle hwi1;
  ~: S7 R/ F+ p1 v9 c9 p    Hwi_Params hwiParams;: @/ B/ X/ z4 a
    // 使用默认值初始化参数' X4 }9 |" s) P! J
    Hwi_Params_init(&hwiParams);
/ m: n( a$ D1 P$ K- l    // 中断事件7 l+ c! g4 L* h/ ]( K& ?  n' H) `
    hwiParams.eventId = SYS_INT_UART1_INT;# A: |* ~7 b  W) r5 T( o& q
    // 传递到中断服务函数的参数
6 c) L9 n$ f& T  R( x1 D8 q    hwiParams.arg = 0;% M6 u; A; K2 d( H% X
    // 不允许该中断自身嵌套1 u- Z) `* {( u
    hwiParams.maskSetting = Hwi_MaskingOption_SELF;* c) g; X& e$ A
    // 使能中断
7 b* \2 ]2 i) p/ Y: [. Z( k( d1 \    hwiParams.enableInt = true;0 d% W! @2 k. I" o2 [
    // 可屏蔽中断 4
/ E! H) W+ Q: u' N; s3 w5 M1 l    // 中断服务函数 hwiMain' ~. I! I6 i! p  S6 @/ X1 S; y" _
    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);0 x  k7 k* y# v) q# V
    if (hwi1 == NULL)
' A  `; t. v8 x8 s4 g        System_abort("Hwi1 create failed");, C& {0 U% b5 x
    BIOS_start();    /* does not return */
0 Q- |) q! l, |5 @    return(0);
! t; a  H$ P  N5 r6 h8 e}
0 P- s9 i$ H- {' a: h2 g. K- R7 e) |" W( {, `% B$ @' u# E8 H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?" H7 ^4 M* t- v3 v: z: Y) j
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点
7 u0 B: K# h8 |5 I
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49# y. T# t0 K9 B# }9 B! E' E
在中断服务函数里放置断点

- K. v3 X4 [" m- b6 M) E' O7 j5 C" O参考 GPIO_KEY
# o  I6 N  q0 Y) b/ T" w' f
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 20:14 , Processed in 0.039430 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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