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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下
' W5 ]6 |  k" e" k" ]// 发送缓存- ?( D7 y3 q6 W* Q' {
char Send[] = "UART1 test......\n\r";
' {& Y, O( i9 x! Z9 d9 c
* _1 f- e3 Y" l2 Z* ?, B# e( d8 Eextern void UARTconfig()9 @% g4 V  A, a' K1 f% c7 F
{
5 I! o6 |5 c8 C" ~# B' n, ] //使能Uart1
. e2 a. I" H3 @4 G PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);( r$ c- [( _0 q3 T
/ a5 b1 Q1 M! f( f
// 使能 UART1禁用流控) q+ T/ l' ]" N; {7 {9 B7 y+ o6 o
UARTPinMuxSetup(1, 0);1 U; |. e, U+ e7 {2 C  }* Y# m  R7 r

8 F' e$ {3 r* ^% e // 波特率 115200 数据位 8 停止位 1 无校验位# }3 Z0 w# r! N5 G6 k
  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
; {! J$ c/ e; c8 G
1 ]/ X0 [) u( o  // 使能 UART1" \' K1 y4 U+ X6 o
UARTEnable(SOC_UART_1_REGS);
. P$ d5 x. ]; n3 S! q3 |  // 使能接收 / 发送 FIFO% C0 C+ u* s3 T& y# e4 }
  UARTFIFOEnable(SOC_UART_1_REGS);& f' x7 b' R1 `- h6 t! i
  // 设置 FIFO 级别
! [+ f0 F* C3 }$ r2 |    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);
0 o+ }& I* R, _% r  //Uart1中断使能4 g' T8 S) X1 n/ s& w
  unsigned int intFlags = 0;
+ g7 i+ [2 ~( K: i1 a  intFlags |= (UART_INT_LINE_STAT  |  \2 H( w' ?3 O  Q4 T7 P4 U
            UART_INT_TX_EMPTY |    \1 B: `2 U; B2 n! R; J* S' f
            UART_INT_RXDATA_CTI);
: g' D8 W/ S/ _  U( v5 Y$ y            + I' ~' n3 u# M- Z
    UARTIntEnable(SOC_UART_1_REGS, intFlags);  t7 _% Q, Q& p  Y: p8 _/ F# ?
}
! a* y4 s! c5 ?2 F8 o$ ]5 O* `//UART 中断服务函数+ P  }. i! S3 J! O7 {
void UARTIsr(UArg arg)
/ K# F% Z7 _' w9 j( a. N4 \- `{
; u+ Z0 f* T  `3 n, ]+ m    static unsigned int length = sizeof(Send);9 W- F( n9 b/ q! j
    static unsigned int count = 0;
$ W/ \/ W7 P# x6 \; J) k    unsigned char rxData = 0;4 g! x+ n3 G2 E" y' b. I
    unsigned int int_id = 0;
% @$ F- U5 l3 |" b# o    // 确定中断源
  T1 t0 L8 d% T) f# m' A4 B& g    int_id = UARTIntStatus(SOC_UART_1_REGS);% f, Q& \8 ?; k" C. I3 ?
    // 清除 UART1 系统中断2 j( S9 N) @7 M& O0 s
    IntEventClear(SYS_INT_UART1_INT);
8 J0 h# i8 Y. |+ F9 o! T" W0 [    // 发送中断
5 s+ U! c$ \$ R, ?+ t# b0 p1 r    if(UART_INTID_TX_EMPTY == int_id)+ g" [! @; Q4 Q7 N
    {
- e2 L+ d5 a6 M5 A- _        if(0 < length)7 C' V  j" v: u5 F% d' S% r
        {0 C6 P4 t- p$ X
            // 写一个字节到 THR
; l2 a1 U- F  \8 ?8 T            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
1 `" K8 X' N4 b            length--;0 g4 s! m' X5 U5 z/ r
            count++;; B# r' R" p' [) C. ^
        }& `! t4 l8 M& _- p
        if(0 == length)
( z7 a/ J6 t$ \6 [- h& n+ p        {+ ?8 K6 K7 A; l5 L' b7 j) p
            // 禁用发送中断; g; v/ L" S: m2 K- `
            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);% f0 H0 G8 ?; @' n- ]! e
        }7 P. ?  D: W' H/ p9 c  c& i
     }$ F. m0 {8 v9 i1 X, f1 g
    // 接收中断
& C/ L/ i' W8 Q& D  A! t, @    if(UART_INTID_RX_DATA == int_id)
) l! i9 H6 H* V    {2 h* U# p3 A, Z8 v5 n* I  Z- `
        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
/ T2 j: q, O6 Q9 m, V! B        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
; J- u& z" i/ f2 {7 v    }
1 _: H) x3 b! R% ]    // 接收错误
. R0 @- H) b+ S$ q* `    if(UART_INTID_RX_LINE_STAT == int_id)
  R5 M3 ~2 ?& g9 H    {3 S/ C8 z; Y, Y
        while(UARTRxErrorGet(SOC_UART_1_REGS))
, Y+ }2 G0 z+ t0 J5 M        {$ S$ I0 R: q- U9 b
            // 从 RBR 读一个字节' v! _6 g/ E  X" K; Q
            UARTCharGetNonBlocking(SOC_UART_1_REGS);
2 A3 y; ~7 i9 f4 C; o        }5 l. L, {8 n3 r8 V
    }  B1 y) _, Z3 \" K
    return;
( s9 n" T, Z& H9 x; N: k4 W+ E7 C}$ i/ k; \" S& l+ q7 a
Int main()3 b% f1 P8 K# ]
{ 3 s, W7 p; Y9 n
UARTconfig();//uart 配置+ O$ {9 ?7 S7 R! J+ w
    Error_Block eb;% f3 H8 D; e6 g
    System_printf("enter main()\n");
/ ?( Q5 I6 v/ W6 k8 S$ q    Error_init(&eb);
0 H0 r+ y" T% T4 T4 d    // 动态创建硬件中断" b' ]4 g5 S$ ^
    Hwi_Handle hwi1;0 |* A3 c2 F! Q6 [$ i1 U
    Hwi_Params hwiParams;8 t8 w! c8 p# g8 m  k, d' ?
    // 使用默认值初始化参数
( D2 C" }: C( o% N  f    Hwi_Params_init(&hwiParams);
! p# V) K' o8 E0 h    // 中断事件
6 V1 f# L/ T7 p! g    hwiParams.eventId = SYS_INT_UART1_INT;
/ E7 h) b1 h! \. d: g    // 传递到中断服务函数的参数
( H' `6 |' j( ^/ L  k    hwiParams.arg = 0;
/ ^5 S/ W0 v. b# u- L    // 不允许该中断自身嵌套
$ V% r3 P8 o" P4 r  B2 q    hwiParams.maskSetting = Hwi_MaskingOption_SELF;& I  _, c) x: K- q. N
    // 使能中断+ B" d1 r& K3 s
    hwiParams.enableInt = true;
' S( W1 `( I/ R% e2 `7 H, ^! R  N    // 可屏蔽中断 4
0 r, l$ [' B9 j5 l    // 中断服务函数 hwiMain
* Y& b9 h) P: V4 N" L- S; T4 {    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);& l$ r! [- I' \, E9 T
    if (hwi1 == NULL)
. ^- Z1 }& R3 X0 ~6 P- @        System_abort("Hwi1 create failed");: D' Z$ g2 ^7 p3 P! B( y
    BIOS_start();    /* does not return */
5 F$ S% d) `! Q    return(0);! Z3 E8 I9 E5 S' ?
}8 w9 W* ?6 y: I( \1 i
1 o+ R& ~8 I: i3 F7 p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?
& O3 o5 [# p, t2 A6 P7 z* C. m
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点/ d% y; \7 j  `' f+ t
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49
; d! h) B. m, d在中断服务函数里放置断点
" d7 Z! ]1 s3 g" \* A
参考 GPIO_KEY
7 \8 f# |# r: u: {; u
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-17 06:47 , Processed in 0.039871 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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