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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:0 D4 A6 q' q9 D/ n# z% f
#define  PING_PONG_ACNT          1
6 x' y3 G, `& L0 Z#define  PING_PONG_BCNT          8*32*40 $ n! t* K" {) H  F/ }( x/ E
//#define  PING_PONG_BCNT       1 8 P$ U' n* G( a. p% M& O! `/ S: H) q
#define  PING_PONG_CCNT          1% j* s0 ]) ?* t* H; l
#define  MCASP_BASEADDR          0x01D00000& i  `. p6 D( e- m0 `
#define  Mcasp_RXEVENTQUE        (0u)
& Q6 {8 {0 S( ~9 Y5 b( S
) c1 f3 c1 h1 K/* OPT Field specific defines */
. W) _" G: u" c/ J! \" K#define OPT_SYNCDIM_SHIFT                   (0x00000002u)9 D* i2 Z# G0 n: [) a" n+ ?+ M/ l
#define OPT_TCC_MASK                        (0x0003F000u)4 D( Q( f5 X, @( E
#define OPT_TCC_SHIFT                       (0x0000000Cu), d* x8 \# K. K: K3 T+ L
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
4 k- ?' N4 t9 Z1 {#define OPT_TCINTEN_SHIFT                   (0x00000014u)
; B! e' |9 ^7 \0 g; ~2 u- j8 Y" e) L/ @# E/ i7 l9 M: L* |
char ping_buffer[PING_PONG_BCNT];
1 j5 m6 J5 h, ]: S2 ]' wchar pong_buffer[PING_PONG_BCNT];
: R1 B. D( d% ^6 W1 K- o7 A9 \

+ q( M6 L' _8 f; a; U/ |7 d. G3 O' @/ {! W+ \

7 r5 A; u- d$ @- o8 zstatic void ys_edma3_init()
9 J, F+ G7 m: g0 ~  X1 W{9 T$ b, C, ~! M! o
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
1 m" p1 y  ?9 M. \        EDMA3_DRV_Result result = EDMA3_DRV_SOK;$ Z  g, C) J% ]6 D5 N
        EDMA3_DRV_Handle hEdma;
2 n7 X6 Z* K# e/ e6 q' r+ A  Z, L  i    uint32_t chId   = 0;
- l/ Z  J2 n, ^5 N- o0 ?    uint32_t tcc    = 0;
# Y4 p( R) u0 \6 H2 Q
2 ~2 A& M& U8 R4 A. v8 d    print2arm("edma3 driver init...",0);& M; q1 r; M3 P, s
% a8 g$ E/ Z7 b4 k  I3 O# l
        hEdma = edma3init(0,&result);4 T/ E" g3 N, B' a0 `5 I
        if(hEdma). Y, L( o8 Y/ `# a4 U7 Y% v
        {
8 a. L9 J% j" i' D2 _  d                print2arm("edma3init() Passed.",0);; `6 ]0 |  |! g3 d" j
        }3 Z* L2 V- a! i6 X+ V2 q
        else/ P5 g; |* R8 M& f) |
        {
  Q- }* M1 z+ m5 t: }                print2arm("edma3init() Failed.",0);
8 Y9 w- e  `* l4 T0 P8 g        }7 H4 f: h8 \+ d) h3 j: \
        ! _' E. B8 T% J* K$ j1 {( W
        if (result == EDMA3_DRV_SOK)
% B! T6 ?% W5 L    {
% n* {" A3 a& E8 U2 ?4 j5 @. ~                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
3 m5 J; V5 s  u% @0 o1 d- B                                                       (EDMA3_RM_EventQueue)0,( j9 [0 |1 Z' n9 D
                                                            &edma3_isr, NULL);
' Q1 ]( g. M0 n& j; K! L; `    }
( h4 Y( C5 N# \* W. N" c. K        $ `, F& Q/ ~3 \' g! i% {. _7 A' t
        if(result == EDMA3_DRV_SOK)7 A9 P0 R3 L+ k2 i1 x
        {5 Z7 s! h: ~2 P7 C+ s9 `$ i. |
                paramSet.srcBIdx    = 0;
. v3 z' Q* w3 R9 l) ^, d                paramSet.destBIdx   = 1;  n5 D3 X5 c0 Q0 I
                paramSet.srcCIdx    = 0;0 e& Y, s& k4 q* R' p
                paramSet.destCIdx   = 0;
2 _. C9 u3 y1 M9 K+ M. x% G' F  w                paramSet.aCnt       = PING_PONG_ACNT;
% s. F, p" E) E' g                paramSet.bCnt       = PING_PONG_BCNT;
5 e' @( V" X# ]5 N' Q                paramSet.cCnt       = PING_PONG_CCNT;7 u8 \/ K/ M" I. I$ U, [
                . S$ x8 j/ O  }2 E7 `0 M4 f' `, z
                /* For AB-synchronized transfers, BCNTRLD is not used. */
! \! E; ^1 F" b9 N: B/ f0 q( o                paramSet.bCntReload = PING_PONG_BCNT;. R( s4 ]$ X: |5 O) N4 K
0 g9 ^/ m- t6 }+ [# A$ K* a
                /* Src in constant mode Dest in INCR modes */; @* B) u# q; N' ^
                paramSet.opt &= 0xFFFFFFFDu;
1 g# x) ]4 A. p/ r, T                //paramSet.opt &= 0xFFFFFFFCu;
0 T9 S6 D8 M& x; c* Q1 b1 P: ?                  J# U; \" n( Y" z2 O( w
                /* Program the TCC */  l) q( P. @3 Z2 D# O
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);% x. w) h* t8 N& R- L

