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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
& [" L" w2 M$ G3 W% J  S#define  PING_PONG_ACNT          16 w4 r4 K) E+ U# {$ h. W! N! E' _
#define  PING_PONG_BCNT          8*32*40 0 U. v3 x( b% b# [; f7 i1 X
//#define  PING_PONG_BCNT       1
1 a7 i* A, U( r4 n. ?2 H1 m#define  PING_PONG_CCNT          1) L# }) M# r1 G8 f3 M. g! ?) ~/ t
#define  MCASP_BASEADDR          0x01D00000. B/ K7 y) C( {
#define  Mcasp_RXEVENTQUE        (0u)
$ H! f/ f. f# N( @" z8 Z
; p# B% d& x1 k5 i4 ?/* OPT Field specific defines */3 H( E1 p& ^# D8 S  c
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)# V7 ?; R* f* @, G! R9 R
#define OPT_TCC_MASK                        (0x0003F000u)/ L( Z0 j3 u5 T8 _5 ?
#define OPT_TCC_SHIFT                       (0x0000000Cu)
; o' B2 ]/ D) d7 g9 M8 {% @; z( X* L#define OPT_ITCINTEN_SHIFT                  (0x00000015u)  C  ~8 d/ p6 M4 h2 H1 Z9 E
#define OPT_TCINTEN_SHIFT                   (0x00000014u)! U( x, }; T, E  d$ N; B7 }2 Q
. R: X% N/ p" h/ c0 v
char ping_buffer[PING_PONG_BCNT];' ?6 S5 A, J  a7 H- p) A
char pong_buffer[PING_PONG_BCNT];. b$ B( M9 _* z7 @" ]5 s# s2 I, T
+ b. }) _' X. O

