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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下& j5 i6 V2 \5 ^! K& F, Q$ _
// 发送缓存
, @& _8 P2 w4 c/ \$ w/ P0 h; Kchar Send[] = "UART1 test......\n\r";
, @" U& N9 H( R3 s* }8 ]( T
2 w2 [& r# }) k; W3 v: ~extern void UARTconfig()9 K, G6 }6 J7 \
{8 d1 |+ b; y' A; x0 ]6 N
//使能Uart1
! o% O# ^# y8 G( X) D6 v PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
8 J  q; u& z% J ( a- l5 o7 e. [2 w# s+ a: |
// 使能 UART1禁用流控
( P$ h* {; `: N, D1 E/ c UARTPinMuxSetup(1, 0);
2 N/ Z( ?1 R8 ?5 P8 V! `) i
4 X4 E/ @* a* a" X, B6 f2 m+ K0 _# N- i" p // 波特率 115200 数据位 8 停止位 1 无校验位
/ D6 D. E) h! W  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);* p1 e/ n6 g0 f. H9 N

$ \" P3 V& a8 r) X8 p  {2 |  o9 D: V' D  // 使能 UART1
4 Q$ U5 ?" u$ f' i8 k* u UARTEnable(SOC_UART_1_REGS);0 g4 f. R5 h$ i' a) r, {
  // 使能接收 / 发送 FIFO
; S, |" e: v1 N9 q7 ~  UARTFIFOEnable(SOC_UART_1_REGS);
- ^$ r. D( U0 ?3 U& i  // 设置 FIFO 级别* g" j! E' z3 S# ?# s7 ]! X
    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);
3 C3 p1 \& ?1 Y: N" l  //Uart1中断使能  }" q/ @- g5 n7 \0 [7 A3 N
  unsigned int intFlags = 0;) G9 N, N6 K8 V1 J" \9 ~1 d
  intFlags |= (UART_INT_LINE_STAT  |  \! H( G/ m( D8 w$ |9 j0 B
            UART_INT_TX_EMPTY |    \! m) n$ l6 V/ n6 a# D1 T# k" \
            UART_INT_RXDATA_CTI);
% L* ]8 z4 f1 G6 o  W- |5 P  h/ Z+ I            
2 @7 H) R: _6 s( l/ v, `, v    UARTIntEnable(SOC_UART_1_REGS, intFlags);
# P' e, f4 S9 i, X- T}
$ q+ M$ r6 C: e* f6 ^8 o//UART 中断服务函数: F  e+ g7 i% p$ N5 B* Q, p% G% }
void UARTIsr(UArg arg)/ {& a/ T' o' s# q' ?4 ^  ~
{
9 N( x5 r) s* |3 n0 s) V7 S% U    static unsigned int length = sizeof(Send);
! q5 l+ P2 D/ z$ f, {1 U! @    static unsigned int count = 0;
' {4 b7 h. J" ]; V& o( {( h) g    unsigned char rxData = 0;
* @) p* _$ c' d6 L- M* ^3 F    unsigned int int_id = 0;5 ?/ j) V' M0 W  ]9 S/ M6 \
    // 确定中断源
: r. g; y" ?$ O) {" }2 {; x    int_id = UARTIntStatus(SOC_UART_1_REGS);% I5 l0 P- T# I% O9 g' {) W
    // 清除 UART1 系统中断' X5 Y" j0 {- H& z5 X7 n3 B
    IntEventClear(SYS_INT_UART1_INT);
9 N  B2 `' R6 ]* b: A7 @9 ?; t    // 发送中断
8 E* d  d/ v8 ?, n1 x0 k" `    if(UART_INTID_TX_EMPTY == int_id); a8 K  k( X/ `6 L% T0 ]- K: `  \
    {
$ S: @8 ^0 |7 K" I        if(0 < length)7 }" C3 f' W+ L
        {
7 p; |. b# N1 [9 S/ Q4 \            // 写一个字节到 THR
) \& s. }; O/ u& Y6 n4 s            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);/ h% G  ^" c' b5 ?. j! e
            length--;
* M4 w7 g4 ~$ I$ U( h/ w4 O            count++;; G4 V( j2 z" B# g7 N
        }
% F% b$ Q, M4 I# S        if(0 == length)
1 B( u7 H" c+ B$ i& u        {3 Y& l; |3 |$ h
            // 禁用发送中断
; |3 B1 z2 n% z( K$ Q& _# s            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);# l7 v4 w( z. G+ e# L
        }  K1 t% e: m6 k+ b
     }6 A' h, c1 ]* O7 M6 \
    // 接收中断- J4 m+ Q9 M- E; K5 [: }
    if(UART_INTID_RX_DATA == int_id)' [- V. p. w, ^; v+ m" x
    {) b& Q  o! d1 N+ ^! ?, c# {! F
        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);  d. X& l, P3 ]* Y, q
        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);# Q0 |) S  h1 t8 r0 e1 L! r
    }& K9 ]1 T- _1 f6 j- j' p0 e, _
    // 接收错误. t0 h6 c$ Z$ U
    if(UART_INTID_RX_LINE_STAT == int_id), y. Q& [9 I9 x5 z8 k8 t% B
    {
, x; A" s( t# ~- K3 S; \        while(UARTRxErrorGet(SOC_UART_1_REGS))5 N7 P3 }, b' S8 M
        {! ^8 \6 G( L: N* _6 V2 D
            // 从 RBR 读一个字节
2 R$ W2 [; N; C7 ]0 D            UARTCharGetNonBlocking(SOC_UART_1_REGS);. \9 z7 H+ e3 b$ K! t
        }
) f6 ]9 m+ G, n& }0 f    }
4 p+ A8 n: J# x+ b) g    return;2 o. f: P  `  C; @; g7 J" f* o
}0 j1 L+ {/ L0 z# l' m
Int main()6 v3 m2 g% w/ Y6 }1 ~. p+ {1 P
{ & e: J; P# S; z% d" R4 J& R
UARTconfig();//uart 配置- R) }" L+ v/ l
    Error_Block eb;
+ G( E5 ?- [( r    System_printf("enter main()\n");8 U9 Z& h4 G  v$ g: y% Z8 r
    Error_init(&eb);/ W1 K! e- W  T4 F& ~7 A
    // 动态创建硬件中断8 y3 x* K1 y0 H/ X
    Hwi_Handle hwi1;( j) E$ ?. c2 A/ g
    Hwi_Params hwiParams;
, c/ b8 @; ?4 s6 h% _' f    // 使用默认值初始化参数
0 `# `6 w  }' h' w, z  d- d    Hwi_Params_init(&hwiParams);
- x# z: L7 f4 v& k8 G  Z3 J  _  x    // 中断事件
5 ?! O; Y$ k$ @1 d( S1 t# H% \    hwiParams.eventId = SYS_INT_UART1_INT;
+ H' X, Y+ f0 p  J2 Z, ^    // 传递到中断服务函数的参数
, \5 ]: k: A  }' d+ w# I( n    hwiParams.arg = 0;  D+ \& ?) b! o2 o5 l
    // 不允许该中断自身嵌套0 T$ x/ c# D: E* |7 p, ~& b' h
    hwiParams.maskSetting = Hwi_MaskingOption_SELF;0 T- K, v+ S% `+ }
    // 使能中断
* l! X* U; g9 m% }; W    hwiParams.enableInt = true;1 X; M1 s* l8 T+ y$ _
    // 可屏蔽中断 4( c6 Z6 m( Z/ {5 R. Z" b, d
    // 中断服务函数 hwiMain2 i) a/ J9 V# @0 w  z
    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);
+ L+ ?5 [8 A6 h- }! m: U$ m    if (hwi1 == NULL)5 N7 N1 Y) r) n* p% @
        System_abort("Hwi1 create failed");# w' l. h" S$ x) b
    BIOS_start();    /* does not return */
( e4 \- k1 G1 c  V# a# N. {1 g    return(0);. ?2 c3 B8 R6 r  Y
}1 Z8 K; d( E( v
* Q" W& y6 ^2 S5 g! N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?
+ r1 K# v+ R& v" V) N% Q
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点
* @' A" p7 E9 w9 T7 }# ^3 i- z+ b
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:497 [% u5 b( E. `3 V
在中断服务函数里放置断点

& v$ s) {% |: o参考 GPIO_KEY
2 A1 ~: Z, b& q
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-17 05:19 , Processed in 0.041093 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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