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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:6 E  F3 o  r* G7 m
#define  PING_PONG_ACNT          1& |, E0 e5 J  S
#define  PING_PONG_BCNT          8*32*40
& Q  I4 B6 {: B" x% p//#define  PING_PONG_BCNT       1 ; v$ Y+ L1 }" q1 b1 O: a
#define  PING_PONG_CCNT          1" A" F' L1 h2 r/ t. k9 g$ F: k
#define  MCASP_BASEADDR          0x01D00000
$ q  ~+ M6 |2 H+ C+ |0 z: @& h#define  Mcasp_RXEVENTQUE        (0u)
5 F3 y" l# v9 R6 Z
# E: V2 h! S% b6 S4 K/* OPT Field specific defines */
* _% Z3 F  U3 g) a, D) [#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
  m- h9 ]3 y( `; s9 b' e. F2 [, ?#define OPT_TCC_MASK                        (0x0003F000u)/ d( c! V# [# p6 Q
#define OPT_TCC_SHIFT                       (0x0000000Cu)0 g! m; W& g4 o- g/ K! S
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)% a8 f4 R* k( D( [9 o. w
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
& G" N- W/ a  R# E1 P1 Y
, ]1 x+ E% ~) ?% ~+ Kchar ping_buffer[PING_PONG_BCNT];
# F8 O2 `3 \" r6 q6 Ichar pong_buffer[PING_PONG_BCNT];1 Y' l* M; H  h5 @' _
) G& e* k- o  w/ Z& i/ z* L
. F. M% ]( w0 ^$ f1 Q

5 j: }: ^: X) F9 _. g) v0 X+ D' T6 m, C, |) \
static void ys_edma3_init()5 s! a7 r4 _1 v% ]  r
{- ]7 ~, I2 K& p. F
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
2 D- z' G, y5 f/ ~* S6 i) T        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
: Y7 d! u9 |# w        EDMA3_DRV_Handle hEdma;! _' |' j' N! v0 v" _- J! g- d
    uint32_t chId   = 0;
, R& T; d$ ?' x1 ^3 M. T) t) y    uint32_t tcc    = 0;( b+ z/ T  f! t' M

' T" j& |. X6 B/ D# O, `    print2arm("edma3 driver init...",0);" h9 {) U+ H% M( H8 e
, y( e$ W* ?7 l6 ^6 B" o
        hEdma = edma3init(0,&result);
4 \: n: \  C6 F& J+ ]4 d- ~        if(hEdma)
4 J$ b. j9 `6 e7 M. b        {$ h0 E/ o# i( s1 s! b! g
                print2arm("edma3init() Passed.",0);2 X2 R+ \/ _2 a, r8 k
        }
# O+ ~  V, {; [% q' ~( t4 w        else
! m0 X5 D0 M2 g9 q- ]3 z- S        {
/ P4 X8 B) D% j, E& B                print2arm("edma3init() Failed.",0);2 d7 Q7 X* D; M! ]- f3 p. [* {
        }
+ ]0 I. q7 |0 M        , _4 f: T7 j& B) _
        if (result == EDMA3_DRV_SOK). @8 r- L9 v9 b( p: x0 [
    {3 O" d  r) t$ a1 S
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
1 J' ~) J" Z8 ]. l" C. H" @                                                       (EDMA3_RM_EventQueue)0,
; f9 p8 @( V+ S4 Y& H9 w. q# v                                                            &edma3_isr, NULL);
7 m+ P% @7 x4 J0 r    }8 ^; k% Z8 R" w6 F$ ~4 x& @2 R
        8 ^' l9 S0 @' D( [6 ^( Y4 k
        if(result == EDMA3_DRV_SOK)
) h& U' m$ k' m5 X        {& x4 L- c; ^; p
                paramSet.srcBIdx    = 0;; F: P/ G, Z5 j! N& w
                paramSet.destBIdx   = 1;
/ u- \' ?8 g, Z: Z                paramSet.srcCIdx    = 0;0 ~8 E( g" g2 M  M: P& A
                paramSet.destCIdx   = 0;2 w8 m( ?' f* U; ?
                paramSet.aCnt       = PING_PONG_ACNT;
. m# H3 Y- n2 g/ M" G9 p                paramSet.bCnt       = PING_PONG_BCNT;
  f- n3 T' {2 K8 f                paramSet.cCnt       = PING_PONG_CCNT;" @& K3 @: `: j& `
                7 q& }. l% k# N9 J/ Q& M9 f6 e" l! k
                /* For AB-synchronized transfers, BCNTRLD is not used. *// b  N/ @% p+ W: \, e5 N( R2 K" _
                paramSet.bCntReload = PING_PONG_BCNT;8 p: s) P2 l0 r  ]3 D

' }, w$ s( i) y7 b                /* Src in constant mode Dest in INCR modes */7 v* C+ T9 F' N7 K/ A
                paramSet.opt &= 0xFFFFFFFDu;
! [3 r7 m! m9 C, d! X0 V                //paramSet.opt &= 0xFFFFFFFCu;" S2 K: n. a& T" ?6 m: \
                1 d! b0 \+ a' }" P/ `+ L; F& U
                /* Program the TCC */
) O" X1 p; R7 g. A( m8 c                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
2 g9 O' H: q7 l9 R8 ]: A. r4 N0 N7 o( ^& U- J4 ^
                /* Enable Intermediate & Final transfer completion interrupt */
4 @! q2 J# ?$ Z& \                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
& ]5 q9 R; z! [$ l                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);' K0 z. t3 C( p' `) H

6 P) d1 C2 ?% l* Q4 F$ I                /* AB Sync Transfer Mode */7 C5 v& y% s4 q+ S
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
2 y; d7 }5 G( ^) W. m4 C               
' D/ V& |" F: T$ D, u4 w( K                /* Program the source and dest addresses for master DMA channel */& }# o  Z$ \7 ^5 ^" y5 o
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);& N; t# G! [, b7 J7 S! {
                paramSet.destAddr   = (uint32_t)(ping_buffer);
/ j# b% b  A* H! X, M. z9 E4 f: t9 J3 Q/ {
                /* Write to the master DMA channel first. */, u, e1 @3 w& u+ \- H
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
2 G- y* }4 U  K! `# F; d    }      
: z  Q) r) F! ~% P* T
, z1 G0 Z# Z2 i        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);2 C2 C  Q% d% I: C
       
! D! @/ J' O$ Q7 y4 m: j, {) p    if(result == EDMA3_DRV_SOK) - E5 m$ b, d. F9 d% Q+ `/ C8 T0 y
    {
2 a* K  ^+ y# j            print2arm("edma3 driver init success.",0);
, X: z0 Q( E) }# Q9 a- F1 e/ {    }
; L! P/ L8 a" o}
- `* H. O- E; y; a0 m$ q2 |5 D1 a7 e
% W3 {6 i+ L- p8 l) m* @. W! z& m5 |$ H# h1 m( A5 @
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。) I7 p* ]+ y2 H  V

# B) c( a, P! j; H; u, j1 v5 a
分享到:  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
6 U  ]- n3 M) G+ r5 A8 G9 V每次DMA传输完成后都要再次使能传输
8 r( K; P) i& `: a1 K3 m$ Y
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-12 15:15 , Processed in 0.039688 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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