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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下
5 A# j% S! T# C/ @4 g// 发送缓存& `" E4 V5 U( h  R# b9 [# G
char Send[] = "UART1 test......\n\r";4 f) b- H! z! h6 w; L* u3 l: k

& t. k' U9 k! K+ ?0 X, xextern void UARTconfig(); H8 {: s) I! j' Q4 v" n2 l/ c
{2 V& i! e0 X9 x% O; Q+ f/ m
//使能Uart1
  K, S& L  P, i8 E- w( r PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
; {  y% v3 y- G- R 4 z% ^0 d. U6 J
// 使能 UART1禁用流控0 P4 a5 ?7 Y3 [7 C1 S7 [. h- `
UARTPinMuxSetup(1, 0);& m9 ^; s1 L- M9 _' j* J4 y3 B7 A

" E9 r: B& G8 e // 波特率 115200 数据位 8 停止位 1 无校验位- M% i. f, I% j; P$ R" p
  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);, B* G3 P/ Z1 T- D& _
2 `: m( m; e% c7 x) J; b
  // 使能 UART1
( T& a- W" o4 I% v UARTEnable(SOC_UART_1_REGS);
  |% C: y8 V! D0 V" B  // 使能接收 / 发送 FIFO
$ I7 E) _, g9 u  x( k0 W  UARTFIFOEnable(SOC_UART_1_REGS);; F7 S! {# n; k* e. b
  // 设置 FIFO 级别
, v* o) C8 O) P3 t9 n  n4 n" i    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);: y  O% W) k6 _# M5 ?
  //Uart1中断使能
9 U2 R0 {9 q2 G+ u# w) m7 o" t! L. H7 c  unsigned int intFlags = 0;
" Q  {  v5 B# q" h  intFlags |= (UART_INT_LINE_STAT  |  \3 e9 E5 X# f6 f
            UART_INT_TX_EMPTY |    \
- K2 z9 |$ {( R            UART_INT_RXDATA_CTI);$ o, U" ]0 r6 S( e) k7 ^
            
: _0 f* a/ U5 s, A4 b3 L& h    UARTIntEnable(SOC_UART_1_REGS, intFlags);
! E! g5 s+ D, F; z}8 b) r+ o) }. U* R1 T3 K
//UART 中断服务函数- J6 J. U9 q6 S6 ]$ y
void UARTIsr(UArg arg)
% G* q- y) M7 t3 z" q5 f{
$ [& H( m) H+ Q% q    static unsigned int length = sizeof(Send);: c( m# a" S* c5 s. I$ t! d, W
    static unsigned int count = 0;3 B' a; ^2 C! S  ]- @: W
    unsigned char rxData = 0;
. {9 [) f3 ?$ q& [  B& a* D3 w. ?  T    unsigned int int_id = 0;7 }2 T. A2 S5 j% m! O/ P: W; U
    // 确定中断源7 k% v2 E/ h! [& s3 O0 r
    int_id = UARTIntStatus(SOC_UART_1_REGS);% n" }4 o2 m4 o4 R4 M0 x
    // 清除 UART1 系统中断
- X$ v) z! a. S3 \( _" O    IntEventClear(SYS_INT_UART1_INT);. X5 X$ D/ ]$ C* i( p8 q0 t7 w/ V
    // 发送中断3 S3 D6 a# b9 a6 |
    if(UART_INTID_TX_EMPTY == int_id)8 W* C# l, S+ e5 ?( ]
    {
" q3 M. h* [' q. O; [% r        if(0 < length)+ b5 ?$ ?, T$ c2 Z, j6 I0 ]  v" s1 [& ~
        {8 P6 `2 }, S' C+ w' v6 R
            // 写一个字节到 THR& e2 B+ [2 S/ B9 h+ D
            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
4 H( G/ k* W/ c2 _2 g8 \            length--;
; f. [+ B6 W" N! H  g            count++;
# w, U& N5 g$ |6 o0 A8 ]: W  L) c        }
$ o3 }8 b! o/ u8 n2 K        if(0 == length)
3 f4 H7 J: o6 ?% P) S% `& q. r; ~        {+ x/ c% X4 K: H$ R* o; q8 @- J
            // 禁用发送中断% s2 J) v- }$ C
            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
* V- @+ N. y4 J8 U7 t        }
% q& t# S3 W, O3 e; x9 R' W1 ~  K     }3 L" t  K0 V6 a. E) n* N/ K( y
    // 接收中断- O: M$ I, o& I: J- K! z) K
    if(UART_INTID_RX_DATA == int_id)
% E3 U% m1 b# }& D1 O    {
/ F1 C; H* d* e8 _        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);! I. u! {2 C2 g  B1 {
        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
, ]+ R4 D! H1 p) ^1 Z8 h: ?    }; d! U: H8 g; h% i9 ?' s
    // 接收错误' ^1 T( B( f  n  |% [9 S- ?. i
    if(UART_INTID_RX_LINE_STAT == int_id)
7 Z( r" y' L5 o$ s3 x, v# S$ C    {
8 L  I" N( Q# i, @8 H8 r9 R        while(UARTRxErrorGet(SOC_UART_1_REGS))
, C" S  t! L: P+ J1 V, J# I! `, x* ^        {, ]; p% ~! x- ?. |  B5 x& @
            // 从 RBR 读一个字节' H" ^3 F& a4 @% m, p: g$ G
            UARTCharGetNonBlocking(SOC_UART_1_REGS);3 e" T5 ^' {0 S7 Q' g
        }
