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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
! G2 D9 P7 I. Z0 h5 u! r6 h#define  PING_PONG_ACNT          1
, Y& a, k1 M( h( V) l' f& X: h#define  PING_PONG_BCNT          8*32*40 , B$ t' B8 F6 X- u! q5 B- j5 K
//#define  PING_PONG_BCNT       1
* [8 V1 O0 O, ]. |4 O) x#define  PING_PONG_CCNT          1
9 Y6 T  y- Z9 g& ~3 V: e#define  MCASP_BASEADDR          0x01D00000
: r& ~  v) A4 b* w' k#define  Mcasp_RXEVENTQUE        (0u)
3 b, [6 j) F& x5 f% }. T* f" d
2 I- }: D) b7 G" a# @) k5 f/* OPT Field specific defines */+ ?3 N3 y! l5 ~& t& B) ]
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
2 V9 y) |) V0 a& z' m$ }2 c#define OPT_TCC_MASK                        (0x0003F000u)9 b' X1 F" ?' g3 T1 ]
#define OPT_TCC_SHIFT                       (0x0000000Cu)) Z: a: _- o4 ?
#define OPT_ITCINTEN_SHIFT                  (0x00000015u), ^1 J1 Z9 T  j4 h2 p) P
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
6 j" N% W% R: ?: I7 `& \+ O2 P: Q& J- L# A
char ping_buffer[PING_PONG_BCNT];4 P6 S1 R0 F' O$ b. _" z1 ~& R
char pong_buffer[PING_PONG_BCNT];
% W8 [' a6 N, l+ p# M0 h8 d* w% p2 Y

2 B6 u+ O! W1 V& N  [  `* }5 o' Q% H3 f$ k$ x2 w1 \

2 Y8 v  U9 B, Zstatic void ys_edma3_init()
3 u. `6 ]% |  D5 \1 B{% i( C5 c$ O( A- D0 Z
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};' f8 N. T0 v5 y% B' P, `
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
9 U* D2 L  @! k- x2 H        EDMA3_DRV_Handle hEdma;. I8 I' R4 L8 g$ ?1 R
    uint32_t chId   = 0;
3 G  G! f1 i% ?    uint32_t tcc    = 0;
# S, {- z' p8 U/ E* K& L
) H! e5 O. Y2 t  H* f4 U4 N2 }+ @) h    print2arm("edma3 driver init...",0);  @# [, I& B/ e" I2 u

2 m7 M6 U4 i! V        hEdma = edma3init(0,&result);
' f5 l: S. g, b% o2 Y% l' {6 y' ]        if(hEdma)% Q- |1 ?; V& Y) D0 @1 |, t
        {6 ]; j! \4 m4 Y( ^# P
                print2arm("edma3init() Passed.",0);) y! I+ u- v# Q9 r, _# v
        }
  ?0 l8 {6 ]+ g% c3 {        else
' x: P( n; r$ A9 b' R% A: y" R        {. w' c  x5 e  P5 G& G% ~5 w
                print2arm("edma3init() Failed.",0);, H5 {# \1 ~+ V" C
        }
9 W7 h' `- Y) W7 s$ e       
# B3 j' s0 }* @( a  b: v' I        if (result == EDMA3_DRV_SOK)
7 k# W+ T+ i, I  N- m    {
- m: i6 [) v8 V* W, y                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
$ Z0 S+ E0 n/ j( p1 o                                                       (EDMA3_RM_EventQueue)0,
+ {# E3 e; x( `" Z" d& ?7 u                                                            &edma3_isr, NULL);9 N/ n! w- L) I% f. |: @! a- L
    }
- _& p0 V% [9 u0 |; o5 N        $ w0 P$ c$ J/ N  ^+ C
        if(result == EDMA3_DRV_SOK)
$ {7 _4 V0 U" @$ ]0 O        {
# ~; z- R. S- d                paramSet.srcBIdx    = 0;
' }$ ^; ?/ D( X8 u+ h$ ^! n! N- P( E                paramSet.destBIdx   = 1;1 c( M2 `9 }) A5 v% `- G
                paramSet.srcCIdx    = 0;2 M0 L' ]# G4 {
                paramSet.destCIdx   = 0;. f  h5 i: E% ]6 @2 S
                paramSet.aCnt       = PING_PONG_ACNT;- K1 O5 g% n! P  w% ]1 y$ Z
                paramSet.bCnt       = PING_PONG_BCNT;# }7 d7 h$ i! }
                paramSet.cCnt       = PING_PONG_CCNT;4 A" v- j& A7 n( h0 b* S
               
1 H1 x5 w: p  m3 n                /* For AB-synchronized transfers, BCNTRLD is not used. */
; ~7 {' w- c0 P$ ]# L                paramSet.bCntReload = PING_PONG_BCNT;  _& V/ K/ C2 s6 U3 D! l! Y

( B% |; u/ \5 g! t. N. ]+ Z: o6 `                /* Src in constant mode Dest in INCR modes */
: V, j% q# t5 }) s. F. H7 E                paramSet.opt &= 0xFFFFFFFDu;2 n" e( z% A% Z- F
                //paramSet.opt &= 0xFFFFFFFCu;
8 D% v0 h# k$ A; {; z3 t                : \: Z. R% s4 G) k' k4 ^3 l6 U$ h
                /* Program the TCC */
8 d0 e* y! G2 L6 R$ ~                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
0 g) G( b) @+ b- t& U) h0 g* y) R
( v/ B/ ~5 @, B4 \6 N: }                /* Enable Intermediate & Final transfer completion interrupt */3 N* w. B% F1 I- o& I& S
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
, V: n: {5 U+ C/ Q  N4 J, P                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);6 m9 B. P3 a# U7 x1 S
" K1 b9 m& _" N6 X/ H6 l
                /* AB Sync Transfer Mode */; G! h! U  |, [: a: L
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);' |6 R# n# Q" P8 C
                ; E9 A7 \* v/ Z
                /* Program the source and dest addresses for master DMA channel */
8 I  L& B2 Q( A4 [; ]6 [6 ^                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);. I6 D3 B- L  u3 V' w! \3 w/ D/ R8 [
                paramSet.destAddr   = (uint32_t)(ping_buffer);
! Y& L8 n. q, G0 Q& |  n' c  L2 s/ V% }. U$ \1 Q" ]" M, f, Y
                /* Write to the master DMA channel first. */
3 }/ k0 g* n7 J& C$ b/ s+ H9 R                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);7 }! r4 ~$ R7 j) q# i
    }      
4 U, j0 i* u, W2 j. z3 W9 L6 Q8 n4 P: r! X3 E; A
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);$ A& K! M; y1 B
       
2 x, y+ L" S6 B9 `% k. I    if(result == EDMA3_DRV_SOK)
6 Q* O, L  h0 t# ~  a/ {9 x* m    {
% L6 F' {: u" _5 J1 k            print2arm("edma3 driver init success.",0);9 \! }% e1 p- W1 a+ e
    } & K& f' @- R# e- l* ]. j) G! P
}
0 Y# p/ K* z# y, `1 a% j1 @8 y5 F1 M3 a  m4 {7 ]$ T& {" B
& H# `! p' C" f$ U5 ~9 O1 c+ t' b
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
, i) ^7 Q1 l; N! ^  q! L7 l) h7 t

! n% x2 I6 H. e! E
分享到:  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; @% D2 p  ]' {% C
每次DMA传输完成后都要再次使能传输
6 S1 [9 _. k. F  x7 Y
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-3 09:29 , Processed in 0.039077 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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