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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下7 n  p/ E9 H: m7 U0 n; b$ w+ y8 T  M
// 发送缓存
' Q4 C  c: S3 S0 n5 p* Fchar Send[] = "UART1 test......\n\r";" P. L: b5 V$ M- T) L+ E

; s6 Y0 h  ]4 F: Bextern void UARTconfig()
3 ]- Z' a% T7 z; o7 v{
; P) z! m- f+ h/ C, i //使能Uart1& I5 A; S8 Z) \& b
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);% S; A4 z8 f' p

" J8 q5 Q2 p8 F" n // 使能 UART1禁用流控
( w4 s# M  R# Y# b0 q UARTPinMuxSetup(1, 0);
! o8 s/ P; V" r. z7 g! M 0 a) Z3 ~8 l' k/ m
// 波特率 115200 数据位 8 停止位 1 无校验位
- W1 f# r6 k( f1 G7 m  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);" ^7 ]3 T- d4 Y2 {7 S+ C

6 q2 M$ {* g+ C# b. `6 z  // 使能 UART18 c$ o& x  t1 `) z  ^) Y  N9 O
UARTEnable(SOC_UART_1_REGS);
4 D. E% J9 x: G! `# z" H  // 使能接收 / 发送 FIFO& Q' L( w% P+ d1 _
  UARTFIFOEnable(SOC_UART_1_REGS);
* G/ g5 w& Z! N; e: q  // 设置 FIFO 级别* L: N+ O/ S8 ?3 W# j
    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);
% J( P5 V3 G8 o5 i  //Uart1中断使能, a! u. T* J2 c9 a
  unsigned int intFlags = 0;3 M  L1 A- g' @. j1 T
  intFlags |= (UART_INT_LINE_STAT  |  \
& d, t- D9 e5 k9 `: D5 X9 C7 m            UART_INT_TX_EMPTY |    \  q  v. _  F8 P5 S% C( x  c
            UART_INT_RXDATA_CTI);7 P! A; S7 |) l  e* f5 G) W8 N
            
# Q; J3 z( ?- @" E5 G& Q6 H, X    UARTIntEnable(SOC_UART_1_REGS, intFlags);
3 _# r" S3 x# G+ C0 c. F* C, @}
1 C# Q' V# d! a( R& n5 S1 R5 c//UART 中断服务函数$ F) l4 F3 C0 f
void UARTIsr(UArg arg)' m6 M2 y/ W$ q. w4 Z! g
{& @  u7 X: `' @6 b
    static unsigned int length = sizeof(Send);
/ @% A0 d- q! J' `6 L    static unsigned int count = 0;; I+ E' x- p: L3 J: i$ n
    unsigned char rxData = 0;
# J! h5 _( w% ]* N, a7 ~  x; p* m9 V    unsigned int int_id = 0;: M1 M/ A+ Z, |. g  v# @+ b
    // 确定中断源
" n% @% O$ A6 B* S% J6 H, O7 `    int_id = UARTIntStatus(SOC_UART_1_REGS);$ @1 [& i- p4 k3 X* D+ g9 u: \
    // 清除 UART1 系统中断' U, m9 V: \) J$ N5 l, i. L
    IntEventClear(SYS_INT_UART1_INT);
6 I0 E! H8 J. C( r    // 发送中断3 A  f5 ^5 N# {0 v/ ]7 {
    if(UART_INTID_TX_EMPTY == int_id)
; B4 F+ s" a' T8 ]  w* z$ W* @/ _    {
6 D, M6 U' }; ?3 c- ~2 e/ b        if(0 < length)$ d/ w$ F9 B8 I# x, h
        {) J) b3 p4 O( f- b& |
            // 写一个字节到 THR
% w( N8 ]  S: m, \+ g  @  y            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
1 X! s: z3 b* s+ I            length--;' D7 [  ?# R$ @' u5 Y# T  O; K
            count++;
, l: I- `2 i7 A" Z7 q1 [0 X        }) ]/ A8 e( B$ M; E6 a- Q. |
        if(0 == length)0 P9 l+ S, T8 N% ?8 q8 n
        {; ~8 u+ n, M* `3 O7 r4 j
            // 禁用发送中断2 I' f  U0 S' A7 A1 {
            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);. p. G$ y9 a* ?7 O8 @3 y8 H3 d
        }
