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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下2 P- Q3 X, n4 G" T
// 发送缓存0 n% H" v, t% i4 K0 P% d* F( f8 f- P. l
char Send[] = "UART1 test......\n\r";
8 S! a3 ?* R  q. _
2 w8 u7 }- A) t  s/ mextern void UARTconfig()
$ K* u, O) K0 m{
7 [* L5 P( I# i3 `/ L1 A" [) K3 _ //使能Uart1
3 ?8 O. c" w" N- |0 L$ @, P PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
8 j. W8 w0 E* j0 @  \- `* G ) V' h0 I+ h% ]3 N3 F
// 使能 UART1禁用流控9 G% z8 `. Z+ a4 R) g% ]$ t1 Z$ }
UARTPinMuxSetup(1, 0);
. [0 A, _2 R1 l8 z+ u 2 A* o% P2 ~) k0 @& P) s
// 波特率 115200 数据位 8 停止位 1 无校验位0 ^0 v$ G4 Z8 e: d$ q8 K$ ?6 s9 z
  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
! N9 \( K  x% h, V" r
. A- m8 s9 ?# u$ c$ o2 H  // 使能 UART1
; t" }3 X% I4 Z: y' S7 M0 B6 [ UARTEnable(SOC_UART_1_REGS);
8 n& _3 @9 Y$ x) Y# y  // 使能接收 / 发送 FIFO1 o+ O& U* q; x' h+ U$ G$ j$ X
  UARTFIFOEnable(SOC_UART_1_REGS);
5 K& ^* J' |1 p+ |# z, U  // 设置 FIFO 级别
2 I" ?: l, k5 G" q: w    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);
+ P( k8 ~' E( \9 T( I  //Uart1中断使能, S5 |& X" o. a- u+ K4 a1 Y  X2 X
  unsigned int intFlags = 0;$ S  `: I5 O  B7 g$ {: i2 d
  intFlags |= (UART_INT_LINE_STAT  |  \
4 l- O* }# T& x7 d& D# k            UART_INT_TX_EMPTY |    \" n7 [  W( l7 Z* d% A
            UART_INT_RXDATA_CTI);, @* a. F+ a+ k$ ~! a$ v3 Z" L( ]
            ) K4 |8 v( _4 G& t
    UARTIntEnable(SOC_UART_1_REGS, intFlags);
% u* f, Y' k( F( [}
& B: C0 `6 S1 }& y' P//UART 中断服务函数3 V- ]# p. \5 B7 m
void UARTIsr(UArg arg)5 ?6 Z& m8 [) E- n
{
1 D$ T# y' ^' a* h( f/ ^# g    static unsigned int length = sizeof(Send);
" e4 X0 Y1 e2 {: g" @0 ]    static unsigned int count = 0;" X) h; M) [, A" _
    unsigned char rxData = 0;: E" E# q/ N/ J% X- p
    unsigned int int_id = 0;' i3 y. ]" r4 L* P  y7 w' G/ P/ ^& J8 |
    // 确定中断源! H4 s1 K1 Y+ R7 ~: N( K9 S% i
    int_id = UARTIntStatus(SOC_UART_1_REGS);
$ k7 k: P. t! y8 j% |( G    // 清除 UART1 系统中断
8 ~) a! l, q2 J  P    IntEventClear(SYS_INT_UART1_INT);
% X, ^4 R% v& h/ Y6 e    // 发送中断+ G" E/ X- l4 B5 c* E& A& }& d
    if(UART_INTID_TX_EMPTY == int_id)" P* e' U6 S- G" F
    {$ p2 R/ `3 p; G5 m7 w$ ], R
        if(0 < length)0 \* Y# e7 l7 u  y
        {8 {7 R" l' J3 ~3 H  R$ t' h
            // 写一个字节到 THR
$ w: Z- U9 v2 a, O5 }1 U            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
; O# f  ?, R8 B# e, @1 o: ]            length--;2 d( ^7 E  o8 f( x7 H
            count++;: ^- T$ n' I6 k; e$ j: X5 Q
        }5 _$ e* s/ C) Z& T6 z+ r
        if(0 == length)
, `1 B6 p% F. C, z7 X        {
! H7 N) K* b# ]- G# R# d            // 禁用发送中断6 @' c5 P- W8 U7 o4 i7 z( }
            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);8 S, R( Z4 ~7 j) L$ m* s6 f% v
        }1 o2 _0 Y0 E+ a
     }
