在sysbios下,uart中断收发数据,程序无法进入中断 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下
% s7 z8 n& m! T" S( d. N' ?9 _// 发送缓存
8 K  H" q7 u' Y) i& qchar Send[] = "UART1 test......\n\r";. p$ z. Z& q/ b% e* j& l% i5 C
) o. ~5 n# D$ Y
extern void UARTconfig()8 h8 z5 d, C! ~4 r* L$ C) W( C
{
" M0 a- k: F' z) |" t5 ` //使能Uart14 a1 G: W1 _( _3 |0 {
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);+ |) I8 Q% `1 O6 y! z" r1 H) t# U

/ |4 R6 J% d& z% C# B$ D, U0 [ // 使能 UART1禁用流控4 z' Q# z3 N% \- D# O& |- O
UARTPinMuxSetup(1, 0);. M  v5 \7 n+ D; p
4 m* P% d+ ?; @" U. X/ z( G6 I& C* H
// 波特率 115200 数据位 8 停止位 1 无校验位
6 ^# {: ^# B/ `: j: f$ i  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
$ D! S  ?8 O! u. `8 H ; Q( H/ P0 t; m) U) Z
  // 使能 UART1) j: _" A% B# B
UARTEnable(SOC_UART_1_REGS);, j4 `1 k9 C- h* P: b" Y
  // 使能接收 / 发送 FIFO
  [& M& H- A! L! g; U# I, B  UARTFIFOEnable(SOC_UART_1_REGS);
( l6 I/ U+ n& z) @1 O7 I2 {2 F# s  // 设置 FIFO 级别
0 Q/ W7 d# D" d+ I    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);% w; Q) Q/ ?, a1 Q, |+ S' F
  //Uart1中断使能
) B" E4 X; `0 R* ]( ~- Y  unsigned int intFlags = 0;. P5 ?  U: Q5 a! T2 S
  intFlags |= (UART_INT_LINE_STAT  |  \6 K8 n, d) A) [' `$ F
            UART_INT_TX_EMPTY |    \
) m: d  o2 F5 G$ [. k6 `6 {            UART_INT_RXDATA_CTI);
) y* o$ f/ s2 a( H7 c            
: e7 [0 Y" j% ~6 e+ _$ P# T# p    UARTIntEnable(SOC_UART_1_REGS, intFlags);/ E0 y; j( t, c9 O# p. D' h! L
}
4 p# G$ y  F! N, [! z//UART 中断服务函数
: ~+ X5 ~& l0 h7 @( |+ t% Zvoid UARTIsr(UArg arg)
, w/ p; F" S4 B" w! R+ B{4 q9 k9 l+ o; P( L; X4 `
    static unsigned int length = sizeof(Send);( L' U1 ?- g! H6 f
    static unsigned int count = 0;; Q$ C+ w; D% W0 a# {- g4 {0 X
    unsigned char rxData = 0;
2 I' M: u" c  q& c+ L2 n; l( E& S    unsigned int int_id = 0;) }5 F( Y' {2 X8 h7 t0 k3 I; X
    // 确定中断源+ T. M! d+ ?( A. h) j% f8 e) b
    int_id = UARTIntStatus(SOC_UART_1_REGS);& w1 T  p. m1 W& k) v
    // 清除 UART1 系统中断7 W* k6 r0 y9 x( V  G
    IntEventClear(SYS_INT_UART1_INT);
, K. o2 H7 @4 {' i4 |( t    // 发送中断& W* _; _" Y- u8 ~7 v- J8 f0 U
    if(UART_INTID_TX_EMPTY == int_id)
8 X" Y8 f( ?4 C( ]. k# _5 ^4 e    {
8 X8 m8 e8 y/ L0 Q: O# E  W        if(0 < length)
# E6 k$ G$ ^. r        {
  A5 a0 N' b# u% F5 t            // 写一个字节到 THR; ]0 |4 f& N% o' [& R
            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);1 r: t: C( |9 ^3 M
            length--;
" ?+ n* G; m# \2 o# p- q            count++;3 b& S, i& f. E( Q8 d2 e& E$ [; e. v
        }
, [0 n, G  S0 P: ^, a- B        if(0 == length)
7 c9 e7 `4 {+ D, u8 H        {
5 X3 E+ n0 N4 Q" w7 J            // 禁用发送中断
) u, l6 ]4 N" C9 z2 u            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);! W- a: ], \% ]0 k
        }' a# p0 \8 `6 E) \
     }6 A  X8 {0 m' c( E: D' G' {! ^
    // 接收中断" S) `% D, B9 G( \. B9 c" x; L
    if(UART_INTID_RX_DATA == int_id)
9 ~/ X0 X3 c7 e7 Y    {
8 w* t; U7 J5 X1 U. E        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);5 t8 e$ Z/ O5 J& x8 K6 H& X6 M7 T
        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);- I9 _. ~$ l# A$ n2 V% _& w
    }
- h- `% ~, u) @0 c4 \) M    // 接收错误6 v4 V  ^/ I' o7 r! }
    if(UART_INTID_RX_LINE_STAT == int_id)2 Z) t. `3 N5 L, k6 f' v9 w2 V4 m
    {
; L$ B3 L+ r' y; `. x* v9 r        while(UARTRxErrorGet(SOC_UART_1_REGS))
! ]: K8 ^& `. x$ K        {
5 k1 H. ^! x% g$ ~7 M$ E; G8 Y            // 从 RBR 读一个字节* N; U9 I- s1 w0 a0 T( h; g
            UARTCharGetNonBlocking(SOC_UART_1_REGS);
0 I6 I9 J5 a% O- R6 g        }7 I8 M$ e. x% m
    }
1 D, p% T8 M* l* |0 F) N6 m    return;
& O2 A$ e! ^  S}- F* k+ v/ z3 e9 {) \; I7 |+ M$ e3 T
Int main()
7 Q4 L3 R9 K& ]6 \- z& o{
/ P3 ~4 u" T, e9 D/ f5 v& Z) x UARTconfig();//uart 配置
* {$ ~2 P4 X, Q9 k+ _$ _3 f' l    Error_Block eb;" r. {! N1 C0 g9 n0 q7 ]
    System_printf("enter main()\n");3 c& s6 d1 C& d( @
    Error_init(&eb);; G5 A0 n  n0 b
    // 动态创建硬件中断: v* [# Z) G- {" j, i3 U/ k
    Hwi_Handle hwi1;
4 f. c: d, l7 |0 O/ b    Hwi_Params hwiParams;
& S5 N: H1 Z6 V" W* t    // 使用默认值初始化参数
+ Z, ]& l4 M! @( \! Z    Hwi_Params_init(&hwiParams);( o, V# r/ I! t# F5 J8 |
    // 中断事件# _) r" C6 h8 M
    hwiParams.eventId = SYS_INT_UART1_INT;9 h: R/ y8 {* _' I
    // 传递到中断服务函数的参数/ w. j* P8 W) v/ g" ]5 W
    hwiParams.arg = 0;2 j- G0 P. G. W% [/ ~7 v
    // 不允许该中断自身嵌套  |1 E# J; G* T% D9 A
    hwiParams.maskSetting = Hwi_MaskingOption_SELF;# I7 _/ Z  V! C& p7 v' C
    // 使能中断6 f/ F  `. U) i
    hwiParams.enableInt = true;
6 f5 o* P0 S- W9 ]' X- p% D    // 可屏蔽中断 40 K) f2 z; [' I9 A: H6 z
    // 中断服务函数 hwiMain
- B8 {$ n/ _( A& A6 [; u! M    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);3 O# I4 ?2 C2 x+ M0 q/ z, P
    if (hwi1 == NULL)- _3 @: X* j$ i9 [* p% v5 T- G5 |
        System_abort("Hwi1 create failed");& N; B2 V  G$ L
    BIOS_start();    /* does not return */; Q* Y# Z: q+ e! i
    return(0);
2 R) g4 E1 v! d4 u# h}  s6 }( Z3 y. q' `

' j3 I  N( g" e9 \/ M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?/ k  |/ a/ d" Q7 T. P  g0 w
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点
3 _- h* R, n* D; h5 ~/ L' G
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49) p4 P4 l$ R# H& R7 d
在中断服务函数里放置断点

5 H. T6 L1 |$ q9 K" i4 Y% p参考 GPIO_KEY
) ^- h! e0 s! s* w! ?' u+ U
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-17 02:41 , Processed in 0.041677 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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