edma3中断只能进去一次 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:6 C& Z$ S) r6 ?) ^/ t
#define  PING_PONG_ACNT          1
; }2 G0 X7 p5 \9 t7 q5 j#define  PING_PONG_BCNT          8*32*40
& L1 K% _( z1 a//#define  PING_PONG_BCNT       1 5 A( E, f- _: P& T+ H& b9 b
#define  PING_PONG_CCNT          1
0 V# r$ n1 W' \* P# @5 e#define  MCASP_BASEADDR          0x01D00000
5 g' ?, h+ T9 b6 v$ r7 y# G#define  Mcasp_RXEVENTQUE        (0u)( r- A8 J" B% H8 q1 o7 J

3 _1 a# I9 d' u- w8 ]/* OPT Field specific defines */4 ]) x4 k, Z- O& n: p7 k9 J
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)+ [$ q7 _4 V5 i) H- \- ?
#define OPT_TCC_MASK                        (0x0003F000u)
$ z4 I) [- f( z2 v8 j4 V+ R6 A#define OPT_TCC_SHIFT                       (0x0000000Cu)
7 ~" ^# ?+ Z% ^- D9 p, w#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
0 I4 s0 u. X7 X; d; r#define OPT_TCINTEN_SHIFT                   (0x00000014u)3 |. R3 _( Y  F+ L5 r* C: J: q+ x
( N: [9 t# {# k, D
char ping_buffer[PING_PONG_BCNT];
7 r; p* W0 r/ {% w% j% qchar pong_buffer[PING_PONG_BCNT];9 a* Z1 s! W" ^0 x6 I7 a
" f1 S1 `' }8 R6 r

" T1 P9 G: `- S1 T  D/ r
7 b( C, [, f0 c2 a4 |& h
6 I7 S- w0 b" P+ i7 g% rstatic void ys_edma3_init()1 K* S- ~8 v) E  b2 ]% L5 p
{
! ], F* `# t8 }        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
0 x& l3 t( e, `0 q& j. }0 K& U$ V        EDMA3_DRV_Result result = EDMA3_DRV_SOK;- B% q8 v0 A* G; g/ V4 Q% T
        EDMA3_DRV_Handle hEdma;
; _6 W8 c2 r2 C) a0 p6 _    uint32_t chId   = 0;
% e- [: C$ `1 H* G/ g% t    uint32_t tcc    = 0;
  L- Y) m+ R' [; y
" i% l. Y9 k" J    print2arm("edma3 driver init...",0);- V* }* O7 C2 W! J

' b- ?4 d2 t9 X) E        hEdma = edma3init(0,&result);
9 @* }' c2 b  M        if(hEdma)
; }+ z4 N# Z9 D  C( O        {& j& C1 B3 I# |7 @& B7 A4 U  Z
                print2arm("edma3init() Passed.",0);. O5 u9 N9 G! Y8 ~( c7 r% |, u
        }
( E- l- g0 `+ n/ u+ d5 _2 m* f        else
! M' \; N5 e& U        {
$ |; d! }6 C7 }) t1 s0 R                print2arm("edma3init() Failed.",0);
# X7 A& b9 \9 Z( p) r0 M+ Q        }- t4 q+ N( y3 E! Y
       
' C: e, t  k1 L        if (result == EDMA3_DRV_SOK)& I' p7 @3 \+ m; x' X" h2 h
    {
3 \4 s' U1 K" r9 Y3 C( _                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,# B; d7 A$ h% d1 N
                                                       (EDMA3_RM_EventQueue)0,3 W1 L9 S. O. E& l' P6 ]. v2 R: t1 P
                                                            &edma3_isr, NULL);8 ]/ _( v/ f6 F* g5 |; h3 u+ r: j
    }
. h% v3 Y- A- h        $ G( y  L7 |/ n% i9 F9 x
        if(result == EDMA3_DRV_SOK)  k9 x2 U4 F9 v: A
        {
, f4 F0 a. J3 z/ L, h3 U                paramSet.srcBIdx    = 0;
3 y2 H+ X4 _1 L& T) C                paramSet.destBIdx   = 1;( S* S% Y& W( ^: Z' T
                paramSet.srcCIdx    = 0;$ z+ q( i9 N. K+ C- N
                paramSet.destCIdx   = 0;0 a+ S9 p: I% N
                paramSet.aCnt       = PING_PONG_ACNT;
! x9 L/ @& N2 F/ C                paramSet.bCnt       = PING_PONG_BCNT;
9 {: T  s$ X0 p8 u! m0 `                paramSet.cCnt       = PING_PONG_CCNT;( }5 b% k7 Z$ V6 h2 k8 Z$ K/ U/ X
               
, o1 x8 T6 I" O1 c) |                /* For AB-synchronized transfers, BCNTRLD is not used. */6 e% q( P# J0 |, C4 ]+ i$ S
                paramSet.bCntReload = PING_PONG_BCNT;
* ~2 E  P. z- a
& y7 c6 z$ P# q8 I6 q+ ?                /* Src in constant mode Dest in INCR modes */! u0 P7 @* o! Y6 o1 O
                paramSet.opt &= 0xFFFFFFFDu;
0 j+ A5 t# a/ U; M                //paramSet.opt &= 0xFFFFFFFCu;7 }1 L$ R$ [0 Z# |  V
                # A' c$ ?1 r7 F1 V/ n
                /* Program the TCC */
$ \% |5 U' ~% d1 C8 _                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);! `' q8 k0 m5 b: A( l5 M% T
1 B1 ^  v0 r1 O4 \0 U: ]
                /* Enable Intermediate & Final transfer completion interrupt */" n+ s4 n% I, C" z) V3 h
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
; j; [. H4 x! P) }" _4 ?; O4 y                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);4 O/ m% a; J/ |' r
3 D0 w% m; v" ]' D' l
                /* AB Sync Transfer Mode */
/ x3 a9 E6 R2 U                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);$ ]2 W! w3 E& y6 g5 K- M
                # [! w# n2 s2 i1 E& u
                /* Program the source and dest addresses for master DMA channel */: Z/ C: L/ h" P3 L' q
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);5 E* L4 m2 d) @4 q  y9 ?
                paramSet.destAddr   = (uint32_t)(ping_buffer);: ^; J- w& u, U/ h& |3 S% L0 r

