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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下" H7 \% j8 G5 y- A. L( K
// 发送缓存
6 ]! \+ R# L6 C' z  d2 v# }9 qchar Send[] = "UART1 test......\n\r";
, ^* l3 r- ^2 _- {) g  S& W) `4 ~( [. c
extern void UARTconfig()7 o8 b8 M+ D( ^$ ~) d. p3 u7 b
{
8 |$ Z: Y' x# J5 j //使能Uart1
6 D- ^- ?9 q( I! c- t PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
" p% {4 ]( B, A/ s3 j2 s" ~ 3 }0 M1 n0 ]4 _0 f6 s4 u( Z
// 使能 UART1禁用流控
0 O# R3 [# _$ R2 T9 U2 F, }$ a UARTPinMuxSetup(1, 0);
* @( f! g7 |. Y3 g, c0 }+ e7 ` 9 }0 Z1 z' s/ m3 X
// 波特率 115200 数据位 8 停止位 1 无校验位
7 `9 n6 ?& x6 O. W5 b) K  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
; B. y/ o' `) m6 K 9 E2 W7 ^) Q! C- O$ M
  // 使能 UART1
! Z1 u: ~2 V/ w( _1 ]: ~ UARTEnable(SOC_UART_1_REGS);
1 N  X4 |8 ^- g, |- }+ L  // 使能接收 / 发送 FIFO
# C% N" K& h: J4 a9 P  UARTFIFOEnable(SOC_UART_1_REGS);4 [: ?8 L( u, {' L7 h
  // 设置 FIFO 级别9 e: b5 P/ q  f0 O
    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);
+ k$ S0 @( t  ]  o- Q4 _  //Uart1中断使能
0 t0 l0 p( H/ l. V/ ]  unsigned int intFlags = 0;3 @- Y1 y+ L5 ]2 j
  intFlags |= (UART_INT_LINE_STAT  |  \6 V' ^2 E; E5 x
            UART_INT_TX_EMPTY |    \  M, S. a  N- o% ^! j' K  N: Z
            UART_INT_RXDATA_CTI);
. x% W. b0 i3 W! G: z3 j( {            
4 Z/ e3 P" I) L) j2 F* k1 E7 X    UARTIntEnable(SOC_UART_1_REGS, intFlags);
$ X3 q% D2 ]( |, |% a/ h* q: C}
4 [4 A- |, ]$ q0 k+ T* _4 U! A//UART 中断服务函数5 e% T0 d- O" s8 P3 I/ R
void UARTIsr(UArg arg)1 F4 I* R: d$ H5 y$ U! V; x
{7 o# `  l2 V( U% [; T5 o6 j2 |) y
    static unsigned int length = sizeof(Send);* V6 u: e) |- i6 k4 m7 O
    static unsigned int count = 0;3 c) u! l% B" p2 \9 ^
    unsigned char rxData = 0;4 u9 a/ x& D6 p' l
    unsigned int int_id = 0;
) r! a3 e# d5 d6 M    // 确定中断源
: T+ o7 |1 v  q& G3 g5 l    int_id = UARTIntStatus(SOC_UART_1_REGS);8 V. ~' W7 i3 a, v
    // 清除 UART1 系统中断
1 y$ s6 K  f$ @+ ^6 @# j    IntEventClear(SYS_INT_UART1_INT);
8 R( Y8 c& q1 t    // 发送中断/ _' Q3 Y: I- s5 ~& T; S
    if(UART_INTID_TX_EMPTY == int_id)
8 t; W" c  l6 ~- T1 V, e0 }* K. N    {. z. K  T$ ~, R
        if(0 < length)
1 b% M; B- {- J% e5 T$ d8 b        {$ Z9 r3 k" [! S" J, b/ Z) E
            // 写一个字节到 THR! Z+ J! H0 w' Y. c
            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
* H5 Q* U4 \" Z$ k% `            length--;
: ?8 r5 R/ O: J            count++;
) K  K% x, ^4 I+ B( Y- b        }
* D  s8 T+ k5 P- t# Q0 T3 i        if(0 == length)
( r% ]% \8 ?5 r/ D        {  C, a0 J9 H" U4 _4 |
            // 禁用发送中断3 x  T# \1 S0 \5 d
            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
5 J4 t* l' X; l* X1 J3 v+ H6 n        }- P! [$ B1 b; n, B: W/ m* j9 E/ j
     }7 i/ I; u2 _. V3 V7 w$ }7 y3 O
    // 接收中断
