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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下: h7 E4 l5 ^9 m+ @+ o. E
// 发送缓存* E) I; V1 G. L
char Send[] = "UART1 test......\n\r";5 j* a5 a. [1 |
2 _6 ~; ^/ P  v0 d+ Q+ y
extern void UARTconfig()
' ^& z4 e# V  E  I$ X% ]  V{( N1 c8 v' E, {# ]
//使能Uart1
% _  q/ F3 C! J+ s7 Q PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);2 @& [/ v% Q: c5 N
4 G& Z8 V- W% i" H, A% J3 F$ g
// 使能 UART1禁用流控, O5 ]9 l; c# h4 Q5 s5 v
UARTPinMuxSetup(1, 0);
7 C( d5 M1 u& ]  j% t& l, _ 4 n+ _% ?& ]: ?7 `3 `
// 波特率 115200 数据位 8 停止位 1 无校验位; ?+ B* p; Z# T4 b+ ^" |. r6 f" b8 {
  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
- ?& Q& P1 N  k7 s4 J  i$ Q: U' q 5 {* k# Z( |8 o* N$ y. W8 t: M) F% Z
  // 使能 UART1  j7 [9 O# J# M0 l! V& {% y" u
UARTEnable(SOC_UART_1_REGS);
7 m" j5 h) Z0 f+ E4 c  // 使能接收 / 发送 FIFO
" D+ g* O  @3 F) Z. D& c4 h  v  UARTFIFOEnable(SOC_UART_1_REGS);
% k( S: @5 h- O* @  // 设置 FIFO 级别* f3 x$ ^9 E9 g- ]* n+ w
    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);, B3 d' \7 W! [, Q) a
  //Uart1中断使能
4 Q3 ]; e5 G, m# `( W3 v  unsigned int intFlags = 0;
6 G( F: c( e/ U" f  intFlags |= (UART_INT_LINE_STAT  |  \
4 x& ]  I9 \/ t/ i            UART_INT_TX_EMPTY |    \
% b# Q  Y; U8 K2 J6 P  e' d            UART_INT_RXDATA_CTI);
7 `3 p4 z6 @( s3 @% Z; ?            
# ?0 @: [# o0 P3 U) c& w3 t    UARTIntEnable(SOC_UART_1_REGS, intFlags);( \0 s8 k1 S1 C% U
}% |  Z* L, J. \
//UART 中断服务函数3 |' C5 r& ]! l' ]- o5 @
void UARTIsr(UArg arg)
$ A: ?1 y( {: g( T2 y- Y1 u0 O{
. ?) ~3 E+ F8 G6 [% \    static unsigned int length = sizeof(Send);
7 A$ w: x$ E# n! t/ l  h    static unsigned int count = 0;! c- [$ V: ?9 |2 q' X: n- x
    unsigned char rxData = 0;
1 a" s' O5 _) w0 Q1 R    unsigned int int_id = 0;
# ]) ~! U  Y& y/ T1 B: w5 t    // 确定中断源5 t/ x. Y1 b6 h; m1 n; ~& }
    int_id = UARTIntStatus(SOC_UART_1_REGS);, Z% k2 h3 O) X1 k! A* t) g
    // 清除 UART1 系统中断
' ?  M! c/ l: P: V/ z    IntEventClear(SYS_INT_UART1_INT);
  e" ?; d+ q! m/ V& E+ Y( R  {    // 发送中断
7 z# ^& f0 q( F4 T1 O: F. y- G    if(UART_INTID_TX_EMPTY == int_id). ?- O) n: b- I( ^  V
    {6 z2 D, G  w$ ~  A* |
        if(0 < length)- w* d8 a( g* \) m
        {
: F! h% u8 r# _6 |. s. t1 u1 o4 ?' S            // 写一个字节到 THR
( ~" c6 W! o9 N' _            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
! h% F( u% k- S+ }8 l            length--;
" L4 r% B$ `# j* I4 W            count++;
# s0 P2 Q4 D! q        }9 O) S( p6 x) n# ^1 U
        if(0 == length)
. b6 ~9 C  Q, E9 w* R        {
* c* u6 N4 i/ S, P            // 禁用发送中断0 u8 x7 [& T# e  G0 Z# K
            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);
$ r7 \8 Z. [$ k* N! M! a        }9 l4 C. B: C$ Z3 l
     }
3 K' Z$ g/ y2 y. Q    // 接收中断7 @( L7 e; b- `$ `
    if(UART_INTID_RX_DATA == int_id)6 @1 e- L/ ?4 @1 N4 I; c
    {
8 L) e9 i5 s$ k+ o  R+ _, c0 X        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
3 I( _) F' _5 z3 D$ L4 l3 D        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
* n1 t. h8 ]0 g    }3 p! n4 @; A4 q
    // 接收错误% ?0 N. O& H2 W9 R/ W
    if(UART_INTID_RX_LINE_STAT == int_id)) p( {: D* @" i/ n; ^. [" O# d
    {
1 B$ S5 G9 u! A5 f8 C        while(UARTRxErrorGet(SOC_UART_1_REGS))
6 V& U$ F8 F7 M3 Z2 [  C        {
0 a# F5 U3 L! M1 h9 o            // 从 RBR 读一个字节4 a) l" J# o8 w3 [$ F& W1 m
            UARTCharGetNonBlocking(SOC_UART_1_REGS);
/ K' D9 a" |, ?7 q        }3 `6 A- G& F8 t
    }& ^! {0 d) R( u7 u* ^
    return;, v0 M: f, n6 @  H5 ^! R. w
}
$ ]* ^3 S% }1 K4 j1 s2 NInt main()  Y0 B6 j6 P: @4 c! Q
{ ; j7 m8 g, z6 ]+ {
UARTconfig();//uart 配置9 S: j' h' H) p
    Error_Block eb;; ]( _# f: R1 j: w& }7 w0 Y
    System_printf("enter main()\n");
, ^- i* u( g: W+ ^7 R* j    Error_init(&eb);
# o$ d- }* I0 i2 A  f. b1 g    // 动态创建硬件中断2 Z  Z& v; Z" P7 n' G% V: x2 q
    Hwi_Handle hwi1;
) U# T8 @% v  E; r8 @4 \& \    Hwi_Params hwiParams;& L- M* d! `) J% S  E- O$ Q
    // 使用默认值初始化参数/ V- U5 E) f/ w5 G% S
    Hwi_Params_init(&hwiParams);! f5 R6 h6 x, s- \! u! S
    // 中断事件+ u4 L% r& Z. L6 R# z; O, _
    hwiParams.eventId = SYS_INT_UART1_INT;  _3 w/ [! @6 G# Z
    // 传递到中断服务函数的参数
( ]9 j+ R$ e- t    hwiParams.arg = 0;
4 S% C- B0 z( X3 E    // 不允许该中断自身嵌套
# p( A) a0 Q/ D8 T4 G1 j) R; `9 e+ R    hwiParams.maskSetting = Hwi_MaskingOption_SELF;/ g' |  s1 e8 J
    // 使能中断' T: M1 P* |1 S3 \8 m6 q
    hwiParams.enableInt = true;
; m5 D1 S8 k6 _  Y- x9 f    // 可屏蔽中断 46 H" X: D4 H# T, f5 u" f
    // 中断服务函数 hwiMain" a1 p( i! m, w4 k0 Y: ?
    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);
+ D. x/ k* \3 w9 r" t' K    if (hwi1 == NULL)  o( b6 ~3 C; {1 V7 r0 A/ s+ q
        System_abort("Hwi1 create failed");
0 j% T* A9 n' k& ?2 ]    BIOS_start();    /* does not return */
5 _/ v& r5 j+ f( q! g7 d" h    return(0);
! S+ s% O+ ~" n6 D}
5 M0 i2 f4 N2 p. H* G
. ~/ n3 \/ Y: Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?
) r6 G) D5 E+ Z5 t# c
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点8 W6 V1 s+ C% [5 f& G
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49+ ]$ t$ p2 c) L3 t2 I0 v4 N
在中断服务函数里放置断点
+ C3 z0 @7 E% Y: i" p! o
参考 GPIO_KEY
! Y. [4 v9 \/ B; u
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 16:53 , Processed in 0.040073 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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