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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下5 [  T2 h  G3 D9 A( I% T
// 发送缓存
" H. L9 w! _4 ^5 Jchar Send[] = "UART1 test......\n\r";
- l. ]. S. f) h+ I6 e) ^, `: d  D7 u: K8 ?& E2 I
extern void UARTconfig(). r! K" Z+ P, }5 L
{
& U1 H) F4 S1 b //使能Uart1
; p  x- `9 i7 n/ @. v# G) ]0 M PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
% A0 e2 i, q  `! D* g6 j
- ?/ G7 Q; N: [' S/ Y8 z // 使能 UART1禁用流控
$ K; r" @7 O9 n* o* c  n UARTPinMuxSetup(1, 0);
5 \3 `0 m3 N% m2 T$ g: a/ q6 l
& n2 T+ o3 P" }7 P3 ] // 波特率 115200 数据位 8 停止位 1 无校验位, j! Q1 b) v1 U% Z  ]1 y
  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
) Z: V6 B( x* _/ |- g 8 b& l( ?7 J2 Y3 u7 a
  // 使能 UART1) F0 q0 \! ]: L9 \: g1 G$ Y
UARTEnable(SOC_UART_1_REGS);0 ]7 U5 w) E' O% x8 ?6 E
  // 使能接收 / 发送 FIFO& ?' x, Q) H( r! I
  UARTFIFOEnable(SOC_UART_1_REGS);2 ^/ ?$ x$ f/ l) v+ @- w4 a7 p4 j5 q7 K
  // 设置 FIFO 级别
4 @4 s2 \' X( B0 R) v8 Y  G+ M6 a    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);6 A& y. h8 @# p7 F) q* K. u. X6 v
  //Uart1中断使能
; H8 V' Z6 B2 F3 H+ ^" l  unsigned int intFlags = 0;7 @; f& Z3 z$ M. p( ~3 ~% W. s# `6 G
  intFlags |= (UART_INT_LINE_STAT  |  \
* Q, V1 @( n) G! {; s            UART_INT_TX_EMPTY |    \
" w6 v- M9 \  Q# b# w* @            UART_INT_RXDATA_CTI);6 c, e8 g: w8 |3 b; {
            
% q) u$ }" ?: Q  n+ o0 O    UARTIntEnable(SOC_UART_1_REGS, intFlags);& t% i, u8 g' g5 i5 V: L, r
}
2 r: d) Y- P/ h; _  D7 `, ^' N1 [& o//UART 中断服务函数
& ]5 X/ P% h2 f/ Vvoid UARTIsr(UArg arg)
( _( A6 f) P7 D0 T0 ~' v{
9 J" p  j( L0 \; f# q1 e    static unsigned int length = sizeof(Send);8 O& B' F4 c; }9 S+ \7 h: w' a( J
    static unsigned int count = 0;
6 ?6 Z# N# c! B) w3 h4 J& h" W% y; _    unsigned char rxData = 0;
* o6 Q! y' n/ X  t    unsigned int int_id = 0;
9 c, A) J- j% l7 G) N$ [    // 确定中断源3 v, w# ^3 L4 m. J
    int_id = UARTIntStatus(SOC_UART_1_REGS);
5 ]8 a  L; F1 F& F! p    // 清除 UART1 系统中断
+ _& ?2 K" F- p0 X9 Q    IntEventClear(SYS_INT_UART1_INT);5 E( z4 d) G+ `: l
    // 发送中断
/ E8 y4 m* v9 N+ d# }  Y    if(UART_INTID_TX_EMPTY == int_id), q1 N* z. o, p$ s* r' C
    {
5 ?5 f* b3 Q  x: G        if(0 < length): Z. m1 p$ y$ \3 W8 P4 g& _
        {
1 H6 n" g5 |% R; v, X4 I7 s            // 写一个字节到 THR
6 l7 f7 }- I& }, q. H            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
# w) L5 D* S- @, f            length--;
, W+ Y& }5 Z* o            count++;
! q% ~" v: h* c+ L* ~; Y        }- M  C% h1 @" x3 S1 i; C
        if(0 == length)
