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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下7 q. J$ z$ @  w6 M
// 发送缓存4 j, S: A' P7 b# J' `, o
char Send[] = "UART1 test......\n\r";' P8 [! w; {6 S) J0 o* _6 a

- b9 M+ P% D4 J$ e; r( jextern void UARTconfig()  p. n! s1 n* ~$ J
{9 R0 C+ ^/ S( r: _7 h( S, s- E
//使能Uart10 f7 h+ o% i5 Y" \! q1 ^
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);6 M& I, r5 |+ H2 h, X+ I8 @7 o& p

: w: H4 R" h! ?6 X( \, u! v // 使能 UART1禁用流控( W: B% A9 V3 |. O" {
UARTPinMuxSetup(1, 0);. c, M; ~4 H! p4 t# a7 |2 }
; L! s- q8 t, e+ M
// 波特率 115200 数据位 8 停止位 1 无校验位- u) Q+ W6 T8 I/ l/ }0 E& U
  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);+ H% \: i2 _% i
1 m! l7 C) x  Y7 w& X
  // 使能 UART1
0 k0 \9 r7 H7 b4 O! ~, }' H UARTEnable(SOC_UART_1_REGS);
1 U* l9 V/ r/ G8 L2 z% R, q  // 使能接收 / 发送 FIFO$ m3 [% V+ K  j9 L
  UARTFIFOEnable(SOC_UART_1_REGS);: O8 t+ o$ Q) V$ Q2 V8 Y
  // 设置 FIFO 级别; g3 l, [2 y2 T9 N
    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);3 n" Q- T+ ^# R# C  r2 a
  //Uart1中断使能
5 E$ ~" [; [, Z! f  unsigned int intFlags = 0;
! v/ }9 W2 E) u4 w: x7 P2 ~  intFlags |= (UART_INT_LINE_STAT  |  \' v1 x& r% q* y  m
            UART_INT_TX_EMPTY |    \; p0 Y9 c; S' G8 l- x: m
            UART_INT_RXDATA_CTI);1 X+ p4 ?6 D+ Z7 _( c
            
# K& G" h* J, M    UARTIntEnable(SOC_UART_1_REGS, intFlags);4 e# l7 h! G$ M
}9 G/ A5 \/ {  S/ [1 _
//UART 中断服务函数
% j" z8 M5 Z; X1 W+ {& D+ ?void UARTIsr(UArg arg)
7 D6 O9 o1 L. x/ u! e# f{
" A: ~. W, J( r8 Q    static unsigned int length = sizeof(Send);; [, H5 W2 H3 t
    static unsigned int count = 0;- q/ x+ Y8 h) k9 P' C) r' y
    unsigned char rxData = 0;
5 M/ D: u$ P& ]1 ]% v6 M- m( i    unsigned int int_id = 0;8 o1 C2 f' G4 K; O8 r9 `5 N
    // 确定中断源# }0 p" h4 l8 F: C2 i
    int_id = UARTIntStatus(SOC_UART_1_REGS);% g1 D& U) A, h7 ?9 h! V' s4 ?
    // 清除 UART1 系统中断& g, D" m( y6 N* M6 [5 S
    IntEventClear(SYS_INT_UART1_INT);& H( l+ l/ h0 U- ?* {" e
    // 发送中断
" u; Q, V* B' B+ ]    if(UART_INTID_TX_EMPTY == int_id)4 t- P" h5 z1 [( G: L' {, R1 y
    {
9 i' q! q; C, ~( W3 |) l        if(0 < length)0 T) |) b. s' z' q' n! Q
        {
* A* b( m9 [$ R" [2 m            // 写一个字节到 THR8 y9 [4 G! Q/ H2 W& T
            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
8 r3 }4 q& w8 a" X& L' t' g5 j            length--;" p5 b4 w5 K3 g# c8 F
            count++;: b. w2 C5 m# n$ Q$ i
        }
6 u4 o% _6 X+ ^! K- z. }% @5 ?5 b        if(0 == length)* w% r- h  Y" o5 f
        {
  C# }8 b  A$ n            // 禁用发送中断
( b3 T" i4 B; D            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);7 V( V* o1 c% }+ c$ G3 O; p6 b
        }1 d0 {% B9 E4 c; q. e
     }
! N& t4 L' o4 B" P    // 接收中断5 c" Y0 v6 t- s/ C' p" k7 E  R
    if(UART_INTID_RX_DATA == int_id)' r( R) @; N  t* n, M
    {; U- D/ `+ _  ]9 y2 n
        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
3 o" b, \: Y- q" K: {        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);4 o$ i9 q* Y9 ^2 n' j
    }
3 M6 |2 `5 |  e. w& L9 p+ u    // 接收错误5 }0 F" X) W& \4 L& v
    if(UART_INTID_RX_LINE_STAT == int_id)% V* A& o1 _6 M5 a3 ~1 ~
    {
' B; B, m' ]5 J) K! @( {/ P; k        while(UARTRxErrorGet(SOC_UART_1_REGS))
" x( l1 T0 o/ |        {
, h7 w0 I) r# ?, B% Q6 l$ Q7 W            // 从 RBR 读一个字节
7 m$ Y# I3 o5 N: h* S4 S; I            UARTCharGetNonBlocking(SOC_UART_1_REGS);/ t* K' D' ~+ J7 u. p% I+ T
        }
3 n3 K, Y- N) a. B/ I  p0 v    }
. K! e' s3 w: {1 x0 {" K    return;
+ Q1 P* G1 H+ z! p1 n}
- q; X7 c! z* T$ n& M/ VInt main(): ?) x) f2 \! O
{   @) f/ A4 n( ?5 s. _: s0 e
UARTconfig();//uart 配置; c+ _9 T, T$ P/ A, \
    Error_Block eb;4 |" y) `8 |' |: }2 f# W
    System_printf("enter main()\n");0 _, h$ w* G$ K0 [+ a3 l5 u  d. q
    Error_init(&eb);7 ]& C9 g) a! ]4 i
    // 动态创建硬件中断0 m7 g' P+ S& E$ N+ ?8 c
    Hwi_Handle hwi1;7 l# q- l, u1 k) m0 F% Z) C$ o! e
    Hwi_Params hwiParams;