" b0 i3 P) o+ t% \  V4 p8 E$ F    if(UART_INTID_RX_DATA == int_id)
: _# N$ [/ g* I( w- _4 v    {
4 q9 Q! [- p- f0 i; u# h$ x        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);0 z4 m' e, L/ U  {0 c5 E
        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
' _1 d+ s& C% N9 |$ ~% D    }7 i9 A% k+ {* m& A
    // 接收错误
! m: E; G5 o& [- L& P7 R( [    if(UART_INTID_RX_LINE_STAT == int_id)
- _3 A2 l5 \8 F8 z    {4 x( M& V0 b# s& y
        while(UARTRxErrorGet(SOC_UART_1_REGS))
4 W, a/ L( C1 i7 N        {2 o" ?3 c: X% a7 ^7 l9 R& c
            // 从 RBR 读一个字节# L" g/ {' M( Z, J% Q
            UARTCharGetNonBlocking(SOC_UART_1_REGS);6 S1 _  g: ~% z2 ?+ }( W# [
        }& M8 I6 ^" M4 F% m8 T' d; N
    }
7 e7 U+ J3 r6 f7 O! B  @1 F! L' _4 W    return;
9 B4 l, C9 ~# Z; B}
+ x5 D$ O! Q& C. M+ k9 c; D" L( pInt main()
7 F: X5 U  R9 e$ [) I( ~8 X{
4 w, }4 M) h( p9 [6 g# x0 T UARTconfig();//uart 配置' \$ E# _4 L$ ~% i
    Error_Block eb;8 I6 h0 x1 J; `: }8 [; S" q) ^
    System_printf("enter main()\n");
( h, j" x/ o& I' F' R; o    Error_init(&eb);) b2 `0 D0 p7 X' T: {) L. q$ n
    // 动态创建硬件中断# [. |% J. l/ A  a+ H% z/ J/ J: M. S
    Hwi_Handle hwi1;9 g- \: h9 s1 i7 S
    Hwi_Params hwiParams;
! `/ ?  t3 {# j9 R0 v- w    // 使用默认值初始化参数  G% Q, E& K" L' r2 |+ B7 Z* k
    Hwi_Params_init(&hwiParams);& N- Z# A1 {) `% M
    // 中断事件- V* `7 [. H2 p. e9 [# v
    hwiParams.eventId = SYS_INT_UART1_INT;7 ^, H  E4 r6 H0 l) ^" @' g
    // 传递到中断服务函数的参数7 E5 D' c6 ?! R
    hwiParams.arg = 0;; t8 V# `9 y6 U: @
    // 不允许该中断自身嵌套
  D& Q# P. V$ S- y+ m    hwiParams.maskSetting = Hwi_MaskingOption_SELF;% u* A, R9 d0 w5 E' }
    // 使能中断
' O$ \$ J/ P- Z8 T5 d; r    hwiParams.enableInt = true;) Y3 v  E1 t: o; t; g
    // 可屏蔽中断 4$ I0 s: Y0 t% x& o  x3 j7 g
    // 中断服务函数 hwiMain3 E; T+ P5 w3 H3 m! x$ h; d
    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);- \5 H7 s: p1 M+ S' g1 K3 Y, d
    if (hwi1 == NULL)
7 H" [5 \: v( ~4 _& l5 H7 W# D5 K        System_abort("Hwi1 create failed");
0 \4 ~2 l* {! Y6 o& H0 ^    BIOS_start();    /* does not return */
$ X. ^% W; ^7 p1 l# C6 C; Z    return(0);
+ O# p3 o0 W! U+ a% i}
  }. {& i$ a0 H2 Z( M  v
! h$ H; q. _0 M# `$ i
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?4 W, Y' s3 Z+ e$ }' r7 O; [
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点# W2 D5 a9 v6 R1 r4 ]2 ]
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49# H! `: T3 G) V; g
在中断服务函数里放置断点

+ D/ W* Y; R9 L% T6 O9 m) Z参考 GPIO_KEY
2 U5 h) ]% R. \( k9 g
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 19:01 , Processed in 0.038378 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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