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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:' P7 s0 {7 }2 V- A& [2 e
#define  PING_PONG_ACNT          11 ?+ |' q1 d  N: H1 G- _* t; D
#define  PING_PONG_BCNT          8*32*40
4 t3 Z0 \9 Q& L. y5 G//#define  PING_PONG_BCNT       1
6 v0 r0 y8 Q( Z! ~: x" G#define  PING_PONG_CCNT          1, E0 h( o$ u, }: S7 o
#define  MCASP_BASEADDR          0x01D00000/ S( O# u* w# A  m
#define  Mcasp_RXEVENTQUE        (0u)
) s: x! G9 t( o, x! \$ h4 W" T( z/ R2 M6 _, o  U! N$ i
/* OPT Field specific defines */
* h+ B' A' Q* t! Y  g8 H9 ]#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
2 G7 o9 ~& N8 z+ s#define OPT_TCC_MASK                        (0x0003F000u)
' \" h0 l" k) i7 n. }#define OPT_TCC_SHIFT                       (0x0000000Cu)
0 F" m+ p$ C* f#define OPT_ITCINTEN_SHIFT                  (0x00000015u)- T8 D6 X' U- X, a* G
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
2 I2 S# ^4 Q2 k3 E7 B1 C  O8 c$ V7 t3 T; q
char ping_buffer[PING_PONG_BCNT];+ x- k- u: y& K+ R
char pong_buffer[PING_PONG_BCNT];: g( e1 b5 \, n; t  O$ N
: Z" A. u" `* j! t, f7 }6 J$ ?
0 m7 Z& v1 y9 J4 m0 A; W6 r
7 k$ m# z/ o( r# W6 g3 h; c

5 M8 O/ k: g, ]( p7 X8 t* ]+ m( K* lstatic void ys_edma3_init()7 j& W4 S' \' o( d. p& @" n
{
* O1 v+ ~& }# Q; q! n' J        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};- \! B* m+ q3 g/ G  W0 V5 z
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;$ x* J/ Q8 w$ y8 t+ y: f
        EDMA3_DRV_Handle hEdma;5 H7 V) m) O2 X, z7 i2 k, L
    uint32_t chId   = 0;- E" ]$ p0 ^& Z: f
    uint32_t tcc    = 0;
+ Y8 @6 N) d# n0 |$ }# i* R7 E) @& o4 L3 j9 s% ]% v
    print2arm("edma3 driver init...",0);
4 C: |1 Q  q- b
0 Q" J& i# N: |- V        hEdma = edma3init(0,&result);
! U6 @* ?$ F6 z# p        if(hEdma)
. _6 s" M7 v& K7 w% z        {
; x" T2 J7 v* k& t$ P                print2arm("edma3init() Passed.",0);9 B5 K0 e9 G+ f
        }
0 Q2 _4 t" R8 d0 F5 n        else
1 h4 G! e" j6 _! W$ f) `+ M        {; O) ]  i* D, r: O; p4 X0 {
                print2arm("edma3init() Failed.",0);5 z" Y' M. g+ L: f% `; H3 z
        }
4 L7 ?% E$ r* e7 v* t4 c; p. D        , Q) Z  V- j! W; ^. v
        if (result == EDMA3_DRV_SOK)
% @# p# f! i2 l& g+ s    {* f/ S' I% z( v
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
0 M6 l6 u0 Z: |7 J7 O                                                       (EDMA3_RM_EventQueue)0,
7 n4 y4 W) J: d# d* j; E. T1 B6 @7 n                                                            &edma3_isr, NULL);& P6 t: H: w1 I) _; f1 ~  h6 ?
    }
  {& w7 v" t. g& R0 f( ?# Q* B       
! X3 c8 u- G+ Y        if(result == EDMA3_DRV_SOK)7 Y- e& ~, t, Z. A5 h- Y. l5 `( A
        {) \0 u) D4 _& B9 D3 Y% v: O
                paramSet.srcBIdx    = 0;/ H. B  r! f: t2 b) G8 J! g. o. t7 @( z
                paramSet.destBIdx   = 1;
; K, q1 U# n) z2 W' w. O; a                paramSet.srcCIdx    = 0;
. W* h. p8 ~1 ?; B+ l' b' i$ f                paramSet.destCIdx   = 0;" s* O8 r: O1 U- A: B7 p' |1 t
                paramSet.aCnt       = PING_PONG_ACNT;( ]7 q+ `* U( R9 U5 D5 o
                paramSet.bCnt       = PING_PONG_BCNT;- o' O, z, `1 U! @$ l' i
                paramSet.cCnt       = PING_PONG_CCNT;+ O* R% t+ k& I# p; Q; N
                ) j& w5 c* O1 L- n2 V
                /* For AB-synchronized transfers, BCNTRLD is not used. */2 S& y5 W- ~9 u4 N
                paramSet.bCntReload = PING_PONG_BCNT;
5 U+ ^+ g9 u+ k" g. y9 S4 b5 ^+ J* E# o) ^& n7 z/ L0 x0 _
                /* Src in constant mode Dest in INCR modes */
5 g: Y" V5 z! D! `- ^2 \                paramSet.opt &= 0xFFFFFFFDu;
1 T5 j( c/ p% @2 P+ h                //paramSet.opt &= 0xFFFFFFFCu;
# \4 }9 Q3 H5 `3 s& M5 Q7 {) B# S- A                - I0 l6 Y" \, Y6 A% B- U( a
                /* Program the TCC */. H6 W9 k. N3 g
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
  X5 o& d" G0 a, B* w/ u5 p. I7 M$ X6 J0 |4 N# K' P% ?
                /* Enable Intermediate & Final transfer completion interrupt */
- P; y- V/ A; p6 k! N                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);6 \7 Z6 P  c2 ~0 a7 s
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
# N% W% w/ ]4 ~( u4 S% D4 [7 S* `6 V/ S  `
                /* AB Sync Transfer Mode */' K2 E, v9 X& W& y; u
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);) H; s" ^9 ~+ j1 I' q- a3 [
                ! m5 S& |2 g) s$ |
                /* Program the source and dest addresses for master DMA channel */! i+ w! q- y1 L7 P2 K
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
( E9 S" y1 J2 E8 N/ ?: z                paramSet.destAddr   = (uint32_t)(ping_buffer);4 f! J* c6 k* g3 ?. b3 c

, R8 q0 L0 |( b( K9 ?4 c7 G                /* Write to the master DMA channel first. */
$ K9 k- @, J; j$ I/ [                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);4 f: H) d, @6 \+ y( P  B
    }      
; i3 t& ~: \: I/ ^. e5 x
3 u2 S+ y0 F. S5 P9 O        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);8 u& K  _3 p' m1 w" P
        . M0 b. X7 E  T3 L" Y, X
    if(result == EDMA3_DRV_SOK) $ W6 p3 E6 V( j" B& w2 L+ z
    {7 j( O/ q: w! l; ~
            print2arm("edma3 driver init success.",0);
) ?1 v* ^. n5 m: H' u2 Z) r- `$ d: N    }
: m  {6 Q9 Z+ p9 v}
" X1 B) W( K4 F* j, d7 o6 X1 J$ _+ S: f# G4 a

1 ~0 o" \4 w7 P8 L2 SEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。& R$ E3 U1 P. k0 h, V( }! |

6 ^! U4 L, i  I- c2 V! @6 |" q: X; C3 ]) j4 t  O5 J
分享到:  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 Z4 Y5 C9 c# v  |5 G
每次DMA传输完成后都要再次使能传输

6 D4 I: x  n9 C( A) L" S; {5 \原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-15 17:02 , Processed in 0.041306 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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