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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下
5 b8 J6 U% N0 M/ l// 发送缓存
$ R/ O8 p# y7 f6 R0 tchar Send[] = "UART1 test......\n\r";
) D5 C- I6 `7 ?0 V9 S5 Z- C* k  t) t& _/ B
extern void UARTconfig()) l3 h/ `) f, L
{
+ }3 H9 z  u: a6 z4 a //使能Uart1
0 A4 w( m- @$ k# s% J PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
6 s7 _: ~1 ~  x# m9 {5 Q  Z$ { " K% M, c/ p/ J  l& P) E) u
// 使能 UART1禁用流控# h" J$ V8 ?, J3 K( T# @
UARTPinMuxSetup(1, 0);2 T: r- O3 O" W+ R+ A4 s

5 `0 p- g' M! s- h3 G) I. K, ` // 波特率 115200 数据位 8 停止位 1 无校验位
2 W0 C1 J, o8 P1 g' o  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
/ B: c$ F9 q# S, G' O 8 s5 b5 F: M1 p0 L. |
  // 使能 UART1
- h9 G; l& d1 S4 f5 |1 _( G UARTEnable(SOC_UART_1_REGS);
& R/ c# k2 Y; x  // 使能接收 / 发送 FIFO0 A5 N) `2 N7 T0 B* c0 ~: q
  UARTFIFOEnable(SOC_UART_1_REGS);8 X+ ~! R2 J4 v/ x' y. d, \
  // 设置 FIFO 级别
/ c' Z. I6 m2 E( F3 Z$ K; Y' r( S9 I    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);
9 a1 J- n- }( O+ n0 O4 T6 v  //Uart1中断使能
# Z' s$ M: X# P& D$ |  unsigned int intFlags = 0;
% ^6 B" w" p% o9 j  intFlags |= (UART_INT_LINE_STAT  |  \$ A+ X! w9 f/ G8 ~
            UART_INT_TX_EMPTY |    \
2 ?8 Z# f, X& M& f8 ?8 f3 @( p! F4 {" l) F            UART_INT_RXDATA_CTI);/ J  D& O  d7 s* t4 c
            
& [$ Q# d, I9 N% J9 j; e( A    UARTIntEnable(SOC_UART_1_REGS, intFlags);! Q  k  c" ^/ e4 }8 Z# i, z+ @9 D, A
}9 k. w; m8 Y. o9 ?8 c; b, M
//UART 中断服务函数/ L7 S: d9 k: t# c% D% }- }' ?
void UARTIsr(UArg arg)
. ]  }# e8 p1 w4 |{( a3 k0 X+ o* i5 P0 z0 q
    static unsigned int length = sizeof(Send);
- b! `% h9 l( Y" p+ t    static unsigned int count = 0;5 d) a# a+ C7 a+ w7 I1 U
    unsigned char rxData = 0;
$ D% A7 A5 w' a    unsigned int int_id = 0;
6 A# Y8 O4 j& @/ w, o' f    // 确定中断源
. r+ \# n' u: A* `( x) B4 Y3 h3 D    int_id = UARTIntStatus(SOC_UART_1_REGS);1 S0 y: h+ b6 J) D3 \- {/ n
    // 清除 UART1 系统中断1 ^! V$ R, ^4 N9 F; m: a
    IntEventClear(SYS_INT_UART1_INT);1 l7 A3 }2 G3 h0 Z+ I$ _1 B( M
    // 发送中断' S& s3 \. x7 i: p
    if(UART_INTID_TX_EMPTY == int_id)
' o5 o/ j$ l* J4 j# Y    {/ c9 c5 ]0 j% B+ A* P% Y1 _# ?
        if(0 < length)& o. _+ I6 `; A& I% s' U% Y9 X; H( r
        {
* F& @+ @6 K, O. y9 x. f  M) l9 f( u2 e            // 写一个字节到 THR
& r! _" _. ?8 O" [- r+ B9 ]: ^            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);3 I/ }) m% O4 l/ p
            length--;& ^- F; @$ X1 H+ H; g4 ?/ K+ P! F
            count++;
/ `/ L# T* D9 k# g        }  u( @5 v# E5 r* c0 n3 C0 `
        if(0 == length)
, _2 Z2 B* W6 x' ~7 a) t& {  n        {7 o! E  T) @0 g( R
            // 禁用发送中断
, I# n( }/ @- Y1 F            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
, W" [& _; e. Q9 q- @% k        }; [* ~, ~5 e' m  z$ R' Y7 ^+ w
     }" w8 Z! q# |8 f& B5 k$ ?
    // 接收中断9 {. B( w" ?* |! [% r5 i  M' G% [
    if(UART_INTID_RX_DATA == int_id): h) w% l& b: [
    {
) w- c# r* f' c0 e' V1 O6 m        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
1 N3 d/ {$ `+ o! d$ H        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
* v$ }2 G& h' f* n( v- m( V7 y8 f  |    }
0 x) p- f( N$ t; e    // 接收错误
8 U7 z: w5 P0 ^' ?2 r1 D" o    if(UART_INTID_RX_LINE_STAT == int_id)
& G, @' B- I: [: ?    {
2 p. s0 V" i$ V) O        while(UARTRxErrorGet(SOC_UART_1_REGS))
! _. z' b( ^$ @( Z  u        {% d2 d1 e# c( v8 J/ R% V
            // 从 RBR 读一个字节
' {& p" f) q2 b. W! E            UARTCharGetNonBlocking(SOC_UART_1_REGS);
) x9 o: j1 x5 K5 c; T/ D2 r        }. m. Z" ]7 m2 Z2 T) O1 h0 c
    }0 P" x* h% R* e! P
    return;, Y3 z+ S- T. c7 t- G& \) \7 M' r# L
}6 T- \7 N0 v* m8 N. {
Int main()
0 }: x& m0 K& h/ @# Q8 O2 o{ 6 I( U& m5 A6 A( p$ {' }  I
UARTconfig();//uart 配置
3 o0 X4 R2 Z6 R    Error_Block eb;
' D( m# k8 u  W9 U    System_printf("enter main()\n");
1 V6 o& ?$ E" }4 M8 ^1 _2 p5 R7 h    Error_init(&eb);5 ]) f1 Q. z$ R; _- v
    // 动态创建硬件中断
2 P; [: N2 L( z    Hwi_Handle hwi1;
# H8 X' N, [: b  J# @6 Q9 F7 l3 Z5 v    Hwi_Params hwiParams;
) t! Q' }. x5 Z# Y2 Z' S2 [9 V    // 使用默认值初始化参数
! s8 J7 r6 X2 P8 H; D2 a% Y1 E$ G    Hwi_Params_init(&hwiParams);
  N; r) z! \& k9 f0 `8 {" D+ s% x    // 中断事件
4 |$ Z4 L5 O, J4 N    hwiParams.eventId = SYS_INT_UART1_INT;( V( }1 Z! ?* g
    // 传递到中断服务函数的参数
7 z& G9 n! U% m6 t8 ?' P    hwiParams.arg = 0;. s4 z, ]4 i/ Q* _! m8 q- r* K* O
    // 不允许该中断自身嵌套1 l1 M' N, L" f7 L. `
    hwiParams.maskSetting = Hwi_MaskingOption_SELF;
) h9 q! V% a! I7 G( @    // 使能中断; g: ]: M3 m1 V3 T. |6 e& f) I
    hwiParams.enableInt = true;
4 G$ w6 r8 P9 B7 H    // 可屏蔽中断 4
- [* E% X7 u) S; J- t5 e    // 中断服务函数 hwiMain
7 `+ p5 B6 I' }  ?+ A" f0 u    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);
* y0 S# I" [# W  z2 I    if (hwi1 == NULL)
% `! @. j' Z: `, U        System_abort("Hwi1 create failed");& K$ i, ]2 j3 g$ z2 x
    BIOS_start();    /* does not return */& e/ S: E) x$ s. T( z
    return(0);
" R" j+ X; g0 d7 M* O! C# `}+ M: ~- _+ O2 f# C
2 {" l; o5 i/ J# F) r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49
0 r2 b$ T! I( h% F1 V在中断服务函数里放置断点

" g8 Y) \/ f+ G: Q) F  O参考 GPIO_KEY
' V$ {" h4 B! k# V  `
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点. l5 `8 h4 k) S7 f, c# e
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?
1 r+ Q' C) ~' }3 Q* P. @' L
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-24 07:34 , Processed in 0.053917 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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