& b0 I' z( L- n$ v7 S- g1 _- A" R                /* Write to the master DMA channel first. */
# l  o8 A8 z( v+ f9 Y% k: G: j! [                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);# G: B- S2 \2 X; s* p4 t% [
    }      
, u& W1 e6 |- x+ K7 v' z& \6 H) x7 F' m" e$ E- u4 h7 y" k
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);& l# b! ?) q3 v' X' a( b/ F# V
        , P' w; y& N3 r! U$ E' L' `
    if(result == EDMA3_DRV_SOK)
. R3 \+ R: V; J. E; w8 ]7 @% a+ _. v    {
, t( l  P! x6 S9 l            print2arm("edma3 driver init success.",0);5 P: T. g# e' k- {
    }
: v; U  O. w& @$ ^}& w) a6 n9 `; l. Z( y

$ u- o/ ]9 X, d8 b# h5 M* j# }( z, a8 p9 }' p  z4 A" z" N
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。$ k+ {+ k/ S. l

/ |( v# [  V. h1 a$ o
' M2 |6 Q% W1 s. u- A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

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

使用道具 举报

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
板凳
 楼主| 发表于 2015-4-29 23:25:56 | 只看该作者
Lewis 发表于 2015-4-24 10:475 M9 W/ e- m! `" c1 j$ Y
每次DMA传输完成后都要再次使能传输
4 R/ ?  b2 g  ~  ^8 l
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-22 17:25 , Processed in 0.042087 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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