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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下) t+ D- u2 {1 A$ ~) b/ r( `0 A  r/ D
// 发送缓存
' P- K$ T, y. G% m  C7 Ochar Send[] = "UART1 test......\n\r";
/ L& |2 o- g/ G  L
, @( {; _, e0 t$ Y5 jextern void UARTconfig()
$ y3 j4 m2 B. E/ l' X{
0 `) Z3 S* ?9 I, P( J  P //使能Uart1( ~2 N/ y) p1 u  a
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);+ Z( C6 a- _+ G- y" k
5 O$ z0 s, u- D) H# V/ A
// 使能 UART1禁用流控
3 y+ u; ]1 V+ r2 [8 u UARTPinMuxSetup(1, 0);
' X, B# F) Q* x1 N/ |$ c
0 A3 X4 h- w: V0 \: \9 ?4 Z // 波特率 115200 数据位 8 停止位 1 无校验位
$ @6 g& r  y$ C4 u! J" u1 n  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
' y4 ]7 N; R6 Q' l4 y
2 T2 q" I; O8 l7 m  // 使能 UART17 [7 D* T1 R( I% u* T9 S( C5 J6 C
UARTEnable(SOC_UART_1_REGS);( @) |# f3 `% W$ t
  // 使能接收 / 发送 FIFO
& J% E0 U, x& a( _$ T2 B7 k- w. M  UARTFIFOEnable(SOC_UART_1_REGS);0 k0 N# d2 h& b7 e" L- m5 J
  // 设置 FIFO 级别
( f- \0 c9 ~- _, e% q3 M' {! ?    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);
$ r& x  Z3 r) e# C% w  //Uart1中断使能( b4 D5 E% y3 u& n3 s. ]4 y, q
  unsigned int intFlags = 0;$ t8 J- X' ~/ y, }
  intFlags |= (UART_INT_LINE_STAT  |  \6 v  c) e3 R' D* e+ |) I
            UART_INT_TX_EMPTY |    \
$ G& n. j7 [/ }" S3 p+ |+ F9 G            UART_INT_RXDATA_CTI);: I* c! S; t' D' n4 J( t
            . S% s( R: e$ r" t2 }
    UARTIntEnable(SOC_UART_1_REGS, intFlags);) Q  ~$ ~, `$ ^+ y
}4 u. M! M# l' ~7 i' b7 v0 M
//UART 中断服务函数1 J- b2 Y3 s( q" Y- ?- B" f
void UARTIsr(UArg arg)" T0 S$ i! O# s0 _3 g
{- J2 E: s2 T% p
    static unsigned int length = sizeof(Send);
2 K- l; l# c) }4 V    static unsigned int count = 0;. c1 r& M1 s. @9 t( Q6 G3 y' ]
    unsigned char rxData = 0;
" X. X# |( I5 {' \) ~    unsigned int int_id = 0;
. A' E. ^0 J: J+ j, f    // 确定中断源
7 r: K3 t* H5 `" T    int_id = UARTIntStatus(SOC_UART_1_REGS);
3 S& Y+ J# Q! J, s, b3 k    // 清除 UART1 系统中断
0 _1 e/ _# {  [; \( w1 ]7 I2 f    IntEventClear(SYS_INT_UART1_INT);7 X; E" P; u$ t) K1 j9 Y( [# j
    // 发送中断
- t$ o, G2 _: Z/ u! Z) m, i    if(UART_INTID_TX_EMPTY == int_id)
" N2 W( f7 S1 C  q2 _& b    {
, w0 ^, `  T" I! W% F        if(0 < length)6 p) m4 p$ v8 y" j7 ?
        {
6 R* ~, a6 T: z; d  ]& b            // 写一个字节到 THR
- Z& R( @. U* B4 F            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);4 i' ]) T5 P  M; B5 x1 h* A; m0 g# n
            length--;) h, g8 _1 A  U$ X4 \- p
            count++;
" e1 W- q$ [1 g        }( N8 n  ?1 P4 v8 |* \" ]
        if(0 == length)  Y3 a1 B4 [2 n1 I
        {
! I# A  |7 T8 d0 ?4 v; p+ x5 l            // 禁用发送中断! k& ?% X1 U) X8 w  n8 m
            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);# K; r/ z! j% z  t7 m5 t- o1 T$ l
        }
& [0 E  `& P: ^( f) S' _/ I     }
; D; _. {: D% \* k7 P% ~. D; {    // 接收中断) \  h% c( ]; Q. _
    if(UART_INTID_RX_DATA == int_id)
3 h( k  B7 I( e% o+ s    {/ h2 r8 X, F* E8 ^9 r! O
        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);5 s7 C/ s# H& ]+ L2 m* z" S
        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);5 y% G6 k2 y5 S* R
    }' \% `( @( t, o
    // 接收错误6 S* [4 ]3 W$ \, {1 h) f
    if(UART_INTID_RX_LINE_STAT == int_id)+ G1 C7 j$ s0 |! j
    {% V( G1 t; n7 k( ]) |" ~6 V
        while(UARTRxErrorGet(SOC_UART_1_REGS))
* ]& b, D, V/ j6 X2 W' g7 G; ^        {% y# t5 U2 ?: P9 ]* X
            // 从 RBR 读一个字节
8 o  r" t! K: j$ V            UARTCharGetNonBlocking(SOC_UART_1_REGS);
, ^6 g# Y' [( s9 Y/ Z; E3 ^3 ~        }' n, l; H) H/ {4 o7 `. v
    }! I! O! \7 U8 t! `. @' W5 n
    return;0 K& R! o3 w4 x- q, y: e# h
}0 o7 F) q) A" m: Z
Int main()
# Q' T4 j4 B+ y7 g8 {/ D- H7 o- c{ $ U6 A% N% \1 n& b8 x
UARTconfig();//uart 配置9 ?; v7 @- W$ I$ C  ^1 j; \* X
    Error_Block eb;5 S& [5 \, S+ l# h
    System_printf("enter main()\n");
  Q  y5 ~4 }& F( A2 H    Error_init(&eb);
+ |5 B) B6 H: _. l8 ^1 R4 I6 T    // 动态创建硬件中断. y, l" e2 K& [. d& \# F3 x6 A
    Hwi_Handle hwi1;3 h" |7 o  w1 @  I4 d
    Hwi_Params hwiParams;
+ Q& R& u) v9 Y% |    // 使用默认值初始化参数
8 f9 U& ~# C1 }- V    Hwi_Params_init(&hwiParams);" Z4 o2 \1 F4 h3 ?! P/ f
    // 中断事件$ a& A: b9 a  b8 `5 A  o: T
    hwiParams.eventId = SYS_INT_UART1_INT;) x- P% m& o: l- b( _
    // 传递到中断服务函数的参数
& B" `3 P2 W  Z- O+ q+ m    hwiParams.arg = 0;. V" W: n: s! L$ k
    // 不允许该中断自身嵌套
1 e& Z- J1 K& f    hwiParams.maskSetting = Hwi_MaskingOption_SELF;
/ F: g) s5 X$ R. y7 ?% P    // 使能中断
$ l6 E( c: ~+ g6 S- a3 h    hwiParams.enableInt = true;, w; ?; M% Y6 f2 N/ U8 p3 g
    // 可屏蔽中断 4
6 c1 j" {' ^- ]& C4 [    // 中断服务函数 hwiMain$ D) n, C6 f' i$ P' G1 m
    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);1 R* q7 t& K$ l  l8 c# b, `
    if (hwi1 == NULL)
" q5 n- R& K" U        System_abort("Hwi1 create failed");/ h# _# u4 Z/ C7 k% q
    BIOS_start();    /* does not return */
6 r( o% N, s1 r8 {. Z    return(0);& D9 Z  Z! g' E7 T
}
, Z% i$ n' c2 T  a2 Z& p
# _  q  ]1 \0 f* y) s# x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?5 j  d, N: X& y0 `3 ^, N8 F* [
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点$ Z8 e. _8 i: y2 p
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:497 s( V. Q0 b* y, p: s
在中断服务函数里放置断点
6 G7 g0 Q1 F( S. {" g9 j* Y' ?
参考 GPIO_KEY
0 V2 B* B/ Z% O' q, p) `
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-17 04:08 , Processed in 0.044659 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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