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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下
5 u/ b% k9 a$ k' [( i' b// 发送缓存
  g: k, Y/ m: m" u8 Rchar Send[] = "UART1 test......\n\r";
( V8 U: W9 Z/ W+ e' |' ]1 ?$ j9 D4 @( X1 I$ m
extern void UARTconfig()* U: H9 x- I4 N+ X& c) x: V
{+ [9 k1 W0 B; a8 m& d( x+ ~
//使能Uart1
# c5 m" x0 q7 K, Q. t& C PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);; r# |1 J9 Z- T9 T; W

8 j1 {) o2 j/ Q2 T% } // 使能 UART1禁用流控
# W/ A2 }1 D4 T UARTPinMuxSetup(1, 0);& N" d) z) O& c$ \6 h
  p! S: A  f  d/ s3 y. k$ q
// 波特率 115200 数据位 8 停止位 1 无校验位* v+ R3 L7 Y+ r; j& C: t: {
  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
# E1 H. E# N! N( e% x
' z9 l) Q' E+ e0 c% C$ R0 ^+ _  // 使能 UART1
$ V5 K# z+ h. _( R  J1 R UARTEnable(SOC_UART_1_REGS);) f4 ~3 M7 X# `. _; Y( L. Z
  // 使能接收 / 发送 FIFO
& ]% ]( ?. D0 I& j9 E9 X  UARTFIFOEnable(SOC_UART_1_REGS);! Y7 Q  e* L9 u- t( }! Y
  // 设置 FIFO 级别
$ J( Y5 [+ m0 ^. b# S" u    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);
+ a+ k! I! R( H3 C+ `7 n# Q  //Uart1中断使能$ `9 n, x4 j& _& o
  unsigned int intFlags = 0;( e" x3 }- F" d8 k# s1 s
  intFlags |= (UART_INT_LINE_STAT  |  \
; \8 {1 f) _7 b5 @- f7 g            UART_INT_TX_EMPTY |    \: Z& J8 k" G; n
            UART_INT_RXDATA_CTI);
8 ~9 ?6 P! Q' s            9 U! _, D. X  f
    UARTIntEnable(SOC_UART_1_REGS, intFlags);
$ g5 h0 j  \6 h- S+ k}
" ?1 Z% G* T+ F$ \8 Z//UART 中断服务函数& T+ j1 }! J! w1 _
void UARTIsr(UArg arg)
- O6 u4 M4 t3 G9 O/ G6 Q; B; U( l5 W{/ v4 w7 Y0 V7 j$ p$ s4 N
    static unsigned int length = sizeof(Send);
) a8 z- j* J% @& f3 e" q7 M    static unsigned int count = 0;
! f0 @; S) E" p    unsigned char rxData = 0;: h" d$ T* ^, p0 \1 @
    unsigned int int_id = 0;. U9 f" V' |+ o3 c6 r4 p: h9 m
    // 确定中断源# N0 Z" u2 {- Q: L% j7 ~
    int_id = UARTIntStatus(SOC_UART_1_REGS);
) P+ e. x. Z! X! l: H% m  a    // 清除 UART1 系统中断
9 D( ^. C9 r# u) ^! }9 a    IntEventClear(SYS_INT_UART1_INT);
: W: o; |; V% S; J* w    // 发送中断1 C  C% F& d" ~5 x! Q, W/ N
    if(UART_INTID_TX_EMPTY == int_id)
" ?. M& k6 Y3 `7 S& |7 q6 {    {$ N0 S5 P; q1 D6 f  p7 p% [, t
        if(0 < length)
2 E! G1 I) n) i% S5 u        {) l6 f# _; D7 z9 A9 M
            // 写一个字节到 THR8 }+ w% \* M. A4 s
            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);$ ~* }7 A9 P! G1 ^/ Q8 R+ G! i
            length--;! z$ j# O2 f1 j9 w# {$ o9 Q
            count++;; j8 q' W  n+ g$ z$ h; c$ v
        }
0 c, ~( y5 {. N" g( Y, @& d        if(0 == length)
$ F$ p4 W+ g# H8 [. \& R1 }        {3 l7 b, P' }& k1 m! @. N9 K5 \( E
            // 禁用发送中断
, k3 X4 _2 ~* Z! T            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);1 a; r, y  B) p, o1 u0 @, t7 Z
        }
