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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:( N. K8 b3 |$ I3 `
#define  PING_PONG_ACNT          1; a5 U0 `6 U8 i, L+ z. c
#define  PING_PONG_BCNT          8*32*40 % z2 ], C$ @# w) B0 y7 D' I
//#define  PING_PONG_BCNT       1 & _. V3 V# b7 j5 @" S
#define  PING_PONG_CCNT          1
9 G* o7 g; q1 u1 d#define  MCASP_BASEADDR          0x01D00000& C! ?% W) l% _- i& ?& B( R' Y
#define  Mcasp_RXEVENTQUE        (0u)
$ _1 ?* o( p6 w1 p4 p; ]3 c8 O1 W2 o% ]' A$ n. {! j
/* OPT Field specific defines */; T- R& M  m' K
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
, k" r3 ~0 v" A7 j( r" i#define OPT_TCC_MASK                        (0x0003F000u)
2 ]& `3 Z, t) M$ S8 g7 n1 j4 ^#define OPT_TCC_SHIFT                       (0x0000000Cu)
  K. W" W4 [+ t( b#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
* `* \9 f) h" p2 ]#define OPT_TCINTEN_SHIFT                   (0x00000014u)- p  N) b$ F/ X, {% P6 u+ [

+ L0 @# P4 T2 N# Vchar ping_buffer[PING_PONG_BCNT];
* X# R" z  W6 P+ L- bchar pong_buffer[PING_PONG_BCNT];
" z2 K+ @' |' _( K
+ [, E/ H, X8 x9 Y5 b5 D, Z! y  A$ S9 E# s

! L) x# s' |5 n2 u* u' y; V: e* c$ Z1 y' e
static void ys_edma3_init()! ^/ _9 c, Y2 K# g
{
0 o1 T) w8 O: `3 P" ?& t% \        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};0 D4 J; O" Z. V
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;0 G, U) Q6 e% b6 u) x* o
        EDMA3_DRV_Handle hEdma;
- u# b. q6 }& D1 H, ]: p8 T* z: z6 R    uint32_t chId   = 0;/ \' ]+ G' o7 M6 ^/ k# Q& O" a
    uint32_t tcc    = 0;/ }; z- p+ u; ?

$ R% E; L; q$ ?, g- W( s    print2arm("edma3 driver init...",0);
0 O7 [* l6 X  N" z" _% v8 l! `0 n4 s, q+ y2 n! ~
        hEdma = edma3init(0,&result);
4 j. @) v. D) M' S$ n  U  m# p# g        if(hEdma)  J8 i6 q) r. Z  o: B7 P8 }
        {4 T7 \  K9 y- f
                print2arm("edma3init() Passed.",0);8 X2 l1 s9 k# m5 d/ c) V
        }
1 M. z* B: W8 k* h0 k. I9 ~1 P: e        else6 Y( X. g' Y3 X6 l: z
        {: {3 s1 q& X0 A' _; K4 {. N, `+ n
                print2arm("edma3init() Failed.",0);
9 G5 N6 l& ^$ q) R' |3 m        }
' h( K7 h  J  P) d, F       
4 d! }$ m8 R2 y* h" C6 r        if (result == EDMA3_DRV_SOK)
  L. Y0 L. h- O/ A    {
. I6 ^6 m* L) ]% U& b3 U6 \                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
$ E( g  z( i+ U* c9 b. c                                                       (EDMA3_RM_EventQueue)0,0 B6 [' ?! `" a1 Q
                                                            &edma3_isr, NULL);
1 d# T* p1 ]6 B6 N% v- i, T) T2 u    }
$ ^; k5 j) }! A        ' z% i' M/ |+ @& I" u4 c$ A
        if(result == EDMA3_DRV_SOK)
, w  X. F- y3 N& f        {) G/ r! a2 G) L
                paramSet.srcBIdx    = 0;" T5 A  h$ |6 {9 G3 z
                paramSet.destBIdx   = 1;
4 B1 d( ^7 O3 e2 m1 }  G2 R& J                paramSet.srcCIdx    = 0;4 c- X) R0 {$ G+ e4 s3 s
                paramSet.destCIdx   = 0;
) R* m- d' a& t3 t) S0 p5 F: }                paramSet.aCnt       = PING_PONG_ACNT;
0 q1 Q# `% `1 U                paramSet.bCnt       = PING_PONG_BCNT;
- ]- J& S6 Q, {3 g) c# C: r6 K                paramSet.cCnt       = PING_PONG_CCNT;
) x! z' ]) k$ @  U+ h' o               
$ O' r- K4 u5 A- I  X                /* For AB-synchronized transfers, BCNTRLD is not used. */1 A: T$ a1 j6 Z, K8 T
                paramSet.bCntReload = PING_PONG_BCNT;
  e+ f$ T8 {$ t9 m" S. Y- R3 c6 ?
                /* Src in constant mode Dest in INCR modes */9 |. U2 }+ R( Q1 e1 H7 T
                paramSet.opt &= 0xFFFFFFFDu;
: E) ]3 G9 h. B6 H$ W1 Y- Q                //paramSet.opt &= 0xFFFFFFFCu;
0 v9 b+ |; o$ c' \, o                ; q% |2 e) J- w  M, _
                /* Program the TCC */4 w# d9 F' m- g/ ]3 D4 D# X
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);$ P1 G' J2 V& W

+ k" _4 }( t3 p. g                /* Enable Intermediate & Final transfer completion interrupt */" w4 Q. `( f- c( v% C
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);$ \6 X) T% [' ^2 T6 O9 U
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
% a+ j  f0 n1 K+ c: o9 y0 v5 p2 e3 X6 Z+ E/ R. _) v# X
                /* AB Sync Transfer Mode */. W, s/ d; m, ]
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);9 p6 E) N( |' {1 Y" B8 o
                8 u- A5 g  ~; R" ~
                /* Program the source and dest addresses for master DMA channel */
4 |0 e. ?& D" B  a2 N                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);. X$ }2 Q9 S# _; s% ]5 j
                paramSet.destAddr   = (uint32_t)(ping_buffer);' }6 ]" ^8 b9 Q1 Z" ~8 D

* f) E  O5 w8 P0 L9 z+ U: c                /* Write to the master DMA channel first. */' w. r; e5 U' V5 r+ t* B* z' V! ]2 C
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
8 x3 D' s% m9 ?* i7 a/ [    }         G. E6 t0 S2 h2 R/ F; d$ A! A$ {7 V

" V' m. X3 _+ ~* l% u        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
9 P# s- V* t  O, Q) Z7 M       
5 B* \+ B# J. u9 ~( C' |6 i9 ^    if(result == EDMA3_DRV_SOK) & g; f1 y/ n5 B
    {5 N& J" h) [7 S1 P, R
            print2arm("edma3 driver init success.",0);' N' s1 \2 H9 |4 q; E
    } 6 G9 [2 z" U' v3 p  {. ^: H
}. P8 U/ _" H+ r1 e1 {8 Q: M
( t, E6 O; ]( H# Z0 L7 H

; _; `; I# a5 GEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
9 @0 D/ ^; z5 m9 A: p
3 m4 G6 ]( ~( u/ q# y8 `' s/ y7 w/ y
分享到:  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
8 U4 p1 y! h. P每次DMA传输完成后都要再次使能传输

! r' _  r# s; N# j* w9 g1 r原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-18 22:34 , Processed in 0.038237 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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