8 U7 `* E0 p& h" a     }
  O( I/ g! G- h  x* X/ a    // 接收中断
: O$ u: ^3 k2 W, ?# B. }3 B1 L) \    if(UART_INTID_RX_DATA == int_id): d- `$ S& j$ S
    {. R: u9 g: I3 g( b: y% o; T6 T- D
        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
4 |. r6 p0 v# G* c        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
: O3 D4 j7 t, j% [% e    }; C  t$ W( w' Y, V' m' \* S
    // 接收错误
$ x+ w* t  i+ l, ]$ ?- @    if(UART_INTID_RX_LINE_STAT == int_id)3 [' X8 [/ h0 s: s2 V; ^- z8 k; \
    {0 q% i  w7 n% v/ L& Y' R6 T$ X( l2 q
        while(UARTRxErrorGet(SOC_UART_1_REGS))
  _# A9 B& F) n( {# @6 o        {
' I5 N- ^% X. |$ L' z  O, Z            // 从 RBR 读一个字节0 M" S% {! B7 {" J2 E1 k6 q
            UARTCharGetNonBlocking(SOC_UART_1_REGS);
% k6 Y9 o% F; c7 l: G* i' u        }
2 u: U: `) }% S* q+ |    }7 C2 f% l4 ~! _) F6 [
    return;2 T! t& ^0 i) D6 R8 a! w1 {
}) q9 V& L1 F: X
Int main()
5 j3 H7 a3 u( R8 K* X{ + A) ~4 E) v8 M2 g) v# p
UARTconfig();//uart 配置
- @0 @  ?  }1 C4 h/ _9 u1 V    Error_Block eb;
5 g0 F4 {( ^: @* ~    System_printf("enter main()\n");
6 Q; Z: Q- C8 a. I. R' V$ r    Error_init(&eb);" S% D! C" B6 O, F* y8 Z0 g5 T
    // 动态创建硬件中断2 v2 z* j! g. T" G
    Hwi_Handle hwi1;
! C! r, q# ?; b% @# `8 n    Hwi_Params hwiParams;" u$ e/ \( I+ M5 e+ ]+ w3 |
    // 使用默认值初始化参数; e- d& J" b. D  M6 r
    Hwi_Params_init(&hwiParams);( l- a6 K& e) A" j9 j
    // 中断事件
) y  w! F- s) Y+ t8 Q    hwiParams.eventId = SYS_INT_UART1_INT;- q) |/ R0 x+ u1 e' ]/ Q
    // 传递到中断服务函数的参数
; u0 e: y9 [2 U/ {! y4 ~# O: g    hwiParams.arg = 0;5 q( ], g" m9 @) R0 F) O
    // 不允许该中断自身嵌套' v! S/ X, J; g" J, ]9 A) {" Y
    hwiParams.maskSetting = Hwi_MaskingOption_SELF;
/ h; V: `& s4 ]' n( H+ e; z    // 使能中断
7 c* J! ?9 _  J1 \* c4 k7 Q( h    hwiParams.enableInt = true;# w: D: X8 S0 X& S7 j0 a2 c; q" G
    // 可屏蔽中断 4# w& n! E  \! t) |* v) R
    // 中断服务函数 hwiMain
- y% U9 N: o* d, G! Y# q" \3 ]    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);! N: Q" b, Z  U8 \5 R3 L# U
    if (hwi1 == NULL)
7 @% @+ [3 q+ s        System_abort("Hwi1 create failed");
0 i) M  z1 |7 Y1 O    BIOS_start();    /* does not return */8 O& x1 `4 ^6 G
    return(0);0 j; A& Y" M! ?/ A. I, X
}
# A" k4 k( }8 ^8 `
, {% ?+ B+ x) D9 j, B- Y0 M5 P
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?
& e/ \" {2 N+ c* u0 n6 j" `
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点
8 @/ P/ M6 l3 \$ q, m
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:499 c" a# R) d* W0 ^: C, X+ o6 f
在中断服务函数里放置断点

$ D4 M& M% `/ A; g参考 GPIO_KEY
* ?3 n1 o' V& v5 ]0 y8 \$ S
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-1 20:51 , Processed in 0.040233 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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