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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下% v1 d5 `' ^9 ?- p2 Q/ B
// 发送缓存
3 G( C# @7 S' z5 V( ~8 hchar Send[] = "UART1 test......\n\r";& A( g2 o/ c+ M& G- U
, c( Y. Z5 o. D7 v
extern void UARTconfig()7 r& Q3 s% B0 g' r5 u7 K
{
9 i" N7 i! I  b" |: }2 r //使能Uart1
: M0 P- f3 q9 Q# a: ?( g PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);& w; e! z+ U5 \# m5 w

" P1 e- f, K( }! f // 使能 UART1禁用流控
/ e% t7 \9 i2 _. U* H UARTPinMuxSetup(1, 0);
( h/ _: G( p$ l- m' {, u0 ^% C
' C) G8 s6 V# n6 u( Y% O // 波特率 115200 数据位 8 停止位 1 无校验位
; b+ M) v4 A$ Y+ c  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);8 l3 l! o4 a7 u- A! A
2 T8 F. ]7 `* w) C+ `$ b
  // 使能 UART1
! O3 Y! k' U# K( t$ D  K UARTEnable(SOC_UART_1_REGS);
* Y5 j0 D4 |' @) A3 U) z6 j: u  // 使能接收 / 发送 FIFO
# I0 r& ?3 D7 c: G. u& J! E% U  UARTFIFOEnable(SOC_UART_1_REGS);
8 \5 u6 ~  J6 |, d/ S; ]  // 设置 FIFO 级别2 A9 q* h# e7 ?. p7 j# |/ j
    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);) A% I1 X) K$ `# l# ^5 C* O9 L
  //Uart1中断使能( T" i& f3 s+ J# ?9 k
  unsigned int intFlags = 0;
5 y! |& }8 q7 j* B! k  intFlags |= (UART_INT_LINE_STAT  |  \
* g) F1 m! A' J0 f/ z5 j0 ~* ]            UART_INT_TX_EMPTY |    \+ S+ x" L/ A% O' n3 A* |
            UART_INT_RXDATA_CTI);
