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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下
3 t/ v9 T4 J" N* R  z// 发送缓存4 H' a7 z: S7 q: F' V% Q
char Send[] = "UART1 test......\n\r";
( M# e+ {3 u6 q& Q% ]& d0 G) n; n, ^( h  p. b! e
extern void UARTconfig()1 l- }, `) c% ]0 ^) ~! `
{4 e0 S4 L. y1 l" _! J3 R# r
//使能Uart1
  c9 X& X6 |. m& z' T% { PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);/ w' M/ n' y1 Y$ h$ [" l
+ i  D. K. t" j0 A1 T& O
// 使能 UART1禁用流控
) e7 w  |1 D' x  g UARTPinMuxSetup(1, 0);* u' Z7 `/ f1 c( G- Y5 s: B
2 d  d; j( K& u% t  T! J
// 波特率 115200 数据位 8 停止位 1 无校验位
/ q) Y/ w7 W: b! D  G" h  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
: X$ _/ A1 ?7 ]/ Z# V
$ _( q3 B% {2 l% T1 ^* d, r& i4 g" w  // 使能 UART1# V: }  B: W5 C, i6 a8 T
UARTEnable(SOC_UART_1_REGS);
- s5 E) N$ f2 C' D8 _' T  @  // 使能接收 / 发送 FIFO
* |5 [4 t8 ]0 L# C  UARTFIFOEnable(SOC_UART_1_REGS);
1 h* Q+ \- N+ O- t# ^  // 设置 FIFO 级别! b, e6 R% F' C$ U
    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);
! q; `. U$ s8 p0 L  //Uart1中断使能
( ?) [& n5 D& X' R6 P& r  unsigned int intFlags = 0;
2 [+ d. i; k+ ]  J  intFlags |= (UART_INT_LINE_STAT  |  \" P! _* |' c5 \- Q# Y0 \: M
            UART_INT_TX_EMPTY |    \+ m3 r1 q! G! I1 P8 n7 @8 N
            UART_INT_RXDATA_CTI);: ], @8 k4 M) H4 \
            " W# d' k$ n9 i8 U' h" d
    UARTIntEnable(SOC_UART_1_REGS, intFlags);1 x* Q7 z$ W6 X/ D8 [
}
; {* _/ U0 d1 u//UART 中断服务函数  D+ s0 C0 j! a: A
void UARTIsr(UArg arg)
0 H; D9 {( `& B/ H& [  `2 K2 V{) m+ n7 D, }8 i% V1 s6 ?
    static unsigned int length = sizeof(Send);; D( b0 ^, b+ y# [7 I' k2 x, Z
    static unsigned int count = 0;7 B- K, J# n: ^
    unsigned char rxData = 0;
  Z& ?4 c! D3 W/ w  g    unsigned int int_id = 0;
% L- \. \: ?) g; \    // 确定中断源
- a. @9 G* E( f5 y( Q    int_id = UARTIntStatus(SOC_UART_1_REGS);7 Q+ Q% x! G- M! ?; d. ^6 a) ^
    // 清除 UART1 系统中断0 j5 `8 i- E9 Y4 j! B
    IntEventClear(SYS_INT_UART1_INT);& b' L" n4 N$ T" ^/ x6 Y6 s0 T
    // 发送中断: s4 [: m0 i# N! C) E: x' N
    if(UART_INTID_TX_EMPTY == int_id)& N8 n1 K4 P- D" Q3 R6 C/ t
    {
' e& A0 Z3 w( ]  C* Z        if(0 < length)6 b# t7 |! f5 p# C: L5 P
        {4 r' O7 J3 r5 r' a3 G% Q" B: Q
            // 写一个字节到 THR
% I$ P: {7 a% D( I3 d* v* M) s            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
2 K3 V8 y# w5 x6 |* W            length--;
* R: ]" z% @: S3 t- v) Q( u' {. A' l            count++;
0 D0 z; h8 l5 m! V- h- c/ A& z        }* H4 X: l+ a' i" Q1 Z
        if(0 == length)8 h0 y7 ~( ?6 w7 x: k0 T1 I$ A- l
        {+ p: `2 q% C9 J. p# l
            // 禁用发送中断
$ }5 T) [8 ~2 g. V- p7 I# x            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);% M9 {* ^6 R0 h" u) j: ]1 F7 y( H
        }
; s. r+ S; y; e  g     }
9 E! w+ q: B" b2 K% i0 T& l    // 接收中断$ \' Z' j: K# a2 Z/ J6 H
    if(UART_INTID_RX_DATA == int_id)
. M- c. D2 v! _+ T, I    {
7 \$ N) w' Z+ v! L6 ]1 }; V        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);/ F" d: [* i# c$ `, i) B/ b5 n
        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);2 L0 G( B  B! K" k6 P4 }" P0 z& F
    }2 Y, V* K8 h$ O
    // 接收错误% x4 B9 x3 Q0 J2 x5 V
    if(UART_INTID_RX_LINE_STAT == int_id): g, L( R8 V. s" e7 ^! a6 j+ l7 N8 C
    {
% E: t5 x5 D* _$ B! L        while(UARTRxErrorGet(SOC_UART_1_REGS))7 T) f3 Y# M9 J* ?$ [
        {8 d; i$ x& V( G  n
            // 从 RBR 读一个字节
- f  D2 h: }- v1 ~            UARTCharGetNonBlocking(SOC_UART_1_REGS);5 U* l1 ?% U! e; h1 S& g
        }
9 U9 A$ l" C. E. T% A) x2 Y8 F% n    }) E9 F' h% I+ q% y1 O& X
    return;3 I8 a* P% k2 c- Y* z* F- @, [
}
, ]$ ^- p! r# \& G5 }2 q4 uInt main()
+ s; c* _1 u! Y2 p{
- I) |' K# o* ?! S; G' k UARTconfig();//uart 配置
5 n& y5 a/ w) a8 l  M# T) Q9 o    Error_Block eb;1 D( d! i4 {- y: j( r5 n
    System_printf("enter main()\n");
& C1 x9 |" M6 q  e8 K, p, Z    Error_init(&eb);1 T  [' u$ D2 l$ e0 J3 G4 G
    // 动态创建硬件中断
, I& k* U8 w& i* C    Hwi_Handle hwi1;5 R; S4 W; Y& x# |" e3 K) |7 M% x; E
    Hwi_Params hwiParams;
2 V. L, u* }# M  Z$ D    // 使用默认值初始化参数# f, H+ E+ F9 \; N- {
    Hwi_Params_init(&hwiParams);
) j% U& E3 t* g  K- D/ g2 J    // 中断事件
2 w% n4 N  j4 K1 r+ {9 y    hwiParams.eventId = SYS_INT_UART1_INT;. ^: F1 r' U9 a
    // 传递到中断服务函数的参数  ]& d& O. P3 e8 b! [9 j! H2 K% I
    hwiParams.arg = 0;0 q  }2 M2 P/ ^* E% F
    // 不允许该中断自身嵌套' Q; h  I& ~4 T6 y
    hwiParams.maskSetting = Hwi_MaskingOption_SELF;
3 {* t% F! q* \* z( Z* y    // 使能中断
3 r" H( m1 G1 f! @5 u$ `! O    hwiParams.enableInt = true;7 @6 Q3 W, ~, f* {! g3 X& B5 g' P8 `
    // 可屏蔽中断 4: _8 ?- P( e* ^/ A
    // 中断服务函数 hwiMain, E& T$ I5 B- t6 q. ?
    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);. [- r1 F& d9 m' W9 t
    if (hwi1 == NULL)
% I0 U- x8 I6 T  x+ ?% T        System_abort("Hwi1 create failed");. ?3 |$ s% K3 ]$ O* D4 Y8 \0 S
    BIOS_start();    /* does not return */! z" h" o0 z9 J) B
    return(0);
9 O* q- y4 I* w1 B6 ?0 E  V- A: F}
/ I0 I1 ~  p# e# c2 D9 E, d) _  [1 c3 U! x: c
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?% J+ X) _% @, A3 G$ D; N
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点$ q: N: L3 K$ b( d  o+ \: j/ O
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49
4 x: ~  {! H: j/ y; y3 B" P+ [3 Y/ @在中断服务函数里放置断点

5 ~& l8 V/ v1 q2 A参考 GPIO_KEY  a; l" c  n2 o* O
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 18:25 , Processed in 0.049733 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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