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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下
) \6 o3 V- O3 V8 `: \: l// 发送缓存
2 m9 ]7 T' x" C' r6 w9 [6 ~char Send[] = "UART1 test......\n\r";* ]* \' R" r/ \; y0 S; M
- i: L( L5 F) m( y
extern void UARTconfig()! C2 \$ }" s$ h8 ]% g+ D
{
7 i* o( B' S& j* }7 U //使能Uart1
5 ~" M6 j5 D5 _ PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
& w5 C5 _, j0 Y# ~2 c; K; P. Y" O * h8 S: n! @5 W: M# t
// 使能 UART1禁用流控  H5 u( Z. b" K$ W: S: T% h2 J
UARTPinMuxSetup(1, 0);  I/ U; x5 q9 z- e$ y0 N* M  W9 p

. E! s$ L- x$ A( G" ] // 波特率 115200 数据位 8 停止位 1 无校验位3 |4 x+ A& ?' I  p
  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
  n) B- c, V  G3 q( N
6 p' E: |  Q. T# ]$ m) e- p& y  // 使能 UART1
9 J* s; J$ {  p* T' m UARTEnable(SOC_UART_1_REGS);
' M% e  i7 a7 X  Q9 ?$ p+ }! e( z  // 使能接收 / 发送 FIFO
9 g+ L3 {+ {' F2 N  l& M/ F  UARTFIFOEnable(SOC_UART_1_REGS);
# E0 x0 J4 O; a8 d  // 设置 FIFO 级别
& ?& a6 W9 Z( D' U    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);, X  N' F7 ~  p  n6 k( V+ F
  //Uart1中断使能
- O) s9 @$ z8 P& i3 a  unsigned int intFlags = 0;% c; |- k5 z# v- q; h! V
  intFlags |= (UART_INT_LINE_STAT  |  \
9 A! h# F' n" o% _0 D            UART_INT_TX_EMPTY |    \" T$ ~/ V  f  Q
            UART_INT_RXDATA_CTI);
0 K2 o3 y" H( J: Y. Z( K            2 U) Q/ N  O7 A5 Z1 Z% r4 _9 \
    UARTIntEnable(SOC_UART_1_REGS, intFlags);5 j9 P) b9 S3 D3 B
}( d4 i, `$ C! W
//UART 中断服务函数/ S1 G. ^) ~% L% I1 {
void UARTIsr(UArg arg)) w% s' Y" p, i
{
% J: r7 Y( k- q8 s9 x    static unsigned int length = sizeof(Send);
9 V7 f9 s$ ^$ v: e8 _) }% P& z    static unsigned int count = 0;" [8 k% j/ k  E1 i$ T" p  m* K
    unsigned char rxData = 0;: d$ x- P, d& o4 d) y! i& W1 {
    unsigned int int_id = 0;
/ K+ P& F* P4 H( r1 \3 r0 K+ N/ B    // 确定中断源4 d# u/ K1 t. y$ S9 x
    int_id = UARTIntStatus(SOC_UART_1_REGS);
) c1 w/ g; g5 ^4 V    // 清除 UART1 系统中断
: z* S1 O& \  \7 ^9 F% |% B3 w    IntEventClear(SYS_INT_UART1_INT);
! N4 H* d5 T4 Q  a4 |3 g; K    // 发送中断
% i5 d; z5 b! ]8 v( g* M    if(UART_INTID_TX_EMPTY == int_id)4 C3 _. H% f$ ]% T+ v8 p) K8 F1 ^
    {
# p& u, ^) u- _2 r  Y" C4 S+ L" c7 Z" w        if(0 < length)7 a7 M# ]$ b- H* Z, J/ h
        {
% ^3 X; m- x5 U$ N2 w7 ^            // 写一个字节到 THR
: Z2 R+ i4 x, D! o+ u" @- e1 b2 j            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);7 v3 X  t6 u6 d! h0 U( I3 T# Q
            length--;, Y, `1 P; [% b
            count++;
2 |: z  I2 `1 q        }
+ W% n% @! j  c' a# y% a8 |; P  u4 B        if(0 == length)
7 T1 Q+ O# }) A3 e% w        {* X0 z4 O2 l9 P1 W( N; a) j5 }4 G4 S
            // 禁用发送中断1 e' m5 o. |2 j* Q9 z- V5 R
            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);, h# c! P2 z9 w/ c  m
        }  A: Q6 e8 \& B; \& H. N
     }! w4 j" u8 `: m  [2 n9 e* Z
    // 接收中断  m. V7 @/ z5 I3 x8 r
    if(UART_INTID_RX_DATA == int_id)4 |. d; ]" z: _0 ~7 a/ E1 M
    {
% r6 [8 T0 r8 B4 y+ B7 G        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);# a: J5 T' U% Z) S% x$ a( h
        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);% }: K6 A" l4 b# \" U! d
    }
