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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下' D  s! B$ a" R9 p0 V/ x
// 发送缓存
' E: p' Y' p0 y6 j$ h" c5 L  o' M5 cchar Send[] = "UART1 test......\n\r";
1 \& N, T( Y" j( k! B5 g9 Q4 E: O1 Q3 C6 W6 w, Y2 A9 v
extern void UARTconfig()1 V3 d& o0 C4 K) ]! }9 L& B
{2 y: D9 {1 z& Q: w9 A2 a* l! M- m
//使能Uart1, F% u; c5 N  Y, c8 X4 F) L- f9 v
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
" C5 r1 ~, [* @' A, V* B( j ( N" e% V; i+ w7 G. _
// 使能 UART1禁用流控
# {! Z- e; X9 P& u6 z3 [ UARTPinMuxSetup(1, 0);( M6 o; A. @* h& L1 ?/ i
  i' ?* H) A! o3 Y* k* I( B
// 波特率 115200 数据位 8 停止位 1 无校验位
" e6 G: {/ I, Z6 p. I  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
4 B: n4 U% {' I/ y
5 @' G, h" b- q% q6 y  // 使能 UART1
# J# E5 r% n) ^/ S UARTEnable(SOC_UART_1_REGS);6 l, i1 v/ ^  I. T
  // 使能接收 / 发送 FIFO
9 M3 v5 d. G7 g# Y  UARTFIFOEnable(SOC_UART_1_REGS);* o2 c2 q$ w' u' W" Z' {' x
  // 设置 FIFO 级别
& j5 \; v. P8 F% i    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);
, G! `& p$ A, G  //Uart1中断使能/ Z) q1 f! ?  b1 ]; U4 A
  unsigned int intFlags = 0;; U6 I+ Y  E# r! h0 I8 {
  intFlags |= (UART_INT_LINE_STAT  |  \( [( k5 |$ ]1 M( U8 [( a$ S
            UART_INT_TX_EMPTY |    \: |. E' {7 f' |9 Y
            UART_INT_RXDATA_CTI);% L% l( m4 o" n$ B5 y' T" S
            
1 y5 n6 Y8 C* S0 o+ G' m. r    UARTIntEnable(SOC_UART_1_REGS, intFlags);
6 m4 G3 c8 x% f0 O1 t% u$ r}
; U' E6 B$ B1 w" T' [//UART 中断服务函数; _5 j8 }9 J" C( L, g
void UARTIsr(UArg arg)6 N: h+ R4 i: \  t2 y/ H& Z
{
1 Z* m, T) O. s    static unsigned int length = sizeof(Send);
2 N7 q3 p4 _: m, ~8 Q% d9 m8 E    static unsigned int count = 0;
+ H" i$ D, m) D4 i4 @/ K8 u( I% N3 B$ h    unsigned char rxData = 0;4 }; N/ T: B' s+ n( l/ ]
    unsigned int int_id = 0;
5 ]6 ?5 W  x  `5 S- u    // 确定中断源& ^# i0 p. S& \6 a
    int_id = UARTIntStatus(SOC_UART_1_REGS);9 q- f2 I8 f9 I3 \; d
    // 清除 UART1 系统中断9 r6 M  q% H7 g# G2 |
    IntEventClear(SYS_INT_UART1_INT);
0 H0 |8 P: g7 H; ~) M" Z+ ]* `) c    // 发送中断/ @; x* J0 V* v- i
    if(UART_INTID_TX_EMPTY == int_id)
! L6 \7 K. j" ^: Q" R9 _6 }/ n    {
) ~' D9 b/ f4 H        if(0 < length)
: L5 w# P2 F1 c5 j5 \- Y& G. m/ Q        {3 T# v$ E: \; g3 ?
            // 写一个字节到 THR/ y9 g' o% z/ i! r5 n  K
            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
( s$ p  P0 Q) w  ~$ k; G% j            length--;
! ?* f/ h9 Q* b) O8 i( d" f            count++;
* ~, u' q) c9 y& k0 u6 T/ P        }1 t( ?7 e5 o: \
        if(0 == length)& f- e) Z# k# O4 f. m2 L
        {
; h' R+ K4 {7 s# E# |" Y            // 禁用发送中断8 e# R6 K1 n* V. \
            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);$ X  o% i% b! M) N. _. p
        }7 n3 |- l# t) L+ X
     }