- k8 Q/ B' k. p    // 使用默认值初始化参数/ G- ]' f# l4 T
    Hwi_Params_init(&hwiParams);
) a1 i2 n* _( U+ k    // 中断事件
" |5 V, r2 x: s" ]$ j) @    hwiParams.eventId = SYS_INT_UART1_INT;
; k  c3 Y+ a* Q7 V  ^2 x    // 传递到中断服务函数的参数
, j  U0 M1 k: Q; |1 C    hwiParams.arg = 0;
8 ]7 @& r2 b. l; o8 ]2 ~6 W    // 不允许该中断自身嵌套
: S8 B. g1 h/ X& G! U' f$ Y    hwiParams.maskSetting = Hwi_MaskingOption_SELF;
# N3 @9 v0 e2 F+ K% J    // 使能中断% S) N; w- H' w
    hwiParams.enableInt = true;
: X, x( Q! b2 c- e" k  i    // 可屏蔽中断 4
  Q1 D+ c! J1 s* t' y. Y- s    // 中断服务函数 hwiMain9 ^! H3 R/ o* O. I# P& X8 X' E
    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);; j# q2 q2 E- W! @9 n0 l. n' R
    if (hwi1 == NULL)8 D9 d8 t9 V) H% S0 [! ]
        System_abort("Hwi1 create failed");+ H4 ?: |# M! ?, I2 t- O
    BIOS_start();    /* does not return */
; }, A' U+ X6 n: q    return(0);
" q, O5 D9 x2 H$ |}. ?2 y) \1 f5 J5 A5 C/ x" o. m: {

4 b! Z+ W" M: x+ [( [) C
分享到:  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:490 I. Q' R; ], n
在中断服务函数里放置断点

* K2 o9 L9 `7 U9 G% ^参考 GPIO_KEY
4 ^7 @3 c  s3 d$ d$ S6 A- x
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点
+ U  X$ h1 |  u- H" o- s
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?
( e$ q; {  K4 }1 I
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-15 17:58 , Processed in 0.040930 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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