/ ~; v, w8 b9 o    // 接收错误* |" g/ `# `6 T) ~( N
    if(UART_INTID_RX_LINE_STAT == int_id)
1 D# H* U- \. }. ^    {6 n( y! j/ n  ^5 @4 C; n- U
        while(UARTRxErrorGet(SOC_UART_1_REGS))" N8 ~" S" n. A7 h2 L* M( r
        {  P- Z* v: N& g! Q1 H; ]" }
            // 从 RBR 读一个字节/ {8 y0 z' p! a9 ~6 P' h5 ]
            UARTCharGetNonBlocking(SOC_UART_1_REGS);- J1 G+ h5 x3 m. c# i- Y
        }, v* q4 L+ t/ Q; O3 ]
    }
3 e0 D& z( C* x& o( s    return;; z% {: @3 ~" y# k' Z- k
}8 j9 W" g, q1 @* t0 q
Int main()& }# e8 I5 a9 S) D4 @. v
{
5 v, P/ t* [* s1 m( L' y UARTconfig();//uart 配置
3 T$ Z# z8 r" T: D5 @; l; \    Error_Block eb;
4 l& t4 |; J6 C8 m- o" r6 r  P    System_printf("enter main()\n");
0 `" k1 s) M) Z+ Y2 D' [    Error_init(&eb);/ e* Z: q. R% L) J$ L7 P
    // 动态创建硬件中断
4 K/ V/ m. i: ?* {    Hwi_Handle hwi1;
3 m. Q; |  ~' o/ ~    Hwi_Params hwiParams;; c. T5 I% N" b! `7 G
    // 使用默认值初始化参数
, s( W5 {5 o  }2 r" h7 h    Hwi_Params_init(&hwiParams);3 Z7 ?6 Y; j1 u9 F8 W  i: f
    // 中断事件
: m$ k  O8 a8 V- r    hwiParams.eventId = SYS_INT_UART1_INT;9 T) `5 j$ n: F: J, z+ ]1 n
    // 传递到中断服务函数的参数. }: v4 ^8 E/ A( g; R! e: {7 Y. i
    hwiParams.arg = 0;+ `9 a% v9 r" Q8 e7 E3 }; t
    // 不允许该中断自身嵌套
6 Y/ m4 l) J. |* s    hwiParams.maskSetting = Hwi_MaskingOption_SELF;
( g% l& V! e7 ]( o* U* t    // 使能中断
" e& O2 y, e6 u    hwiParams.enableInt = true;
' z% d# X, ?' {5 p# r2 v7 D    // 可屏蔽中断 4' l+ e5 G; r# `" Y5 R( L2 B/ @
    // 中断服务函数 hwiMain9 u4 `+ \/ e7 V
    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);
0 p, O3 C) a! P  i. o% m4 `    if (hwi1 == NULL)! c- z5 m# S  i/ G7 p! a* H3 K
        System_abort("Hwi1 create failed");
" x+ |  G# }, D1 }1 \2 ^# D9 O    BIOS_start();    /* does not return */
3 S5 ^& ]2 ]5 s    return(0);
5 {, {" {) w% D* i# _}7 i. v& Q# O% P2 V- G! p' ^) C
6 A+ B- ]0 G# b4 h: }; [: U* z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?
8 M. H6 Q/ L. o& e# f
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点9 |' F$ G4 d; w/ l/ h
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49
" }7 _; d, ]& w# a0 n; a2 b6 z在中断服务函数里放置断点
# f! B$ n8 ]5 Q4 H
参考 GPIO_KEY
" P# i! J' E2 b; r
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-31 11:44 , Processed in 0.042208 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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