. L  \0 F8 P' p! T+ C    // 接收中断2 \+ i( f0 w7 e9 Z! n0 n4 g' b
    if(UART_INTID_RX_DATA == int_id)
4 A1 y% v9 ^  i    {( J+ W9 f; ^& P. Z2 `
        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);  o( f, p. e4 i
        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
7 v; M$ Z+ q( O. n6 X+ V    }
2 \! ?+ F7 W- x    // 接收错误
3 a: k  g6 x8 z! t    if(UART_INTID_RX_LINE_STAT == int_id)& U5 K, X  e4 C, W
    {
) r: i- M5 _1 B: h5 {        while(UARTRxErrorGet(SOC_UART_1_REGS))
$ e6 T1 @2 g  [7 F        {, h  [' J- g+ h% H+ V  L( P
            // 从 RBR 读一个字节
/ a" y% r$ S. f$ f            UARTCharGetNonBlocking(SOC_UART_1_REGS);6 {+ k' a! U# t- h, m# p9 ~3 i
        }- H5 C1 f; T7 }/ J5 a1 C# @
    }
# Q: }0 H$ N. S# a( D: U1 P    return;
! G1 N# L5 x2 `6 Y$ Z& G# Y}
6 J6 |, a' Y+ T0 p. ^Int main()
" F/ _; ?9 {7 \; h* D. Y- h( z{ ' _$ t. L+ L* D- b
UARTconfig();//uart 配置
7 v" f# s3 M7 S& v) F    Error_Block eb;
1 I5 E! l) Y$ c3 G  A    System_printf("enter main()\n");) ]" T7 k; P' I3 N. t6 N: v! C5 H' i
    Error_init(&eb);
; v' q6 o, e' y. @2 k; ^    // 动态创建硬件中断
0 k1 A3 w5 A2 O/ f7 p0 k9 V    Hwi_Handle hwi1;
) a/ u! n; J; E, W7 @    Hwi_Params hwiParams;* E+ `" m2 W' r/ ]  c4 N
    // 使用默认值初始化参数
  \- v, j$ a& r  C" k    Hwi_Params_init(&hwiParams);& [3 Z( _9 V2 j: |" Q) I
    // 中断事件
! @% U8 ]) c8 l    hwiParams.eventId = SYS_INT_UART1_INT;& p; ~' Q: }5 O* N( G3 Y
    // 传递到中断服务函数的参数* M( p# w1 f& @; z' x# E& l  |- h" }
    hwiParams.arg = 0;6 L  ^( G* h3 A- E+ I# j2 p
    // 不允许该中断自身嵌套
* N4 w: I% d" j. t5 G    hwiParams.maskSetting = Hwi_MaskingOption_SELF;
- K6 v5 ~1 ~5 I    // 使能中断
: \# N; p5 q! J( x  `% i. ?    hwiParams.enableInt = true;
+ m) Q  @$ x, ], A4 K$ J: X    // 可屏蔽中断 4
" y% _2 x. P3 E5 W' K2 Q    // 中断服务函数 hwiMain
; f! a4 r' G  T& n    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);
* `9 V3 ^/ ]4 s6 Q* Z8 S3 F- F    if (hwi1 == NULL), n2 R8 S" m% @/ v5 h
        System_abort("Hwi1 create failed");4 `" s5 R3 D/ g1 c* Y' s# U
    BIOS_start();    /* does not return */% M  P, W' M0 }% X. j6 G
    return(0);
; P& `0 }, |0 \0 r0 w* g, S$ N& Z}
! `' r  i; [; U6 o0 J* k( z, g, ]* J) E% _6 C
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?
# f, W% A* L! W' V' L. y/ {9 D
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点
9 k; {$ L+ Q5 J2 f
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49
* W; F4 `/ ]3 x) R9 O* h5 b4 W& w在中断服务函数里放置断点
7 X6 ~0 |# W2 }0 |0 F. |( Y( c
参考 GPIO_KEY
* G  z$ L+ P1 I: s
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-3 15:03 , Processed in 0.039339 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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