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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下
5 @* [( E: A! `# n* k// 发送缓存
6 l- U8 ~: Y9 T9 n! j) h! Rchar Send[] = "UART1 test......\n\r";
7 S) `. r2 h* @  I! F5 F9 T( p
* o5 g; i  _. s# Oextern void UARTconfig()( P3 z+ y6 R$ P: Q
{1 N) R1 O4 {7 m5 m
//使能Uart1$ ~' k6 S2 r$ R
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);2 F$ M4 F, ^7 o0 @# W1 Q& o
: b" Z, v/ i1 e* u
// 使能 UART1禁用流控" E! W2 J3 D7 v" l9 O
UARTPinMuxSetup(1, 0);! [6 B7 B1 j3 P  _2 J- g

0 _; c& U' T9 s* ?3 F% c // 波特率 115200 数据位 8 停止位 1 无校验位
: [- C6 M6 X% `5 B  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);4 I5 q+ b) t  B& D; U- l' A
, s9 P4 y! P% C& Q! i) i
  // 使能 UART1; t+ j9 R: f$ x; ^
UARTEnable(SOC_UART_1_REGS);
4 `0 l' |4 q' H. c' ]. r. W+ g  // 使能接收 / 发送 FIFO
$ ?. N* `( D' ~  UARTFIFOEnable(SOC_UART_1_REGS);2 \) b: Y% P8 I% U
  // 设置 FIFO 级别
% M. Y; |2 n5 I# c, ?- i    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);
* m& b. j0 O" @! X$ A  //Uart1中断使能
: K% f1 T/ p/ S' U  unsigned int intFlags = 0;
: z6 I9 h) f4 ]6 X! m0 P  intFlags |= (UART_INT_LINE_STAT  |  \
( E+ U& e! W/ R7 p3 i$ L            UART_INT_TX_EMPTY |    \
5 u# k8 N  n+ z5 n  [            UART_INT_RXDATA_CTI);
6 ]" M$ K; k4 ]7 e, j$ ]            
& d! L  ?! X8 g: J    UARTIntEnable(SOC_UART_1_REGS, intFlags);
0 K( h6 A& Q$ P! Y: e}
' i0 W$ |+ ]  t  h# h4 [$ D+ F//UART 中断服务函数
; O# F! W, s- @% d2 s4 Q) s' dvoid UARTIsr(UArg arg)
; H  L% f% j/ L$ I. K& ?& `0 |) b{8 t1 X" f0 k4 m
    static unsigned int length = sizeof(Send);8 t% x9 t  ^0 z3 S# c7 e( e0 g
    static unsigned int count = 0;7 S# Z; z+ Z' b1 W8 W# q( @1 x
    unsigned char rxData = 0;
2 U# s* L& \9 Z, g1 y; \0 F    unsigned int int_id = 0;
# m4 Q/ W: p! V' W7 O    // 确定中断源& S! x) m9 w8 ~9 W9 h! R& ~
    int_id = UARTIntStatus(SOC_UART_1_REGS);
, ?. ?6 ~3 Q  a    // 清除 UART1 系统中断$ J) y- k# D9 {* X+ z5 M: g
    IntEventClear(SYS_INT_UART1_INT);
& Y% d0 L- u2 G- L& o& ~# V- {    // 发送中断' m6 u4 |1 k) m/ m
    if(UART_INTID_TX_EMPTY == int_id)
# q# A0 Z) o0 R$ g5 w    {4 }9 ^2 X. N$ R& N. a3 k$ `1 c
        if(0 < length)
" B- Y, c, I$ p. r  G+ }% O% @        {. h9 x* u" a1 o! @8 H# V
            // 写一个字节到 THR- p4 W7 J; Z  U3 @0 H
            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
2 t4 m3 ^/ _8 z& u$ [& ^            length--;, }! R4 z( E3 I/ D2 ]
            count++;
; c5 g( ~, W* [        }
8 s& p9 h* A+ K- O9 ]        if(0 == length)
' P' z; U; C8 Y% l/ _        {4 N0 `4 k, I2 o) n4 D4 {, C8 r  z
            // 禁用发送中断
! @6 _, o" f. _( u- Z) H            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);8 m. b& R" X+ g: G" _7 A
        }
& I5 T! M) C% r     }8 `( e2 o  L1 z+ }% d! A
    // 接收中断% d7 k* J/ v& P0 G' ~, S
    if(UART_INTID_RX_DATA == int_id)
0 t# i+ E  b" E% H% i4 V9 {6 X    {: n8 W5 Q! P" R$ b
        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
- r. V% o1 m3 d/ s6 m" [        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
) F. b- p5 _2 m' Z9 Y8 b2 G; z- v    }  T5 P, D  C3 O. t$ l% A
    // 接收错误
8 B4 S2 J" c+ d! S+ a3 r    if(UART_INTID_RX_LINE_STAT == int_id)/ _+ W9 o  \4 @% ~+ [8 p" |
    {
$ M) @) c& A3 W+ Z        while(UARTRxErrorGet(SOC_UART_1_REGS))& [7 F* \; `8 x  n! g. p/ O, I
        {' \! z" ^6 M: G1 y6 b7 N
            // 从 RBR 读一个字节
1 l  E, _* Y- n            UARTCharGetNonBlocking(SOC_UART_1_REGS);
' f: C3 p5 V9 [! F0 w        }5 E5 @4 Y) k0 l+ |
    }
' J( N; S4 h# R& x- Z3 i! c8 T    return;
- w/ [2 i/ H7 e}7 A* f4 c8 Q+ j6 L! _
Int main()2 ~! V3 S3 k) T
{
4 F/ Y! N0 D% P! x* r4 v; d- K UARTconfig();//uart 配置
, H8 \8 C; }7 L8 D+ p& \    Error_Block eb;5 e5 ~6 O' e- J& r6 S+ R/ r3 S% k& D
    System_printf("enter main()\n");
4 ], b5 X- w( l0 j: M    Error_init(&eb);8 d+ @0 O2 Z' o4 Z; G& ], W0 [
    // 动态创建硬件中断
* K6 B, }. B$ X0 e) z# m    Hwi_Handle hwi1;  r4 g3 l' g5 Q# x+ o$ s) t1 R
    Hwi_Params hwiParams;7 m$ c% s5 y0 V/ |; \
    // 使用默认值初始化参数
$ q" i: ]2 [% [2 U    Hwi_Params_init(&hwiParams);
; d. i0 e+ @- {- r    // 中断事件6 f) `+ o3 J  U6 K+ ~8 e$ G  o* V
    hwiParams.eventId = SYS_INT_UART1_INT;8 m9 o4 [2 j/ O, G0 I( w
    // 传递到中断服务函数的参数
( Y& D, `) x. u6 P    hwiParams.arg = 0;7 v( g  E% ~) ~+ o8 B$ d$ k& A) Y
    // 不允许该中断自身嵌套
- q# n4 j% T2 t9 ^4 O+ n( U7 _  ^    hwiParams.maskSetting = Hwi_MaskingOption_SELF;2 O8 Q* `8 l- t$ B: J( {
    // 使能中断, Y1 P. v7 i9 p0 Z3 I! `* @
    hwiParams.enableInt = true;
7 p: s# }. p8 [6 t: v3 g# k3 l    // 可屏蔽中断 4
# {6 Y7 e0 T7 e4 T4 k' p- n% y    // 中断服务函数 hwiMain, X; L  L) c2 w7 a/ x0 S& Z
    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);& g' y/ x! F# h2 C4 Y* ?+ g' [8 r/ ?
    if (hwi1 == NULL)* v8 Z' A3 }2 i! A, A0 H+ l7 ~6 l
        System_abort("Hwi1 create failed");
! F$ i# Y; {) M6 `9 l# H    BIOS_start();    /* does not return */
8 ^, k; n* m2 r5 ~8 E    return(0);
* y0 Y' `: T' A+ Q- x% P' B" w5 U2 H}
; v. J3 x; G- ~, s3 s3 V2 P2 P) n9 @3 R4 J- f
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?1 q9 c5 C, w. q; V8 g5 Q! `+ W
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点6 p& _! R# e. _/ j2 J& n. u
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49% [% E! _" w7 `) E5 f
在中断服务函数里放置断点

' L: K+ C4 Z/ \% h+ \参考 GPIO_KEY
* s" z1 O% m* M# n% [* s& k( z! [/ z
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-25 23:18 , Processed in 0.042850 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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