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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下- Y% o% G* ?+ K4 U2 V. b9 P
// 发送缓存5 c& o$ Q4 _; i( V# C
char Send[] = "UART1 test......\n\r";1 S! y' \) F* H1 ^
( ]7 ^: W1 Q4 D  M* F# h" M* N  L
extern void UARTconfig()
% @) z2 d7 w0 Q; t: V. z{- m. E6 X! S7 H6 T5 x# F+ Y; Q
//使能Uart1& M& ?# v, j9 }' A1 s; j% {
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
3 o# W. Q0 P- l8 ~: e) z  n+ {  g
* y9 B* U$ n2 w8 k; Y+ |3 A9 D // 使能 UART1禁用流控: d: G- C% ]# t! a6 E2 y
UARTPinMuxSetup(1, 0);* O4 \( }0 x% a1 [
/ {9 h) f/ P$ A* x  Y
// 波特率 115200 数据位 8 停止位 1 无校验位
2 S$ @$ F+ L$ J/ c  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
1 B/ C- x6 q' }" s& J* @ 1 U: u5 H+ Q2 x" z7 T! D$ N
  // 使能 UART1
- T+ S0 h3 M/ D/ s UARTEnable(SOC_UART_1_REGS);
: I/ R, i% H9 N7 U# S" Q, ~/ R. X+ j  // 使能接收 / 发送 FIFO
% Y  U' t: }. J# q* S! v  UARTFIFOEnable(SOC_UART_1_REGS);+ t7 |9 m( i: u7 Q  H
  // 设置 FIFO 级别
( d9 g. V' `5 P6 _    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);( E/ |6 J: j" D1 H4 r
  //Uart1中断使能! ~3 T# A4 Q0 c. t
  unsigned int intFlags = 0;+ Y9 D' ^; V  m, h% R. G
  intFlags |= (UART_INT_LINE_STAT  |  \
1 m& N% |' C6 ^; K6 e4 P- m) ?            UART_INT_TX_EMPTY |    \# K9 q' j4 [5 ?3 u* b) m7 U
            UART_INT_RXDATA_CTI);) P' ?; H* O+ t6 ~' B; D
              B* a, X$ f8 X! I0 r* [: t/ _
    UARTIntEnable(SOC_UART_1_REGS, intFlags);
0 i8 c7 J' @* y* f4 \4 N}
% r8 c5 {6 P0 Y, o" u//UART 中断服务函数& `2 V$ m6 A& Y: H; \4 ?+ G
void UARTIsr(UArg arg)
. z8 h: n) N' A, J{
# s2 v+ X4 g. y% ]    static unsigned int length = sizeof(Send);
: C9 ]: o1 B' g; s5 a; M/ J. q    static unsigned int count = 0;! ]/ d2 k# c; V/ w6 A# w" G, Q
    unsigned char rxData = 0;
$ Z: a0 D; r/ }) ?    unsigned int int_id = 0;
3 c. `) ?  E) r) k4 t7 ^    // 确定中断源
4 C9 H* H1 Z, x3 b" p+ h6 h    int_id = UARTIntStatus(SOC_UART_1_REGS);* v# Z2 J+ v, ~
    // 清除 UART1 系统中断7 r& j( B- P( d) R/ G6 g$ ?; x
    IntEventClear(SYS_INT_UART1_INT);) ~! G( a4 ]; k# \0 d7 C
    // 发送中断% t- X" _) r6 b
    if(UART_INTID_TX_EMPTY == int_id)
! U3 M- F# [# c% F: d; h) S    {% j5 u! H' N) N5 Y) M% v5 |' J6 S  K
        if(0 < length)9 Q3 O$ E  @' v' _
        {# I; Z6 j9 h: B2 d- x
            // 写一个字节到 THR
# _- K7 G; Q2 D& r0 P3 f3 N; q) O            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);7 J) V, S& j3 Z5 [
            length--;1 ]# Q. k0 s" l* @  _2 U
            count++;' N% l+ h) S8 y" J3 V8 x
        }
5 P/ y. i. y3 E  M8 F$ Z( p- e) g        if(0 == length)
* ]$ |' f* k. M9 p        {
# P2 E5 \3 j; w3 m            // 禁用发送中断
/ F$ R$ F; @9 ?+ P7 d& V0 l2 F; J6 Y            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
( d- ?0 l: Z% M8 [& h, M& n* J$ k) w        }
" Y/ `1 p* L2 L7 c- n% g; m9 x     }
$ k& B# S* Y* h5 [    // 接收中断
$ l  n0 I. {3 T    if(UART_INTID_RX_DATA == int_id)
4 m+ D' w0 n+ i1 m( J6 F3 f    {
# l( }% _( a; u  w% P) t$ V: A; U        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);8 u. ?$ \6 L, q* D% s# m
        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);- \2 D& t' r( i: z5 d! C0 o
    }
