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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:3 E0 Q  P, X- j# J8 h& D3 V2 Z
#define  PING_PONG_ACNT          1' o, }. l! m2 ]+ x6 O
#define  PING_PONG_BCNT          8*32*40 * j8 s1 f# i/ }9 T) G0 L
//#define  PING_PONG_BCNT       1 8 l2 h2 a0 Z( }9 a
#define  PING_PONG_CCNT          1- m; @. F7 I6 s" i& L3 G6 u
#define  MCASP_BASEADDR          0x01D000003 a7 q' `" H( `5 @
#define  Mcasp_RXEVENTQUE        (0u)
& R' r( @- L* j3 `3 l
  {$ L7 D; @: d% r6 `: z- V! Q* y/* OPT Field specific defines */
9 n8 c" T1 `" J4 u. Z6 {#define OPT_SYNCDIM_SHIFT                   (0x00000002u)" }/ o. m0 O& I
#define OPT_TCC_MASK                        (0x0003F000u)6 e" L" Q6 C( v6 ]4 c; {8 a: l+ o* C
#define OPT_TCC_SHIFT                       (0x0000000Cu)
* o9 Y7 e* H- K# ~$ L#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
$ z2 w! N8 K) o#define OPT_TCINTEN_SHIFT                   (0x00000014u)+ W/ [1 P9 J1 R: Y/ x/ d
; ?+ W5 ]4 G/ n; e; w& J
char ping_buffer[PING_PONG_BCNT];' f9 w0 f* J0 w
char pong_buffer[PING_PONG_BCNT];6 B9 }- K3 L: T

: Y7 U: {' R8 T( t3 T2 L% q, a
; C5 e3 ~* x2 h# n' C* B+ }( }$ M  I! W+ L" W$ M* i

4 T6 X& i* B8 d- [& ~! estatic void ys_edma3_init()9 ?  P4 u: C' @7 {5 @' K& ?- L
{& F9 o4 g; `* H' V# h' H2 o
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};& w* ~& I1 h8 B
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
$ L! X* a5 s6 o( p2 ?3 u        EDMA3_DRV_Handle hEdma;) ?9 f' m) W: U5 f4 X" f* N
    uint32_t chId   = 0;
3 T' b: p1 g/ |! h4 w    uint32_t tcc    = 0;  _- Q% K# s2 W2 V2 y1 C

$ {, i" o7 {8 ?/ D! b    print2arm("edma3 driver init...",0);
! n4 _% _" X9 t- O; M
2 J( S' ^5 q5 ?/ E) {        hEdma = edma3init(0,&result);
+ s2 W/ D0 Q/ k# q( y3 E        if(hEdma)
; G. a  o1 h3 N8 N/ M        {- O0 a$ k6 ]- w" e3 k  N) |
                print2arm("edma3init() Passed.",0);
/ x' ]- A1 ]( t! d        }
. t. W: U  f4 P$ G# o( S8 @" j        else. n9 [" I9 }4 e- \  s
        {
9 o+ H* n* C1 l" Y" m! A- R                print2arm("edma3init() Failed.",0);
  y/ \8 G0 Q6 [$ k% e) @) C, K. d3 H        }+ {7 V! }: u% T: M3 ^
       
* A1 f9 i: r. D9 q& p. o, q3 E        if (result == EDMA3_DRV_SOK)
5 |2 ?# ~9 A# @# h% S" W    {
" z) p( S/ {5 ]' A                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,% Q/ Z/ F' A8 X( [& ?4 E% h' W
                                                       (EDMA3_RM_EventQueue)0,; a% b; o' L( T
                                                            &edma3_isr, NULL);
& o$ Q  S+ L$ Q8 \    }
2 S; k) ]% N* o       
. k& @/ ~$ H) v9 {        if(result == EDMA3_DRV_SOK)! F! p) T& k% L4 f' ]
        {
% a- w2 `; J. k5 @! F$ |9 h) H                paramSet.srcBIdx    = 0;
$ I5 X1 |5 r' M" v- K: i) A4 v/ J                paramSet.destBIdx   = 1;
" y" d7 ~" E7 j  z+ k# d% `" d                paramSet.srcCIdx    = 0;
8 L4 ^% y- G, h2 W1 p" p0 r                paramSet.destCIdx   = 0;
+ b! a- b2 j: S% j8 [; b9 J) I4 L" F  b                paramSet.aCnt       = PING_PONG_ACNT;7 b3 X7 h$ F+ N5 k( F% Y' d1 i0 X
                paramSet.bCnt       = PING_PONG_BCNT;5 W* W# S! e" u
                paramSet.cCnt       = PING_PONG_CCNT;
: \% o: J( u% W. h7 b6 |               
% o/ Y  V* \, O5 |6 Q* s/ ^                /* For AB-synchronized transfers, BCNTRLD is not used. */* O! f3 Z$ T3 v2 p( l
                paramSet.bCntReload = PING_PONG_BCNT;4 H! b( ?" t! Y3 L9 E/ G, y( |

/ o+ ]5 W! u; f' J* N+ c* I. y                /* Src in constant mode Dest in INCR modes */+ P: H5 M9 ]) D8 n( i& O6 W: n
                paramSet.opt &= 0xFFFFFFFDu;; w5 e; M- g8 S+ \( ]
                //paramSet.opt &= 0xFFFFFFFCu;: u; f3 r$ s2 ^1 h9 G0 @
                  d$ N: V3 ~2 J) j( `6 v
                /* Program the TCC */1 ]7 X' E+ ~; I
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);/ u/ h- }2 V# n) M4 h5 h

+ N2 y+ M# Q4 @: X+ g                /* Enable Intermediate & Final transfer completion interrupt */
9 Q  v5 |+ g* U" I, Y                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
" i  n  c) g3 [* ^- l) N7 d+ y                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
3 f6 L$ J- |8 e" G( d& \! e& m- `. Z. n7 D4 C1 \+ w) O% M, A: D1 D
                /* AB Sync Transfer Mode */! ?3 X$ z6 }1 @1 G1 S* ^( \( m
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
% Q, g3 k# j8 L* l                $ f3 A4 o9 s) x# T
                /* Program the source and dest addresses for master DMA channel */
/ J8 g3 ?0 P( Z7 ~                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);4 L- `% Y3 U2 _- r3 s$ f* u$ ~$ _8 A
                paramSet.destAddr   = (uint32_t)(ping_buffer);! H4 n+ Z! T3 Q) z5 t

2 F' c+ s" Z- w# K4 L                /* Write to the master DMA channel first. */
) }/ x5 E; z: ^& s  o                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
8 _% R" W: V% V    }       , ^* i7 A0 z5 \% ?" a7 l- b

( F. b- R* Y$ k# V" [: [        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
$ H: d" I2 _2 x        $ v& H) n' L, z2 G- u, F( T6 H; T4 a
    if(result == EDMA3_DRV_SOK)
% E8 s- M; D1 X1 U, f    {  H- R( X% h: ^, v1 P* h
            print2arm("edma3 driver init success.",0);/ |4 m( q0 n7 ^; A
    } & k$ I& X$ O5 _7 p
}
* G" _' P: A5 J5 ?# m; @2 x  i1 E7 \6 N$ a& P
9 F* G( Q9 y; p) \" A$ c7 g
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
% w  }% Y- ^. d3 p$ {; e/ y# G4 b; W+ L0 O4 a8 B' C. B
4 @' s4 t6 z& g% E6 v
分享到:  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* q) x$ b% f, s, O
每次DMA传输完成后都要再次使能传输

# E. H" s1 X+ I% E2 ^' S原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-31 17:07 , Processed in 0.041986 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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