$ b; f6 R. R/ _6 {        {
( F' l& _" n; W8 N2 N- j7 j' g            // 禁用发送中断5 h* H# A, D& H8 A2 ^
            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);9 ?: m8 _# a' B) b+ A* W
        }* y6 [+ y# j0 ^) `
     }3 l2 e* ~0 f' H1 x  Q
    // 接收中断  o! r$ v: a' V- l
    if(UART_INTID_RX_DATA == int_id)$ j# v1 y/ I5 ], j7 O  Q
    {
, V. W% H$ D( }+ `        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);9 e9 Y0 F" f' U/ W9 C
        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
* ?% {4 N# a# L5 h6 I0 W9 c: k    }
/ t, e6 b5 u) e; T: d    // 接收错误* \2 _$ B1 t  T* B' K4 o* x0 Z/ A
    if(UART_INTID_RX_LINE_STAT == int_id)' c/ \5 Y0 k, t
    {
# R2 M, ?) s) G2 @# _        while(UARTRxErrorGet(SOC_UART_1_REGS))
* U+ S+ Z! n" Y8 |! B8 E        {5 Y3 w2 N( M0 P5 v' y
            // 从 RBR 读一个字节  q4 k- p. M$ J0 ?/ G
            UARTCharGetNonBlocking(SOC_UART_1_REGS);
8 P- c% O' K9 k8 m- x9 {% y# u        }
4 a5 c3 S) J# [. e: {5 v    }
. Z, n7 C* M" ~9 E- U5 X    return;9 A3 O4 o" ?" x! o5 e. t
}4 O  n; r, p/ E4 c# W
Int main()
- `+ l( A& T! f' t8 d% y, d4 o{
% I/ x: I7 ?* G! {' |3 A UARTconfig();//uart 配置
8 T9 n, V4 m9 y1 f# _/ |! `# A! I    Error_Block eb;% V0 X7 i: F; j  A" w4 m" u
    System_printf("enter main()\n");" A6 \- h, X$ `. }
    Error_init(&eb);& l5 p0 V6 `  [- |7 h: p! V! M
    // 动态创建硬件中断6 U! R3 w5 U9 t* c7 n
    Hwi_Handle hwi1;# W, B2 z9 G: y7 \- q4 \9 E4 O
    Hwi_Params hwiParams;
6 X, x4 X/ T9 d2 B. c+ M    // 使用默认值初始化参数
0 p8 o! [  w/ n    Hwi_Params_init(&hwiParams);
* ?  {$ i( R* k6 G2 n    // 中断事件
8 Z+ n' [8 ~) i: @" }) O- L    hwiParams.eventId = SYS_INT_UART1_INT;: R8 I, N8 f( O* m5 [/ y0 h1 |* m
    // 传递到中断服务函数的参数1 Y8 _8 L- x- z8 l" [
    hwiParams.arg = 0;
( B( B3 o1 ~0 ]: j! @+ O% N1 S7 q# f7 o    // 不允许该中断自身嵌套9 s" V1 r* M, Q7 s) o8 F
    hwiParams.maskSetting = Hwi_MaskingOption_SELF;
7 M" \2 X3 B* T* g% q    // 使能中断
6 |( v: G% s, p1 c, S7 w; Z- N    hwiParams.enableInt = true;
2 U# L) @' b7 Z, z7 P    // 可屏蔽中断 4
  q; M. l$ R! i5 c: f    // 中断服务函数 hwiMain0 A. G: W4 N5 P5 d: z' P8 I
    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);
1 k9 S& ?* _. ~1 z# S, ~    if (hwi1 == NULL)& R; P; @; `' E9 V
        System_abort("Hwi1 create failed");4 {* ?( ^& h7 V* _" ^
    BIOS_start();    /* does not return */
/ H2 ]! v. Z% }4 m0 ~; h7 F    return(0);
, ]% U. r% I# i( x}
4 x1 w9 t5 S/ P3 J/ v$ S' S
6 u% ^& e% e0 V( g8 K% X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?
3 h- }4 A2 i2 b7 e: W" Q4 b( ]
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点0 c; _' E7 H# R% h/ X7 k: ?
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49
9 h) Y9 l! K4 t) H7 }  Z在中断服务函数里放置断点

6 k; ~; U& u0 I. j参考 GPIO_KEY; q# P5 N- ^- e
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-15 07:10 , Processed in 0.039954 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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