9 Q, o6 f/ \4 s  Y( I" S8 w' u                /* Enable Intermediate & Final transfer completion interrupt */
( ^' u( ~# h( `/ q3 D- i3 _8 B                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);4 ^( R' B0 ]) X1 M6 c* z' U
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);9 ~# m5 p5 u6 u/ V

; G- }) L$ P# D# E4 O; E                /* AB Sync Transfer Mode */7 D) U- J' ]7 a+ k( q1 k3 L
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);+ ^# x! u1 Y: T9 ~( D/ p
                / t' A8 X; |1 Q
                /* Program the source and dest addresses for master DMA channel */0 |! l3 H3 B6 E7 x+ x8 N
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);$ H1 [& |1 l( J$ f1 R  O
                paramSet.destAddr   = (uint32_t)(ping_buffer);
5 w3 S+ W9 R* _' {" [! v1 Z* [0 x/ W  x/ n7 \) D! [
                /* Write to the master DMA channel first. */( q/ R2 O& `' s  t( c1 h  q
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);- V  M$ r5 t; ]! ~" F
    }      
$ k5 r( a% e6 i) S) T! C0 ^* X5 d, h- q- m
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
/ j( ]) K! N9 L# d0 S9 m5 v; e/ Q; v       
) n( m- b# U( G) O9 X6 [+ P' Q2 J    if(result == EDMA3_DRV_SOK) ( F3 B8 a$ L; I( o% b
    {! q8 m# K$ V: R; E$ j3 @+ C5 L$ h; l
            print2arm("edma3 driver init success.",0);
2 f5 l3 z$ P% z4 z2 E( _6 i    } 5 _( W. ~1 J7 B7 b2 [5 G* L! |
}2 K$ h; V; p# u& w1 e& d/ _: t
+ T2 d1 n( p0 s9 Y! ]

- y' ]6 h% u2 G0 C% HEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。: F" G$ e. |0 A) m% Y2 o+ `

; f! r$ ^/ n0 y' x8 G  b) A
- {% E; U7 z1 e3 m9 h% ]' W& 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:47
# x4 {7 m/ u+ q+ U- |1 j9 p每次DMA传输完成后都要再次使能传输
' S& ~' D) Y- K# q
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 04:23 , Processed in 0.044520 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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