$ o* J; d: J( ^0 n            
& H! t% d; h1 J+ Y& Y    UARTIntEnable(SOC_UART_1_REGS, intFlags);1 j8 K& j' V5 r5 r# U8 W# F4 L
}
+ E! k4 r+ {1 |5 B# C( o//UART 中断服务函数
# ^; N9 n# G7 _void UARTIsr(UArg arg)
! t' J) k) L0 r{
. F' v+ g( M. X) }- @+ |4 C    static unsigned int length = sizeof(Send);. q2 T& B( p8 l8 f& N8 a( _
    static unsigned int count = 0;
% Q2 N9 o+ M0 a: ^: S7 S$ j    unsigned char rxData = 0;
+ O- H  K, l' D  I    unsigned int int_id = 0;$ v8 l0 s8 U2 ^; L  U+ }- o# s
    // 确定中断源- x  m" A+ |3 m* Z( T, P
    int_id = UARTIntStatus(SOC_UART_1_REGS);
6 D& P( P% @4 e, V; W3 J; R$ ]    // 清除 UART1 系统中断+ @  E  j& {- I  x. Y
    IntEventClear(SYS_INT_UART1_INT);5 H1 \) O" }% q+ K* X
    // 发送中断
  ?1 ^; L% e, N3 B! E! C! D4 [    if(UART_INTID_TX_EMPTY == int_id)7 g& {4 V* p; K$ ~0 W
    {% H1 {2 w/ U- \- ~- j
        if(0 < length)
% s7 g8 m9 h, d        {+ j4 J; q2 t2 c/ ^
            // 写一个字节到 THR8 m$ h1 y( ?+ c! z
            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);1 d3 l- o6 U5 V# w
            length--;" p( u, A1 a) ]4 ^8 d% q
            count++;
1 W2 I: [3 t) `9 [4 S6 w        }" H5 |  G# I( `" i
        if(0 == length)
, p3 H2 N, K9 o        {
, P1 N. H% k1 Q2 W# K+ q! b+ i4 R            // 禁用发送中断5 d: \& `% `/ A9 [6 r& k3 ]
            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
4 N1 a0 O2 i2 I, t! ]        }
+ K9 K% J# D" q  z& @4 ^     }' P2 E+ \1 ]* U
    // 接收中断
' Y+ M  c2 a7 U0 l% @0 a$ A    if(UART_INTID_RX_DATA == int_id)
$ f, N8 r; g( k6 e( M    {% T9 S1 c! X$ U, `$ e; |- {7 l  [; r
        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
8 S8 l0 U0 v& }0 v$ W; V! ]        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
, g9 q3 F* N* ]- U! U- Z    }
4 @: u% g* `9 s    // 接收错误1 _) |: {% h; P# m+ I4 W/ q* f
    if(UART_INTID_RX_LINE_STAT == int_id), N" t+ C, ^8 ~: X
    {$ N$ E$ i" u% u  p+ |6 i
        while(UARTRxErrorGet(SOC_UART_1_REGS))" u9 Z/ f4 T( L) M. u0 F
        {
+ {* P. ^. w  Z: A. U# X  {6 |            // 从 RBR 读一个字节2 H) d- p1 f, T& @
            UARTCharGetNonBlocking(SOC_UART_1_REGS);
& t: U8 z: I% Z3 E        }' K! M0 Y5 W$ x) l8 L
    }
1 r2 Y! z/ d  G# c    return;
6 O: f+ Q; m& D}6 t+ v0 I& m4 q* {# `9 T
Int main()7 k0 r6 u0 m4 h
{ - [( P8 Y/ W) v( i8 j
UARTconfig();//uart 配置
7 Z* [% |+ O$ G7 |( M    Error_Block eb;
. n! u* @, [1 I, ~& c6 A    System_printf("enter main()\n");
& d5 Y: x5 S$ S7 a/ H+ x    Error_init(&eb);
+ w7 z1 f+ F" E) C  A9 l+ j9 x+ n    // 动态创建硬件中断0 X3 x8 N, E" V9 S
    Hwi_Handle hwi1;
* m" w5 K3 I' R" c7 w4 L% a    Hwi_Params hwiParams;% k& c/ q* t4 G- p* w: M2 ^* r
    // 使用默认值初始化参数
) d9 d% f: c$ O    Hwi_Params_init(&hwiParams);
  f! q, v/ {+ [    // 中断事件( `$ v" m; v; M  l
    hwiParams.eventId = SYS_INT_UART1_INT;
4 [; l6 x. U) M0 \& C8 K% {    // 传递到中断服务函数的参数+ R: o7 S% z9 w. a5 s
    hwiParams.arg = 0;
* {* }! d6 j8 t5 _- i$ o    // 不允许该中断自身嵌套1 G. p$ `2 Q3 _, `4 h
    hwiParams.maskSetting = Hwi_MaskingOption_SELF;
* K- L( {8 O3 F6 a    // 使能中断
/ G5 z1 j4 |% B2 x- S: ]    hwiParams.enableInt = true;" a1 Y2 X( @7 @0 L
    // 可屏蔽中断 4% Q9 I- K- e4 h% K% S. `
    // 中断服务函数 hwiMain
; g) a! W6 }% r8 g7 u! e6 Z    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);4 S, y/ `! m/ W3 q3 {
    if (hwi1 == NULL)
3 f$ c% M; K: \9 K" P5 p' Q* R        System_abort("Hwi1 create failed");
3 f3 L8 ?# C1 M9 o* v8 z    BIOS_start();    /* does not return */
7 s0 @; C( J! }    return(0);
; L4 \" v7 n2 m& O' F7 H& q3 A! u}
3 w5 y3 K1 M' j2 v5 `
7 R$ V: z% y" m" }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?
3 g9 l1 y, d( y9 p& @4 }1 r; R8 s0 ~
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点
  S. x) s+ m* c; e/ s& ?
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49
5 n; z# ], G1 a7 n3 O% I6 [8 c在中断服务函数里放置断点

' V* F( q0 R/ N  H: L参考 GPIO_KEY- j" O% _6 Y8 q- t
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-31 04:53 , Processed in 0.042837 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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