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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:0 j. E- ]- N. X; @& [
#define  PING_PONG_ACNT          1
& L# G% B/ n( F, ]- k1 E- y: d4 u+ c#define  PING_PONG_BCNT          8*32*40
* W* Z/ k) o+ O9 z9 b2 W7 m//#define  PING_PONG_BCNT       1 / j, p# b2 y5 D& m
#define  PING_PONG_CCNT          1
% G: v0 I% p  o/ \; v9 S( ~#define  MCASP_BASEADDR          0x01D00000: ~. p9 J" e4 _4 G. |
#define  Mcasp_RXEVENTQUE        (0u): S  f1 [; H! Z2 @- d( M
7 D+ m8 P; \" W1 o( I1 C; Q  b
/* OPT Field specific defines */
3 z( x- K, {# W0 b2 _#define OPT_SYNCDIM_SHIFT                   (0x00000002u): `! x0 U# k/ v
#define OPT_TCC_MASK                        (0x0003F000u)
* R; ?+ N6 P8 N0 y7 @' S# E3 s#define OPT_TCC_SHIFT                       (0x0000000Cu)% k, ]" _! p. D# M  @; I5 B6 W
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)' J" a  c% S5 w: L
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
; F4 I* [  s0 N% Y9 Z2 X) R1 f4 _$ k2 x7 h' _1 G; a& i
char ping_buffer[PING_PONG_BCNT];' c1 _7 X/ Z$ ~$ n
char pong_buffer[PING_PONG_BCNT];
( [* q- a5 U; ?; a6 \0 _4 r
) x% R8 a' g2 v- p/ I$ \% }/ N' E2 g. @
! E+ k. _: G* d6 [% U4 F7 C2 q
+ V: i0 U! }1 k. G/ ^
static void ys_edma3_init()# u1 r/ F4 p; }
{  f8 q4 p& R% C) m  q2 T2 M- I- J
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};  W2 t/ H9 o$ D
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
6 s9 p+ K1 V- H5 G        EDMA3_DRV_Handle hEdma;% f# e) ^4 d9 h6 \6 Y
    uint32_t chId   = 0;+ D/ v) q% u% T0 P& X/ e4 h; p
    uint32_t tcc    = 0;
( L0 z6 n1 P, T" q3 U7 i1 y3 g6 e! e' R9 D
    print2arm("edma3 driver init...",0);
# E: [' w8 o8 E4 i( L% E6 D2 s2 K0 T, F; B$ n" w9 C7 K
        hEdma = edma3init(0,&result);+ i% |- D8 n: w! R8 R& N
        if(hEdma)  h% [" Z0 f: o% w6 b
        {
+ O& m4 E3 y4 R                print2arm("edma3init() Passed.",0);
8 p/ U% s5 O3 R, H) U        }) F* p5 z' B- m* ^3 e1 L
        else
- F2 U) ^! u+ f3 k! v0 d        {" |4 l0 }  @) h. p* e
                print2arm("edma3init() Failed.",0);9 T7 k+ w# P% {& `0 d0 |
        }
6 |+ t# R9 ?9 m( R& Q( u4 j- v# v       
. M8 R, q5 b3 e8 S        if (result == EDMA3_DRV_SOK)6 S' G4 o" `9 Y0 b
    {
% B' P+ u& O3 s2 z3 W) f. B                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,! v: a% M/ {# k" M$ w* v: I
                                                       (EDMA3_RM_EventQueue)0,, D/ D8 \7 f' `. l+ @" v
                                                            &edma3_isr, NULL);
! M/ P* i# g1 B4 G    }
7 E/ f$ K# x, [3 v1 ~        0 o6 ?1 u' W8 f( L4 J' f" c: k
        if(result == EDMA3_DRV_SOK)" v* _. {% Q! V7 Q& X
        {
) T8 e6 O; z$ o) M" o                paramSet.srcBIdx    = 0;) i, c  y0 x( ?! u( D  w( l
                paramSet.destBIdx   = 1;/ K& v2 G0 \  B$ N
                paramSet.srcCIdx    = 0;
6 U+ B* w4 `  p" n8 r+ K                paramSet.destCIdx   = 0;
. ^0 x- W; j8 h; Y% H1 l1 z0 ]+ Y                paramSet.aCnt       = PING_PONG_ACNT;1 F' v, e0 c  e' p7 U. A+ |
                paramSet.bCnt       = PING_PONG_BCNT;
$ }2 u4 K% y6 q, @( h9 ]                paramSet.cCnt       = PING_PONG_CCNT;2 D4 I6 n" S7 O' W# Z* a7 X
                . y$ C# H3 Q& t
                /* For AB-synchronized transfers, BCNTRLD is not used. */! ?, H9 h& e! e0 }& W
                paramSet.bCntReload = PING_PONG_BCNT;: n7 e9 U' C$ N7 T# S4 U8 Z( t1 H! I

* @( ]( @( K) e# i                /* Src in constant mode Dest in INCR modes */
  W& |. `( l0 E                paramSet.opt &= 0xFFFFFFFDu;
* v" z) X1 w! T                //paramSet.opt &= 0xFFFFFFFCu;* X6 E' T7 M1 i9 P& I
               
, H0 ^6 @  g( q8 d/ ]                /* Program the TCC */
2 M3 l1 f! W8 a* ?, A                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);/ f: U6 D) ^4 T
0 R4 U/ J3 _  e1 m
                /* Enable Intermediate & Final transfer completion interrupt */) V" b) E1 x, U, c( ^$ y1 e( B
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
# g4 N1 Z3 }- s' ^& t- O1 i; {                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);2 l* h. p# {5 T

( W2 e4 b! t: o3 m6 z# ]6 J                /* AB Sync Transfer Mode */
8 }3 c2 x: U9 E/ t7 v; m6 {                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);% G! K) H' U& P3 z% i! |9 W5 z
                ' z) x$ x1 W' W
                /* Program the source and dest addresses for master DMA channel */
7 C. L; I  g# T" k) m, r( _                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);2 `8 E7 e" ~0 h6 h; d
                paramSet.destAddr   = (uint32_t)(ping_buffer);' l! K+ {  B7 E' j8 G  M6 }

1 t+ x- Y  c% s$ r/ ~                /* Write to the master DMA channel first. */
. o7 U& \! P3 o' R$ \7 I, \* a                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
% Z" o0 K& ]' z0 _; Y    }       ' y  v' u0 y7 j1 }: H7 F: v
- _2 _9 M) o6 @0 L9 R
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);2 X/ U, z! K! F# P
       
9 N. z9 [  g3 S- Q9 R9 v$ i( A    if(result == EDMA3_DRV_SOK) % T! K9 B" D' `& }: z0 |
    {
# `8 {# e6 b" j5 \  \2 L            print2arm("edma3 driver init success.",0);/ S. \9 b- [  T' [5 a& W1 q
    }
6 Z4 i& |6 ^. w, w6 ], |}
( N. ?5 m% d' K- B6 c0 ~  M/ x1 K3 @% W3 X! V$ I% j. [
( L5 {3 [2 L$ m8 ?$ Z8 I
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。4 Y; p/ d: g" H. k7 Y# x" s

  u4 E, K( B3 s  Q& g
! ~/ D( i2 j, K0 o4 Q* M
分享到:  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: b) w& b4 @! Z; R
每次DMA传输完成后都要再次使能传输
$ \  n3 a3 J* h5 A7 l
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-18 10:54 , Processed in 0.038862 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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