+ o7 {( l! @* w' m& h8 f9 y% o- ?4 c; l

6 |- L3 H8 A8 y: H- E" \- F2 l$ e4 Xstatic void ys_edma3_init()) j6 l1 z9 d" @
{% S# R( C7 V  C9 a! f3 S7 n
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
5 R: a+ T! z' w% }! X, C' u        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
; v1 E/ A. E0 ]; H3 o        EDMA3_DRV_Handle hEdma;
5 p9 F& R5 i1 T& w# r/ V; Q    uint32_t chId   = 0;1 R5 O  k9 s7 U* L- u9 G
    uint32_t tcc    = 0;
( ?: i! g: ~; i3 n8 {  _2 Y4 T* S- r) G9 x0 ?. w) E( p
    print2arm("edma3 driver init...",0);
0 A: p" K2 `7 }3 l& n9 ~) M. l/ m  M2 E: ^+ _/ A
        hEdma = edma3init(0,&result);
- F6 x% Z5 N) p$ y/ w        if(hEdma)
% \, y! k  `; d  ~0 r* ~! ~        {! v9 T! d& \9 _' q( ]2 r! T
                print2arm("edma3init() Passed.",0);! a2 W: ]" p0 K- P
        }) L* d5 A* J/ g/ z* F0 I1 u5 k
        else
4 E. f  D: ~% k, D/ k3 F" A1 R  e: r" n        {1 Z5 Y% V$ t# Y3 l7 r  A+ P
                print2arm("edma3init() Failed.",0);
4 ]" Q  k/ T1 ^6 r        }0 g3 Q! ]" E' D0 q1 Y
        7 f0 L' I# j" e: P8 P$ L  V- ]
        if (result == EDMA3_DRV_SOK)$ G# j: Q  q6 V" E- V
    {
9 x7 Z( K4 {$ d! E/ D: a                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
* c1 u0 U, A& g9 E" R4 N+ S  s$ H                                                       (EDMA3_RM_EventQueue)0,( |1 F! F# k9 @+ G7 X
                                                            &edma3_isr, NULL);: n) u. K- `6 L8 [
    }+ R) Y/ i7 T- I/ B; j
        9 B. h* N+ R' g" A% T0 ^
        if(result == EDMA3_DRV_SOK)$ I9 T- {7 d  }
        {
! b7 B2 }# f% n; E" H8 C0 K: p: f                paramSet.srcBIdx    = 0;2 J7 D2 R7 F& X8 f9 I9 v  @" W) g9 t
                paramSet.destBIdx   = 1;
$ z, r% W$ @$ `0 M, H                paramSet.srcCIdx    = 0;
% g4 L% P& L7 a4 Z# L                paramSet.destCIdx   = 0;
* @% _, J# L) J0 r1 l# c                paramSet.aCnt       = PING_PONG_ACNT;
& h* D' q! X8 z                paramSet.bCnt       = PING_PONG_BCNT;
; [. V3 U3 g$ h% F& x! c7 T                paramSet.cCnt       = PING_PONG_CCNT;
: V7 u+ s, N$ q; F               
: I! {3 W& Q8 V2 e5 g0 e                /* For AB-synchronized transfers, BCNTRLD is not used. */
' Q- P! g6 j% Q" c! u3 P( G                paramSet.bCntReload = PING_PONG_BCNT;6 v* K0 a+ I. ~8 f# _9 L% _
- w8 ?+ a2 E* z/ n1 D9 s, K
                /* Src in constant mode Dest in INCR modes */$ t! B9 o6 o" }2 q" S
                paramSet.opt &= 0xFFFFFFFDu;: n# \; S1 e9 v1 k) n6 `2 B7 A
                //paramSet.opt &= 0xFFFFFFFCu;, X: j" q5 N& Y) k! W% n
                9 k4 L. b/ R# ]$ b
                /* Program the TCC */3 r. O4 }( v1 b& |- c$ `
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
7 B. u% H! g) }! @* E  c) t0 z; y5 D
                /* Enable Intermediate & Final transfer completion interrupt */
$ J& S. I$ A- z" e, X5 s* Z$ x                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
$ _. a" K7 _" s# |4 `: ?                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
9 q  [. c5 V/ Y& H" H$ M4 x" |0 |% ?; A! c7 b0 |, w; h8 I
                /* AB Sync Transfer Mode */
' A: T' w/ D/ x5 y4 n                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);7 u3 S5 M  ~4 O
                + P0 T# p5 a' q5 f
                /* Program the source and dest addresses for master DMA channel */
4 W+ i( O2 T0 v( x& M                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);$ O6 O# F( i& n6 i  ]6 [
                paramSet.destAddr   = (uint32_t)(ping_buffer);
9 i* i6 v1 B1 Z3 E  f& L2 W
$ m6 i& f, C$ T  x                /* Write to the master DMA channel first. */
  I4 E) A; p1 c7 v: d: ?, h" b                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);' [4 L* g0 f7 ^$ `# ~2 _0 }
    }      
8 P' \, H' Z5 ~, E) O  A# e" J; T# x
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);# U4 C  z# @9 T$ `+ E2 u6 v3 B
        , b5 \1 K, l* A5 d' @
    if(result == EDMA3_DRV_SOK) # l" X! Z: E2 `, a+ \
    {
$ ]' `5 O- X# b4 Y            print2arm("edma3 driver init success.",0);
$ j  k: J% V  j4 j6 }    }
1 u# O6 B9 ]9 X9 I* T! [' g  h$ o}
/ Z" _* x+ J) F* Y# _, ^: p; M. [! a* C
  T/ f6 T+ t7 a  o( M2 r/ D3 A8 i
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
# Y8 G) a, ?+ O  q, p! L+ e1 R0 Q
/ @4 q& o5 F2 q# e
1 d' L/ R/ t* ?: e+ G
分享到:  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
* j( P1 G* c+ @- e0 }% q每次DMA传输完成后都要再次使能传输
& Y. ~8 T2 v5 k3 H9 f9 j; O: O
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-15 18:53 , Processed in 0.040687 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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