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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:  Z! A; u' |! @: M7 H/ a0 g$ N4 Z
#define  PING_PONG_ACNT          1( F' f; l8 f: L3 }+ |( V( v; O
#define  PING_PONG_BCNT          8*32*40 ' \. C2 v$ K2 S" \+ X
//#define  PING_PONG_BCNT       1 % x. |% l% i! Q+ a6 e
#define  PING_PONG_CCNT          1
8 |# k& P5 ]. Q) w#define  MCASP_BASEADDR          0x01D00000
8 c) j2 n8 q) a- J% H#define  Mcasp_RXEVENTQUE        (0u)& P/ y0 h" g) q4 Y

* |1 Z1 y, }, |/* OPT Field specific defines */. ~7 x6 u8 y5 |7 x! I& I' v
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
7 y; a: g1 w! F( Q* X7 a, H& b6 I#define OPT_TCC_MASK                        (0x0003F000u)
) `( B4 \) J- X" j) {#define OPT_TCC_SHIFT                       (0x0000000Cu)! B8 O; s  [- V) K% ^5 K8 r9 D
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)& s- m8 u1 {6 Z2 {
#define OPT_TCINTEN_SHIFT                   (0x00000014u)+ \" K8 `& I; F, V) z3 }8 Q* A+ r

! b) v- R% @. U2 o3 n4 i. y: }char ping_buffer[PING_PONG_BCNT];( |4 Z2 ?4 G0 [
char pong_buffer[PING_PONG_BCNT];: J6 n/ q, I  m+ ]
3 {* ~  V9 @& i" a8 i; k( `

! [  k# N8 C% k" m) h! q( h, _8 }2 L. y6 L3 d/ t

; o: U6 c" y3 [+ X  _8 X) Hstatic void ys_edma3_init()
$ B4 b- F+ S$ r6 e{
5 @6 l3 k: G) |6 @% y, b        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};) Z6 @) Y5 K* i# L: ^
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;- b; y: j5 J5 r
        EDMA3_DRV_Handle hEdma;
" v3 t6 \; N$ @# a7 ]    uint32_t chId   = 0;# Y! R. z4 }' r* q+ }( v
    uint32_t tcc    = 0;
8 l$ O# C# H* O& _% W
* H# j& D$ R/ s6 C    print2arm("edma3 driver init...",0);$ s! Z) D$ N  Q. F

- i. @: \* x9 }" b6 [! p        hEdma = edma3init(0,&result);: s) @8 c* t+ a
        if(hEdma)% V, M: z9 D5 {  D8 X+ X6 x2 C: n* c
        {" O2 V3 D8 m. j+ g" t$ M5 u  K
                print2arm("edma3init() Passed.",0);% `2 E, D+ F: S# L+ l
        }% }( I" _. J! N$ r
        else
$ k' h' T4 V5 t; l1 ?        {
8 Q- [0 ]" x7 t' V( N9 E                print2arm("edma3init() Failed.",0);
5 W: D* K2 s6 U$ a3 E" X        }
4 {0 x& x* \+ p2 m        % l: _3 Y& j' h. O: w. m9 Q6 Z! ?1 J% B
        if (result == EDMA3_DRV_SOK)5 O) h$ C! L9 r0 V) `
    {
8 A" P& K" Q' [5 j6 O* E                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
5 V$ R0 q2 T% d- w                                                       (EDMA3_RM_EventQueue)0,) o3 n3 o9 l: g4 s1 Z
                                                            &edma3_isr, NULL);  {3 E0 O6 L0 a1 m# q$ a
    }
) ?, W. z- H6 X5 Z& K9 l       
( b0 D0 P7 }# |1 T+ A& k        if(result == EDMA3_DRV_SOK)% V8 ^! L) E/ I  M
        {
% r; v$ {! q% t                paramSet.srcBIdx    = 0;/ G5 B& {/ m8 b5 i1 C" {" S1 N
                paramSet.destBIdx   = 1;
1 |8 k( K3 X" g- }                paramSet.srcCIdx    = 0;$ E2 W/ x! z) C# L
                paramSet.destCIdx   = 0;" I+ P: s% I  b+ U2 a7 r  Y1 U% q
                paramSet.aCnt       = PING_PONG_ACNT;* T" E2 {) Z2 i# I
                paramSet.bCnt       = PING_PONG_BCNT;6 Y$ D3 H. g0 m: M! j& s
                paramSet.cCnt       = PING_PONG_CCNT;; ?, o# i# G+ Z& {
                / j1 L7 `% g. A
                /* For AB-synchronized transfers, BCNTRLD is not used. */3 p. @$ c) @8 ?/ U& f8 a7 j* S
                paramSet.bCntReload = PING_PONG_BCNT;
' [  d& G/ ~$ \1 u7 t& {3 m2 w
* b4 N4 F* P- p$ n                /* Src in constant mode Dest in INCR modes */$ [, y/ p& |2 m7 ]5 k
                paramSet.opt &= 0xFFFFFFFDu;
8 j, P* c  D! y: p0 O4 U3 s                //paramSet.opt &= 0xFFFFFFFCu;1 i$ B0 {% K" H
               
& M! C8 ]+ R. X; N5 T% y                /* Program the TCC */9 J- [8 P/ s5 m: |7 i. F6 z; `
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
+ L  F* J/ r& d7 C# L9 G  a2 u2 u( j2 e' [$ g. {: g
                /* Enable Intermediate & Final transfer completion interrupt */6 ^) @7 e; h& {) }' \- L" G
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);4 ?6 K7 |5 h. n! B6 v$ X( }, M4 X, F
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);( P7 u  Y  B* w4 ?* I( c; h) Z
* n, u3 v( b! l8 Z3 h5 V/ d
                /* AB Sync Transfer Mode */
! e4 m! @, E6 ^) @. C( H                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);& J5 X0 r* \. n: F" |/ d3 _( {
               
  {! o8 R2 A9 `  `                /* Program the source and dest addresses for master DMA channel */
4 B* g0 U$ _; m' F( O0 i- b" o                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
+ J2 D9 Q* x, E. O8 ]                paramSet.destAddr   = (uint32_t)(ping_buffer);) C: H' C7 o  I6 E- m# [

9 r4 F' U7 O+ Y( q1 {  L                /* Write to the master DMA channel first. */3 O0 A+ b! `! M+ w2 ^
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
. r0 e! v2 P& G$ e! \  j6 g) o    }       : X- S8 a" _! W; ?
2 f' ?5 b9 F2 l- i8 M1 O+ k
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
" P5 m! S, M7 H1 e9 h       
, s/ t6 Y6 o& y    if(result == EDMA3_DRV_SOK) % a* s- k8 B* p# m0 n5 v! X
    {. j4 n) M3 U+ S: Z
            print2arm("edma3 driver init success.",0);
5 B4 f5 W) Y3 E5 @1 x    } 6 R3 B) I* D- `5 ^2 ~- L
}
( L; C3 U8 r0 s5 O$ {3 Y! a
% o, U& [* I# Z( t7 a  k- ?! V$ q% @: B4 ?
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
. Q( N2 H$ h2 q
6 j1 @1 I1 R: d( L% L2 c! e
# ~7 T+ t' R8 ~4 C. C
分享到:  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:47
, C8 |6 _6 _0 c2 `1 o* Q每次DMA传输完成后都要再次使能传输

2 A7 ]" m3 Z. Q/ ^6 n原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-16 05:30 , Processed in 0.037712 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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