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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下
5 p+ V  U3 K* l6 Z& }8 }' x: R( _+ l3 v// 发送缓存
' F5 r- W8 J2 @1 m. J8 xchar Send[] = "UART1 test......\n\r";
! T2 Q& x, f- b2 o: }+ r2 E) |' T' M6 s' Q4 O7 ]+ H
extern void UARTconfig()( P! N. R: s0 R( T6 |
{' d) M8 C# w5 [9 j, B. }1 [
//使能Uart1/ R% @; \3 e( S. e5 H
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);: J- z+ H" ?) q) s1 P1 O% ]' n, Q$ z

& o# `, e4 G3 \4 L( X // 使能 UART1禁用流控0 c# m+ I. F& |+ G4 d
UARTPinMuxSetup(1, 0);
7 Q  A+ O9 G7 J/ g9 O
5 l" G$ f9 D; M$ @+ b // 波特率 115200 数据位 8 停止位 1 无校验位
. }; x0 t2 M! D  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
- y/ R1 W! @8 ^+ C4 h
( A; C2 l1 a$ k: {! {( A8 `  // 使能 UART1
- n- J( C5 L  ?' G5 R UARTEnable(SOC_UART_1_REGS);
% C( v/ z/ g( [- {  // 使能接收 / 发送 FIFO
" \0 s, R' l6 w, A8 k/ W/ h  UARTFIFOEnable(SOC_UART_1_REGS);- F- l/ _& ~" I  B7 o& t& S
  // 设置 FIFO 级别
; Z$ \0 f( O+ A* \$ W    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);& L: {5 Z9 i& z
  //Uart1中断使能
& Z% I1 @9 u! Z5 }5 K9 a& W$ S  unsigned int intFlags = 0;
- G5 E7 m- V% t  l3 s, n  intFlags |= (UART_INT_LINE_STAT  |  \1 q8 j0 A+ l" I$ C. |) g
            UART_INT_TX_EMPTY |    \4 O! q: p% _4 J. ?( _
            UART_INT_RXDATA_CTI);, i2 m% C$ z' l+ m0 x$ k! @6 F& g
            + M7 v* \4 E* Q: f+ a3 C
    UARTIntEnable(SOC_UART_1_REGS, intFlags);1 `4 v8 w& l. ]* U* j% T
}
% e0 ]4 e$ {8 i6 C" ]  c* t//UART 中断服务函数% [5 f1 X  I2 a1 {# X% Z& H
void UARTIsr(UArg arg)
( D' L% J% X9 K{6 m% j' X2 J( h. |1 ^6 p9 W
    static unsigned int length = sizeof(Send);
9 `: z* ]8 L" a1 U    static unsigned int count = 0;, i3 l! r9 z/ Q3 {- ]" S
    unsigned char rxData = 0;- ]! n, t$ _6 {+ R
    unsigned int int_id = 0;
1 N7 r8 s) g4 Z( D: y1 n4 ~3 e6 L    // 确定中断源5 p+ V+ q3 X( {' J( K6 T- M
    int_id = UARTIntStatus(SOC_UART_1_REGS);
, T2 z4 Y/ K  J* z( s/ O7 S    // 清除 UART1 系统中断: d7 R. f* S3 Y. v9 Y
    IntEventClear(SYS_INT_UART1_INT);
! U$ A$ _' I( c/ W  Y6 ^    // 发送中断
& ~! j: F- I6 F( m0 ]) I    if(UART_INTID_TX_EMPTY == int_id)
4 L! o) w( @: f4 N$ U- r" `    {
9 B1 d; O. u7 ^( k        if(0 < length)
* p; m; S$ d5 x9 R( B, s  G# w' u        {' o* U' ?- M$ r; }
            // 写一个字节到 THR4 g0 H/ q/ w- @. H& R- T! i3 u7 t
            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);/ N7 p( N+ h+ |9 c
            length--;$ D( b5 G  U. S! X8 F( O
            count++;/ J7 C9 c5 n' J1 A+ r1 h; c
        }# Q8 B' C+ j; R, J$ Q9 v
        if(0 == length)
9 N4 B% C7 ?, y  z* {% z        {: ?4 n' b8 E6 [' i
            // 禁用发送中断; S3 ]( t8 O3 h+ W, f3 u* N4 X
            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
0 n3 b5 w# e4 g1 }8 T- C3 q/ {3 X# l        }! y0 L( }/ z+ E: O
     }/ {# ]0 D4 w/ @* P% T& {; P
    // 接收中断" u( E6 M' U, v% f2 g" U
    if(UART_INTID_RX_DATA == int_id)3 M* e* g$ E  I, K3 M$ z6 q6 u. ?
    {
0 k% K& j! K' G; c! q  U        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
% p$ U% y3 E0 P; R        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);8 ]( q6 d4 ^9 R5 M. K. T9 A
    }
: G) j: l; F! J' M! |6 ^' w& Z( u    // 接收错误6 j& R9 ]  N8 k: x( X+ j- r
    if(UART_INTID_RX_LINE_STAT == int_id)
9 K% @5 X0 E+ @& B. H3 ]    {& P. _8 ^4 P, V- z& ]  O" `
        while(UARTRxErrorGet(SOC_UART_1_REGS))
6 _) j' j7 k6 I# Q. F! F3 I        {9 u# S  ^& C' Y" n" n" T
            // 从 RBR 读一个字节+ i$ b& O0 r  V- q) d7 o, ?
            UARTCharGetNonBlocking(SOC_UART_1_REGS);! Z3 }$ P  O/ @; _' {& j( X( U
        }
/ Q( C5 N5 ?. m. H7 d0 ^& V) T- N  m    }
) s; r, n& j6 o: ~% @0 n    return;
* q6 E( F2 m* S1 H6 }}9 J: R( v! b3 M. U- y5 r
Int main()
& D! Q: t+ E" ~) e! Q{ % f0 i# k5 Y0 G1 y
UARTconfig();//uart 配置
0 j0 R8 z! P. w% f    Error_Block eb;* [  N2 U1 {& D  `, h* Z- {  i9 k
    System_printf("enter main()\n");; Q* e, J& H3 d; W& m3 D8 U
    Error_init(&eb);
% F  n, E8 O+ D; t" s% t    // 动态创建硬件中断
2 q, f" x* V" K2 K( h! C$ I" F5 a  Q    Hwi_Handle hwi1;# W* u* A& \5 q; C. P
    Hwi_Params hwiParams;0 S1 x- L. Q3 ~4 H" Q
    // 使用默认值初始化参数" O! G8 [5 F  z( T: B* L
    Hwi_Params_init(&hwiParams);. [; r1 d( L8 B; ?; r$ R$ p
    // 中断事件; h. p9 j4 o" D' C- z( b! s4 C
    hwiParams.eventId = SYS_INT_UART1_INT;: ^1 z7 s- I& i9 Z0 y2 E4 F# e; Y- k
    // 传递到中断服务函数的参数- K. u; F8 H# D5 @
    hwiParams.arg = 0;* p7 l* k$ A1 q6 {! v. P
    // 不允许该中断自身嵌套; v: j/ H* x3 G; k
    hwiParams.maskSetting = Hwi_MaskingOption_SELF;
$ }" i( v1 d  ^6 \    // 使能中断0 z7 c3 g2 e( m- R6 s0 D! y
    hwiParams.enableInt = true;. K) c( j  N3 q" t" O: ^+ r
    // 可屏蔽中断 4
) E# {- N* T3 r( b& X5 p    // 中断服务函数 hwiMain; m4 z& }  O% H3 G
    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);* G. v0 j5 s. J) i
    if (hwi1 == NULL)
% S3 w7 n- M3 U, z        System_abort("Hwi1 create failed");
- |; v: k* ^/ f, q    BIOS_start();    /* does not return */
  W% K8 K+ F; Z    return(0);
" p- D9 s4 v7 ^; x}; f/ f9 u0 ~' o& I) B. J

4 Q% Q) r) f; B1 o* q
分享到:  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
" F6 a1 a* l& Y$ f3 ?+ t在中断服务函数里放置断点

; W+ {' ^5 {/ z+ `5 o! W+ X4 i参考 GPIO_KEY
0 f3 Q4 g4 ~4 n4 d
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点
+ F) }* O7 \5 {- t7 W' Y) n
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?; g) ]5 |5 t* F2 I; J( [9 J& b
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-24 23:39 , Processed in 0.042008 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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