edma3中断只能进去一次 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6585|回复: 2
打印 上一主题 下一主题

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:; H  g" b* {" Y9 n+ l
#define  PING_PONG_ACNT          18 N9 \/ u' f# J  B7 b
#define  PING_PONG_BCNT          8*32*40
3 k% Y; Z1 L' A4 z//#define  PING_PONG_BCNT       1
, V4 s6 p+ e# g  t- u#define  PING_PONG_CCNT          1' q3 X; }$ r# A
#define  MCASP_BASEADDR          0x01D00000
! y% p, C( c1 ~5 J# J2 t/ m#define  Mcasp_RXEVENTQUE        (0u)6 A8 \) k* o/ V+ Z

; v9 _: i% l8 I% `/* OPT Field specific defines */
% A0 d  f9 p5 h#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
9 h: w5 `" b; K$ F& h#define OPT_TCC_MASK                        (0x0003F000u)
8 D0 X6 @3 u+ Q4 p#define OPT_TCC_SHIFT                       (0x0000000Cu)7 z7 b( ]: J  n) l" W
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)+ R! s% \- s: ~' S' ]& ?" V
#define OPT_TCINTEN_SHIFT                   (0x00000014u)- j- H3 U* V6 u
! V% G+ h$ {6 X0 D  o0 z7 g9 m
char ping_buffer[PING_PONG_BCNT];7 z8 X; _" ~" w. _
char pong_buffer[PING_PONG_BCNT];$ \3 T8 b% M4 I+ L# I; I

5 |2 a. Y- h# k1 u$ ^8 B6 P7 l, u6 Y8 ]

. g* F$ _( `: |# i5 O
4 V' v  P* U0 p$ ]" g2 g7 X5 b( H3 qstatic void ys_edma3_init()
, N# S: L# k$ T' x{
4 N' v0 \5 C$ G) \$ |3 Y$ J* P        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
* {7 h* n1 _& s$ q; O- a. Y        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
  A# y  k3 k1 W: ~+ T3 H        EDMA3_DRV_Handle hEdma;7 @" G& P5 v6 L, y. X+ v
    uint32_t chId   = 0;
% d  T/ J) J9 s' R6 V( T    uint32_t tcc    = 0;
& {+ c5 B+ f# I( L; b# O+ e  |7 u2 C6 ?
    print2arm("edma3 driver init...",0);: ]2 J+ n5 Q$ O! z2 L0 Z- k+ H
: s" @/ Z: y( Q  g8 J9 r# ]0 M# N
        hEdma = edma3init(0,&result);; l5 V6 B0 l  o# e3 \8 F! H
        if(hEdma)
' U6 d# M2 M& O9 w' ?( r4 f        {) X' L" p! W! e# G1 q
                print2arm("edma3init() Passed.",0);$ V* X- D0 U3 |% K
        }
7 F% e6 s" o0 F$ J        else
! G) ~, |4 A. _& O) t( @( F7 W; \. W        {& a  J, c/ f8 p/ ]" x& _
                print2arm("edma3init() Failed.",0);
" {' r9 o* J0 w; }/ \* \        }
  t" [3 B6 a( y. e1 d: k) J1 i2 `       
* o0 s/ N5 b  d: h, Z$ x        if (result == EDMA3_DRV_SOK)
( ?2 y& {3 g0 y4 ]    {
/ k: R2 c- s) r/ g7 E                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
( u7 G6 }3 h" b6 M& g8 }                                                       (EDMA3_RM_EventQueue)0,
3 y# |  ~" I9 f6 o                                                            &edma3_isr, NULL);
; P, g, [. _, X; X) L5 H" g' V    }
$ s- `; J: d! B' T  L8 \       
6 s4 K1 |  C+ R  V        if(result == EDMA3_DRV_SOK)$ g" w4 b) S0 b- ^+ |# b
        {
2 W# \% Q) R( ~1 P7 j+ ]4 ~                paramSet.srcBIdx    = 0;
* v# s8 k* K! e: d2 K4 ]                paramSet.destBIdx   = 1;
0 a! c; P6 T3 v9 W: h1 f" m                paramSet.srcCIdx    = 0;
! J, y/ q% `& }% b$ L                paramSet.destCIdx   = 0;/ a. J( ?$ L  S+ W) o, I: n8 h
                paramSet.aCnt       = PING_PONG_ACNT;6 A  W2 `8 ?' p: H
                paramSet.bCnt       = PING_PONG_BCNT;/ F, y7 k; v( o$ u/ s1 C2 a
                paramSet.cCnt       = PING_PONG_CCNT;7 |( h' ^- p) U- g! \4 u) ]
                8 S. |, [: e/ ~$ r
                /* For AB-synchronized transfers, BCNTRLD is not used. */
5 V3 G0 w  D$ G0 J                paramSet.bCntReload = PING_PONG_BCNT;* q5 o9 R( U3 I
2 @5 s6 M# T$ l1 d% y8 b5 y
                /* Src in constant mode Dest in INCR modes */
" J! }7 V2 P0 z1 P% J6 s                paramSet.opt &= 0xFFFFFFFDu;( ]- @2 g' U$ B) M; V. {6 R$ h1 P
                //paramSet.opt &= 0xFFFFFFFCu;
  f5 X+ ]1 @7 ]* Y/ e  {, i3 h               
# {. f: ^1 e* P4 h6 y$ N                /* Program the TCC */4 M3 Z8 n9 \: X0 u( U( m
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
' W( ?; \6 W/ P- _# f6 c
. @! Y% O" t7 }* q5 \9 l/ p( ?; G                /* Enable Intermediate & Final transfer completion interrupt */% L. U5 {- z1 |' L8 S
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);- q* Y. {, N( M% x4 }  O
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
0 c# L3 o5 n( q& M% G+ o$ D9 I) |5 l% M/ k5 ~0 X* P; e4 V3 x8 a  P- [7 L
                /* AB Sync Transfer Mode */
' |5 e( ?" z% Q  X, j8 l                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
( L/ z! o4 d/ A9 E3 T8 q/ c               
/ E; E$ X! V) @) X                /* Program the source and dest addresses for master DMA channel */! s# S3 |% s6 K9 n% A
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);: [4 i8 w8 y: H) m: Y% @# s
                paramSet.destAddr   = (uint32_t)(ping_buffer);" Y6 e% G. N' e
& i5 c' p) r* ?( c# d
                /* Write to the master DMA channel first. */
) Z7 G4 Y( I+ Y2 Y2 h8 F- N                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
! O  q* Z  d& H+ q1 P9 |    }      
: f# W' S' }% x( l6 s5 P3 ]
' H7 J! [5 S. ~3 T        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
4 X% @9 }3 c( E) `: ^6 q       
. z6 j) I7 i5 a% o    if(result == EDMA3_DRV_SOK)
$ C5 t1 v) D. u& t: F3 P    {( S$ y- y* Z' L& p
            print2arm("edma3 driver init success.",0);
( j. S, H: D0 I% R    }
+ i5 I. T0 [- M! Z0 L% }}
5 i0 J0 L# {( E% b; U0 R/ [+ E$ u  l

, D/ J4 ?. a" L3 v! dEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
/ s% h( |# X3 x6 T. ]6 C! v! i- n% u
4 d5 A/ Q0 R$ }2 V
1 D) U/ {! `3 F; ?$ P
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
板凳
 楼主| 发表于 2015-4-29 23:25:56 | 只看该作者
Lewis 发表于 2015-4-24 10:471 Q% [7 B5 ]6 q! E& p8 s5 k
每次DMA传输完成后都要再次使能传输

8 N7 d& p7 i' Z" ^原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2015-4-24 10:47:00 | 只看该作者
每次DMA传输完成后都要再次使能传输
回复 支持 反对

使用道具 举报

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

本版积分规则


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

GMT+8, 2026-1-9 00:06 , Processed in 0.047054 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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