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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:( I" [  ~; l1 s4 I! {
#define  PING_PONG_ACNT          1
6 c4 Z) e* @% n& D: L$ P2 m#define  PING_PONG_BCNT          8*32*40
) s" q; O  m9 x; b: x4 k' P+ d  X2 ~//#define  PING_PONG_BCNT       1 4 a' C$ t- E" t% W: s
#define  PING_PONG_CCNT          1* B& ]& s7 g6 W; P9 y3 t
#define  MCASP_BASEADDR          0x01D00000- O, e4 p# r. O6 P1 r
#define  Mcasp_RXEVENTQUE        (0u)8 p2 T  ~  R  N5 b! [

: b2 ^* l1 T9 n3 O7 i/* OPT Field specific defines */' x0 b/ z" R' f4 X8 I( Q# Q' r
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
1 _* c4 g- d) N+ ?" ]#define OPT_TCC_MASK                        (0x0003F000u)3 ^7 {$ I. s7 N- w3 I, F1 e
#define OPT_TCC_SHIFT                       (0x0000000Cu)
# u9 h0 u- t2 g4 i- `! X7 I: E. [- g3 ]#define OPT_ITCINTEN_SHIFT                  (0x00000015u)1 [4 E- l% b/ T. i/ L
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
( M  b" v- f  A# ?& x0 X+ y6 o: T& N2 j8 D
char ping_buffer[PING_PONG_BCNT];' [& W  a, w4 p% {. ?! W4 S1 i  |
char pong_buffer[PING_PONG_BCNT];
( a: X4 `1 a  L4 f! ^% d; P0 r. G+ J( j; s* L6 p! ~

( O4 U( T( l% ^  B9 s# b( r# f& V5 U/ B6 J% _2 g

  @2 q+ M; V$ I( O, Istatic void ys_edma3_init()
' ]( g' H6 ]* w9 V& E1 q. N- y{: H! {9 x8 i$ U/ M4 a2 P3 T$ n
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};( t2 J* I9 g3 b# m7 B+ A+ H
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;( F0 @$ T4 e$ Y
        EDMA3_DRV_Handle hEdma;" ~- |& j/ K& f, X( m: `1 h" t
    uint32_t chId   = 0;
' W) r% z# f4 ~* B0 @    uint32_t tcc    = 0;- q) P4 W6 c; @

) l# k  q! S; g    print2arm("edma3 driver init...",0);
& ~1 }  P# `' F1 n. P- `: Y% g( C; X  L' L% H7 C  V3 y' }
        hEdma = edma3init(0,&result);
% G) T5 J8 b, g$ ]% A1 O        if(hEdma)0 E' e9 t: q, \9 Z! M. y
        {
( M7 b/ ]7 a. d* t+ c6 b                print2arm("edma3init() Passed.",0);0 a( X/ d4 M4 |0 o0 Y8 s1 r
        }
  R4 w3 O# c+ S' ~* S7 e9 V        else. M. h% P& H+ J. h+ O
        {
; h+ B7 C' t; G! S                print2arm("edma3init() Failed.",0);
5 c6 t6 G8 _, U2 P        }
+ o  \( o) `9 q! T9 d3 s; B        $ u5 ^4 d# |2 t" {( N( K
        if (result == EDMA3_DRV_SOK)/ f4 c2 H7 R: p. {! H
    {& t6 t5 h, [& p6 Z3 h
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,/ [( g4 P! K0 L& g' N1 A+ J' j
                                                       (EDMA3_RM_EventQueue)0,. Z3 A( j* R+ O( Z) A6 _
                                                            &edma3_isr, NULL);
  v! _- p1 k. b    }$ r9 ~0 q; g" s0 ?5 W
        * v1 V0 u1 c& C" u5 c' C
        if(result == EDMA3_DRV_SOK)& g4 A1 ^/ N: d( L
        {5 j) o: C' m) Q. C
                paramSet.srcBIdx    = 0;
) P! d# J% D7 {6 @  s: i' a" H+ M; l                paramSet.destBIdx   = 1;. O4 Q' t2 `8 t/ Z9 C- |5 P" U
                paramSet.srcCIdx    = 0;
/ H9 S/ w3 |' T8 u( K                paramSet.destCIdx   = 0;
8 @! }7 t' ]+ C0 W. c4 u' \                paramSet.aCnt       = PING_PONG_ACNT;) b! \$ ]6 d: e# v7 O9 `4 A
                paramSet.bCnt       = PING_PONG_BCNT;6 c7 o/ X% X4 g# N" W
                paramSet.cCnt       = PING_PONG_CCNT;5 E4 j  D9 \: p2 a& L
               
" h7 Z( H  v& n0 K* y                /* For AB-synchronized transfers, BCNTRLD is not used. */
' p& ^9 b8 n. z1 z: ?0 H                paramSet.bCntReload = PING_PONG_BCNT;  i- I$ h" o1 X7 L
3 A6 K. z/ \: `, T' q7 r
                /* Src in constant mode Dest in INCR modes */5 K- d& Z/ C. d8 F
                paramSet.opt &= 0xFFFFFFFDu;! V) x5 y9 |5 y3 U; D
                //paramSet.opt &= 0xFFFFFFFCu;
, f6 I5 `4 G! L                6 _1 C5 e) g. d: x
                /* Program the TCC */$ d; `  m8 s- k! W; W; A
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
8 L8 A' u* z) s. s
; F/ I$ \  [6 b, R6 v9 ?                /* Enable Intermediate & Final transfer completion interrupt */
1 H1 S; u( q" V& D  \                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);& ~% \& }0 p0 g/ h' Z* E
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);% q" ~& z( ]6 j/ K$ [! j

& ^& e, j- m8 D0 d5 S+ O1 r0 r                /* AB Sync Transfer Mode */! C  S: K  o4 A. L9 K& l3 j/ ]
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);* Y: a1 W  A6 N$ L0 b: Y9 _3 }8 G
               
) ]" n2 f- G7 h; c9 s3 l8 U2 p                /* Program the source and dest addresses for master DMA channel */
4 Y. B5 I4 ~" @' U+ y                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
1 z. D) o$ S; n3 N9 Y! p( W) F                paramSet.destAddr   = (uint32_t)(ping_buffer);; e3 x, |( B+ ^7 t

3 j) u9 K  D# u                /* Write to the master DMA channel first. */4 r' m. [" K) }! p2 |6 f0 v
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
% O% r. d% w  w/ G6 M    }      
; _7 n, ?7 `- J: Y! U- V8 J0 ^! l9 |( \
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);% u; k8 o6 S0 F: G
       
/ c' Y9 ?) ]' Z( r6 g    if(result == EDMA3_DRV_SOK)
  B$ t7 Z; p$ O8 L9 z' ], A- }% |    {
5 C& F, V" r! H1 {' ?            print2arm("edma3 driver init success.",0);5 a2 p/ ~. r& P9 r* }1 S1 h
    }
- B) y# p1 _2 [; p: P' Z! m}. h1 R" |  O* c4 y* L

$ _0 ~* d! Z8 }9 R6 e
+ T5 d4 ?3 b0 S+ i7 U- z" x" LEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。* k8 {3 R( ^! s$ b3 ?0 r
: O, d# P; d8 L* Q
/ t7 h/ I( I' A0 x9 R" J9 R
分享到:  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
; H" X2 R% n: f6 a; T& T每次DMA传输完成后都要再次使能传输

% h. c, t' `6 z2 l2 e4 ^- @- i原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-22 06:25 , Processed in 0.042569 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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