- P- Q% k' Z- \% Y1 l     }) `' a! s, d( p- L
    // 接收中断! J9 F! w+ Q! \
    if(UART_INTID_RX_DATA == int_id)
) n) |. G% a8 k( W5 F; G& ?8 `    {8 l1 p+ f6 ^9 }" u+ ~5 f
        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
/ j: n! b6 N. l1 r        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);. v& v6 F- h' Z  f9 k
    }
( z, O& `7 @: n3 Y, y    // 接收错误- O  a9 f& k$ U8 I
    if(UART_INTID_RX_LINE_STAT == int_id)- X. u) j4 ^4 E. t, G8 y  z8 `* i4 ^5 {( w
    {
% v( [* ~9 G) p3 x        while(UARTRxErrorGet(SOC_UART_1_REGS))
% w, p/ X  n4 o) j1 J0 M5 s( |4 O2 ^        {. k$ W8 S- H) [  F
            // 从 RBR 读一个字节) ?; M# ?  _& V8 g! }7 w5 S+ ^9 M
            UARTCharGetNonBlocking(SOC_UART_1_REGS);$ D" ~% b! m" Z5 \
        }
- \8 Z- t: |9 S, z: _3 u    }
, g! ~" q0 p9 L  q7 U* y    return;1 ?5 s% H! ^+ P) H% ]8 \" U
}
+ K1 b6 g4 Y9 [' Q% c$ O7 OInt main()4 E3 L" U# C% H# {, c1 Y9 b
{ % {) a3 I& c$ g+ c7 K
UARTconfig();//uart 配置
; @; p  Z% O% M. M8 T0 x% B5 b6 C* o3 f    Error_Block eb;$ w, M1 V/ _! D1 S( s( N. @" g
    System_printf("enter main()\n");! ~, o2 N$ W' z. x
    Error_init(&eb);
9 l, i: l# P: \3 N) }    // 动态创建硬件中断
/ D* m6 h8 r; @' S5 Q    Hwi_Handle hwi1;8 l1 A2 o2 P+ A9 [, q+ O5 U) j
    Hwi_Params hwiParams;
9 _2 M2 C5 @7 ^4 ]    // 使用默认值初始化参数
- |& Q. C  @+ }4 P    Hwi_Params_init(&hwiParams);
6 U/ \$ }5 {  S* n' q    // 中断事件
+ {1 D% K& W# a/ [% ^. L/ g2 o    hwiParams.eventId = SYS_INT_UART1_INT;
1 s# u. Q1 E* {  i2 i9 w    // 传递到中断服务函数的参数9 N% N1 _1 Y6 _
    hwiParams.arg = 0;
2 P5 J4 O, ^7 o  r    // 不允许该中断自身嵌套
0 K. G, B' p2 i& o7 G2 ?    hwiParams.maskSetting = Hwi_MaskingOption_SELF;6 ?) t# u. f7 e( u
    // 使能中断3 n$ S2 h1 B7 Z- J0 c
    hwiParams.enableInt = true;/ Z1 B1 Q" E0 H5 G8 S% j6 W$ m
    // 可屏蔽中断 42 B/ a- n: Z9 e( n. L+ {: L2 v+ b# Z
    // 中断服务函数 hwiMain
7 i# J: O" r: z' ~) Z# e9 D    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);
9 e& `1 c5 X" w% p: j: j- D    if (hwi1 == NULL)/ L  k! `6 J6 h
        System_abort("Hwi1 create failed");
2 R. ^, n" g) J  [    BIOS_start();    /* does not return */
8 _5 j# l  g/ u; u+ g1 B    return(0);
/ N( D1 \1 c3 w. }* K) V7 ~4 ~, b}' f. I9 ^& I9 o3 |& f' d8 o

4 |$ j' \  s, G( `6 R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?2 i- B5 x% q* k9 w9 ?+ ~4 f
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点
  N" X* t4 w7 ^- W( v
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:494 B7 ?+ R& Y$ n: b" v( H4 ~
在中断服务函数里放置断点

4 e1 u+ O4 O; u' z' t" [$ ~参考 GPIO_KEY
* R) M& l$ Z2 g
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-13 16:35 , Processed in 0.040745 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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