9 R+ p$ o6 n1 _    // 接收中断
# f  l. Y) r8 A$ V. H' `    if(UART_INTID_RX_DATA == int_id)1 E3 D4 X1 t% Z! @+ {) p
    {3 s4 E8 X2 \( [& c' j6 X( h
        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);; j" e' @; o$ T& a3 I; @
        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);/ F2 f/ i9 E) _1 C- F1 c( _( ~
    }' e1 X. G4 K1 P
    // 接收错误( V. d) h* `5 c8 H6 \" j
    if(UART_INTID_RX_LINE_STAT == int_id)' @) b1 S+ L: \, W
    {2 `# P* ~4 r% k  ?% Z
        while(UARTRxErrorGet(SOC_UART_1_REGS))$ a# i) J" I: Z
        {* w6 Z# g2 P+ ^& z0 f5 {
            // 从 RBR 读一个字节
, X* ]( _" \: ^- p! q0 [: _; d, r( g! J            UARTCharGetNonBlocking(SOC_UART_1_REGS);. H0 d1 ^5 D6 A* i9 B+ I
        }$ y4 l1 H8 @% Y7 k
    }
" c/ z+ H1 F( s# Q' @    return;1 q/ Q% `6 s5 q8 F2 `' N6 e. u  s
}& v) K# S) R9 W2 p' X
Int main()
5 ]' H$ O0 v# m9 _+ T: e{ 2 s- S' F/ T! {$ K& O1 E6 l
UARTconfig();//uart 配置) K0 h$ z' I, p) G
    Error_Block eb;
' l6 d% O" |$ T/ r( t4 l# j    System_printf("enter main()\n");0 }: Y2 j. ^4 ^  v) |
    Error_init(&eb);
5 m2 k3 d( ~9 n: `$ A    // 动态创建硬件中断
% G- J- K) B4 L  e    Hwi_Handle hwi1;
9 i1 a1 R# l' E& h3 H    Hwi_Params hwiParams;* T, p  s1 h& ?+ T6 _' \* D
    // 使用默认值初始化参数
5 B' q2 B* X0 F+ L  i6 Z2 C2 r/ n    Hwi_Params_init(&hwiParams);
8 C7 r' K: }7 V, M# {1 Q& }    // 中断事件
9 p) ~+ t9 G5 E# g4 u    hwiParams.eventId = SYS_INT_UART1_INT;& _/ |) K7 o) t. Z  _: j% b
    // 传递到中断服务函数的参数2 G  O# v* M4 t% m6 f2 u# N0 T
    hwiParams.arg = 0;
2 J- `3 g; n9 r/ @2 o    // 不允许该中断自身嵌套
+ M$ W1 ^, Y# E' z: N2 }7 @( H' z    hwiParams.maskSetting = Hwi_MaskingOption_SELF;  Y5 v; p* G* B$ a' l7 Z, l" e
    // 使能中断" A$ S  s$ L5 K8 l
    hwiParams.enableInt = true;
' m1 C6 [* D- E  p& M$ @* M    // 可屏蔽中断 4
! ~4 h  d# o8 g9 {$ E    // 中断服务函数 hwiMain
3 o! {: ^$ x* j: j  Z3 z4 z4 h- n3 p    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);) O( p6 V1 s- ]" ]) R
    if (hwi1 == NULL)
$ H$ f3 a' j) V! l        System_abort("Hwi1 create failed");+ Q4 l& X" g/ J. d
    BIOS_start();    /* does not return */, s! S% L6 X( j! ^. N, E
    return(0);2 A/ ^$ A. k9 w8 }( A
}, E5 _* y& ]  U0 Z8 x$ K& P
: h& o8 `4 @+ p3 Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?" C/ h6 U! l" e0 s9 ~9 {0 V# y
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点
% G* ~8 `4 O0 j" [. i
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49
& q- w/ F3 Q0 Z# j! B# z0 _4 U在中断服务函数里放置断点
8 a" B: Y3 L/ _- p& m' h2 O
参考 GPIO_KEY
9 {7 w4 ?# g; _7 L  V5 A. @+ l
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-25 01:20 , Processed in 0.040456 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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