# I( L/ i, l9 Q: A    // 接收错误
' }8 z$ _, C+ ?5 d. R* l  N    if(UART_INTID_RX_LINE_STAT == int_id)
- d9 L5 C$ z3 ?( _# h+ F1 ^    {
& ?7 s: M: h3 w0 X        while(UARTRxErrorGet(SOC_UART_1_REGS))
: d0 E' e% y* ^" m. ?& Y5 M        {3 `' X: {7 z# n# I( n4 q
            // 从 RBR 读一个字节
: f7 D3 c3 |1 {1 s0 g            UARTCharGetNonBlocking(SOC_UART_1_REGS);, V2 X2 q; N/ D6 X; w% q1 r
        }
6 t6 b$ z! r; j$ v. `3 S' J    }! _6 s/ \8 W* C$ d+ ^2 j, @3 M
    return;5 C3 |& C$ [- a1 x+ z
}
! V# i# J3 e) XInt main()
7 b8 }7 j8 n* a- G4 ?! Q{
, F7 h# f) f1 N UARTconfig();//uart 配置
9 i" s/ {  \5 x* _! p4 a9 H    Error_Block eb;
) X; e" ]: Y. ]1 _' G, i) }    System_printf("enter main()\n");2 G7 ?1 z8 J' G% `( d
    Error_init(&eb);! s3 y, ^* S2 Y9 m5 {4 ?. n- ?+ N9 `
    // 动态创建硬件中断$ ~) y" f% ?% R( m
    Hwi_Handle hwi1;; s0 t0 u: P+ R$ [5 {$ P& X
    Hwi_Params hwiParams;* @5 G& N  n  ^8 N
    // 使用默认值初始化参数
, m, {6 `3 M4 g$ O, s    Hwi_Params_init(&hwiParams);' }. q& f" z. o2 ~7 n# U
    // 中断事件7 M  h( I0 n; `2 y/ h* j
    hwiParams.eventId = SYS_INT_UART1_INT;
$ n) P  k% F2 _$ R. U& y- Y% N    // 传递到中断服务函数的参数6 B2 F" {- W: x1 D
    hwiParams.arg = 0;
# o4 j+ W2 ~9 R- R0 j$ W    // 不允许该中断自身嵌套5 {0 V5 A9 D# O" q
    hwiParams.maskSetting = Hwi_MaskingOption_SELF;$ j, p( g$ ?' K; Z8 z! a4 P- t
    // 使能中断2 L# c4 O8 z+ j% x
    hwiParams.enableInt = true;8 G3 z  N; g9 U2 o+ P9 `! H( p
    // 可屏蔽中断 45 L  q6 }& C+ l# k2 m5 F6 [2 Q3 ]2 O9 u
    // 中断服务函数 hwiMain2 }! G9 E+ j8 O
    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);
/ E3 W% ]. G& \" B7 j5 C  K    if (hwi1 == NULL): \3 g. C" r. R% U! O* A, \2 }* q
        System_abort("Hwi1 create failed");/ U/ f6 n5 K! u7 B4 B
    BIOS_start();    /* does not return */- d; h' z% {# ~5 ~2 E
    return(0);" [" ]  `+ _  y' U( |! F' k
}1 j! w% A  q  x

% i% F; n8 G4 [0 E
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?
8 r5 a& z9 u3 Y$ o: N/ n' }' [& @
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点
" {6 ^1 \+ @' A/ \
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49: _) p# _4 M- ]" Q8 ~* }" X" A+ s
在中断服务函数里放置断点

7 r+ f9 ?3 x1 i/ o" f" r参考 GPIO_KEY
/ }3 N4 _) N8 b6 k0 w! }4 N  Y
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-26 02:11 , Processed in 0.047471 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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