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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:& k8 p1 y* |( B/ K0 k2 Y/ ]
#define  PING_PONG_ACNT          1' W$ J# N- j: u( e$ Z
#define  PING_PONG_BCNT          8*32*40 ; m6 a" m' S2 L1 G0 J
//#define  PING_PONG_BCNT       1
0 M  f8 g; U2 I. n+ _) p% m9 [#define  PING_PONG_CCNT          1. D3 [7 O  f7 E4 s( h
#define  MCASP_BASEADDR          0x01D00000* s: ]# O- p! R3 I6 v
#define  Mcasp_RXEVENTQUE        (0u)
' P8 B* J# w) X5 m# Z4 M4 r
- F) `' \( S& m& ?0 T6 j/* OPT Field specific defines */
( P- B2 O$ v" i( R. s#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
3 \) B& M; I4 B' Z4 x5 L, i#define OPT_TCC_MASK                        (0x0003F000u)
/ ]0 M* l5 p! S4 q; e#define OPT_TCC_SHIFT                       (0x0000000Cu)6 w) F2 U8 e2 s  C' p
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
3 Q7 @" h. g# u3 P: g- X# h#define OPT_TCINTEN_SHIFT                   (0x00000014u)
. m* v% \5 r, F2 v* ~' y& S- P% _/ Q
; q9 D) @. b% }: vchar ping_buffer[PING_PONG_BCNT];
  N4 K; m# Z+ n$ H$ \$ Mchar pong_buffer[PING_PONG_BCNT];
3 ], g! u9 J9 [6 u4 Z8 S0 m8 \8 F: d2 i6 T! G; G( K* d

3 f3 e, U$ S2 t; L, _, y9 t0 ?0 T
! J( E* J* R& w& j- |4 j3 u  F+ p) R
static void ys_edma3_init()
0 d& V: \$ T; b{# z& {! s8 w7 p* Z1 ?6 P
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};5 A3 g: ^: I: b7 `( H8 D
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
# h  f" h( f- u8 ^9 ~        EDMA3_DRV_Handle hEdma;( ^( Q; p+ v' @; [1 X% O) L6 D- Z, ^1 F
    uint32_t chId   = 0;: }% w3 U0 B6 |8 t; M  K4 p2 n" {
    uint32_t tcc    = 0;, m& g5 s) a- {% B
  s6 [% w9 S# |  t1 [* Z
    print2arm("edma3 driver init...",0);
! l$ F$ X( U$ W
9 n5 P3 [+ g5 R4 C* \        hEdma = edma3init(0,&result);. ?2 B4 q3 c  q% H8 a
        if(hEdma)
. ~7 K# W3 v7 T& I! G! d0 _8 U0 e# o3 m        {; \. n9 ?, g* j% w! e$ f) e  f3 ]
                print2arm("edma3init() Passed.",0);( k" m5 Z8 f* [
        }
0 H) l! O1 A  V+ f% M' b7 E        else0 K8 a, K# O" {9 `/ d$ g. n
        {
! o& ^* n& l8 Q                print2arm("edma3init() Failed.",0);
7 z% H4 D: y- G$ {3 |: I        }( W3 w( }# [- t: F
       
3 B3 @' I) q; D7 l        if (result == EDMA3_DRV_SOK)' N# d1 \" ?5 Z! n) D- M; V
    {
# ], W$ n4 N( t; f0 b+ ~* \. B                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,: W% g5 U7 K" c- X" q9 {9 Z) w
                                                       (EDMA3_RM_EventQueue)0,. x6 Y. i6 w, u7 q$ l- w( I! o& w
                                                            &edma3_isr, NULL);
* o& ?; A  H. f" s# C# h    }
% I. ^) z( ^8 |3 m       
- y4 d/ `( s% x) O$ J- Y        if(result == EDMA3_DRV_SOK)4 e5 Y) z7 [! m! |) ]  {
        {
5 I0 U0 S( |2 ?                paramSet.srcBIdx    = 0;7 e9 J& {0 H* q4 |# r6 @- `' O" k, S
                paramSet.destBIdx   = 1;" w& S4 C0 b# a/ A& U
                paramSet.srcCIdx    = 0;
3 Z0 {. R- r+ X% d7 M2 g- C% z2 H8 i; O& Z                paramSet.destCIdx   = 0;
9 ^) z' p+ }' I4 V                paramSet.aCnt       = PING_PONG_ACNT;6 a; ?" ~5 P# u4 i5 j7 F& x! Y
                paramSet.bCnt       = PING_PONG_BCNT;
, ~: f$ e) m9 ~7 w                paramSet.cCnt       = PING_PONG_CCNT;5 Y: `. i* Z4 B/ }: ~1 }' [4 k
                + a8 H; s3 _+ _$ T1 r
                /* For AB-synchronized transfers, BCNTRLD is not used. */9 y& _+ ~+ v8 M! N  n% M
                paramSet.bCntReload = PING_PONG_BCNT;: U% y' f  _4 P1 j- H% Q

+ x) [) K4 B0 r* y                /* Src in constant mode Dest in INCR modes */7 K% w9 G! d( @  Y
                paramSet.opt &= 0xFFFFFFFDu;* x5 ~% e4 U/ c/ _3 P5 p
                //paramSet.opt &= 0xFFFFFFFCu;- D- u$ L+ `1 U) Z5 Y9 N3 S
                % Z* @- B$ c: R6 `/ R4 {3 u8 F
                /* Program the TCC */
9 w2 y; S% V4 |3 D* i1 L                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
; {+ Z$ [, ^# j! T) n3 l% j
9 z+ }5 e, {2 C' p& M, U                /* Enable Intermediate & Final transfer completion interrupt */
9 V3 z8 h7 H2 ^& j  Q3 C                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
/ N* k  I4 f4 a  M4 p                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);  d: J( A8 w7 n, |4 ^

" a# }( X6 n  Z                /* AB Sync Transfer Mode */
( L2 n2 l* B+ `4 X; _0 f                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
2 f, x  b! t0 e4 }$ |/ Q               
/ h" I3 m) [1 y" s' X" I, j                /* Program the source and dest addresses for master DMA channel */
2 K+ y) n4 m6 G* t3 R( u                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
7 U" f  J/ a9 ~$ c% A8 i$ m. l                paramSet.destAddr   = (uint32_t)(ping_buffer);
& J0 c' n- ~- j) l' y" P; g, ~$ q
                /* Write to the master DMA channel first. */  Q9 o8 g7 }" O7 k) A
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
3 y- J) e& _, @    }      
% L  x  q, A, w% O% @' l* w9 h+ `9 }
8 p8 t0 \6 {9 D/ ]: T$ u        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);! S" p2 ^' [4 R5 U( x
        6 [6 q. n% E4 H& U2 D4 V6 q' T# x
    if(result == EDMA3_DRV_SOK) 8 y; [. _& ~) G
    {" @( |" x$ l0 s3 v' ?
            print2arm("edma3 driver init success.",0);
" B0 r# y" _- ~6 f    }
) ^2 y/ I: n* _}
1 O' k/ n. m5 h0 E. \, x7 u2 J) t  _9 V/ c6 v. k" K% {+ v
7 ^( p) C+ S0 g% S6 y9 R) n
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。' d& b; p7 I" v# N$ W9 m! g

/ `. |# s# P7 ]7 d) h$ Z% R, w5 }& L& {% a3 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
/ d" N7 y; w) L; Z; Y每次DMA传输完成后都要再次使能传输

) z4 J/ [) b1 ~. E: g原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-29 13:13 , Processed in 0.039057 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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