0 S& n: h# c1 Q0 K  u6 a    }: Q, M9 B5 L; E  w. I
    return;
  J$ }9 D. W+ [+ m9 S. b}2 I# `6 a6 |, r6 C: h( f3 a2 t
Int main()
! N5 a( L$ n4 M, }5 `: D) [. W  _{
4 d; Y& B2 B, g; l) |  ^' N UARTconfig();//uart 配置
7 z, ^/ J4 o2 S7 m/ O    Error_Block eb;
$ c" G; d& }& l    System_printf("enter main()\n");
( ^3 V1 ]5 _% F' q% D* Q    Error_init(&eb);
, U# Z9 L  z. C    // 动态创建硬件中断: g( J% S8 Y1 l+ W9 b
    Hwi_Handle hwi1;
# G; m0 w! l' K  [. X4 E- E) _    Hwi_Params hwiParams;* c5 P, M( I1 @4 w0 n; D8 R; P
    // 使用默认值初始化参数6 b+ [" }/ K" _5 j  c5 q$ H
    Hwi_Params_init(&hwiParams);& i$ [; Q8 M+ j8 k) g
    // 中断事件& p8 c; k; ]/ T/ D- o8 j
    hwiParams.eventId = SYS_INT_UART1_INT;
6 `8 W! x  \& l) V+ q    // 传递到中断服务函数的参数. L% ?/ y: k. d. q; T+ N- \
    hwiParams.arg = 0;- ~, w, z6 {7 o6 M& s2 m8 y% s) A0 Q
    // 不允许该中断自身嵌套
& W! p7 r/ o# M5 |& J- d    hwiParams.maskSetting = Hwi_MaskingOption_SELF;
- [# \3 F) L' u/ I, ~! F- o  [    // 使能中断3 H, O2 f& Z8 V
    hwiParams.enableInt = true;
6 t# q4 e" h3 m% E' s$ ~    // 可屏蔽中断 4: o! O, S) V  R9 `
    // 中断服务函数 hwiMain
! z$ F2 A& n- R* g! k    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);1 ]1 R7 y2 O9 y: m- I
    if (hwi1 == NULL)
& o+ D+ d) h) J! ~# J8 {. R: B        System_abort("Hwi1 create failed");( s" b8 x% h; ~2 ?$ Z( k' t
    BIOS_start();    /* does not return */
; A2 r* d4 y7 ]: ~. L$ ^: K4 ?! O/ N; \    return(0);$ x1 {) J7 G, ^" j. H9 f6 N, T0 q& V8 k
}
$ V% f# f- W* b: k& g# J& }' \; D1 d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?- E+ a' H3 G  Z6 H8 M" v
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点6 [: v8 B; ?+ ~. W6 D; f8 E
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49
( M: y' O7 W2 Y' E  F在中断服务函数里放置断点
5 a% ]! g% {9 i5 \- G0 O! w% p
参考 GPIO_KEY7 L% a' S8 p! x* T. ~
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 22:17 , Processed in 0.040578 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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