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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
' ]' Q/ P: v9 |4 X#define  PING_PONG_ACNT          1' m+ a$ t3 z- E6 s! D: u
#define  PING_PONG_BCNT          8*32*40 ; g  J2 V" a& G9 ~  c
//#define  PING_PONG_BCNT       1 ' p, j4 e$ k7 k% G1 n' d9 s
#define  PING_PONG_CCNT          1
* y' j8 w# }& q& R#define  MCASP_BASEADDR          0x01D00000$ j. Y9 T/ N- |2 \
#define  Mcasp_RXEVENTQUE        (0u)
6 N% u& c" x' w- U0 O1 j# T9 Z% p/ B
/* OPT Field specific defines */
7 c2 F* J6 R4 C/ u#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
& w  |6 t, P- D: M) {#define OPT_TCC_MASK                        (0x0003F000u)& c; K6 ]7 ]. n% @. Y4 b
#define OPT_TCC_SHIFT                       (0x0000000Cu)
- r8 D, s& ]8 E+ S$ {: B#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
4 U! a) H6 Y" P( Q- g  b" Z& G0 H! M#define OPT_TCINTEN_SHIFT                   (0x00000014u)
: K  T8 d( `- K) H) V- ?# w- m3 E1 g! S- E# A* e
char ping_buffer[PING_PONG_BCNT];. L* D% ?3 ?: F8 M, e
char pong_buffer[PING_PONG_BCNT];
9 u4 B4 ^% c0 d& `
% T" y- G! P; T, t2 o$ V8 x6 k  G* M
- [: W, n0 z; o; K2 r  }% _$ ?) P
' Q4 C" t: l  I7 |1 d# D4 u
static void ys_edma3_init()
8 [% x6 ~# {& A3 a{/ D$ W0 h$ n3 z( m1 |1 [8 v3 ]
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};, [% ?- [! S4 b( a
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
) _" `7 B. e6 n* Z+ i0 ^+ X        EDMA3_DRV_Handle hEdma;
7 l" {' Q+ o2 t' j6 g    uint32_t chId   = 0;6 C3 Z; v/ W, {; O; f, z- t
    uint32_t tcc    = 0;) t  h) V, o; ?9 K6 t
$ j& ^9 M' a( L) g" E6 F
    print2arm("edma3 driver init...",0);
' A2 J  q" V1 ^8 }9 X/ u% d" ^5 E- m0 [: q
        hEdma = edma3init(0,&result);
: K7 c2 @$ j) j$ q8 G' {        if(hEdma)
. {! E5 [7 s. s: G        {+ D  |+ ]3 @1 W! F- [6 Z  o0 d0 l
                print2arm("edma3init() Passed.",0);
7 U* V/ D* ^# {2 V. ]  f        }
/ ?" S1 h# D. ]0 r- D. R1 }        else
. l1 \- t) ~& e, o7 X, G& Y$ o        {/ ^4 h$ \1 J/ a1 T" n6 W
                print2arm("edma3init() Failed.",0);
) p; e: G( I1 `* I        }
! W$ ], |- ]- M' ?; P       
! `2 ?/ L7 Z) U% O" ^3 @& D" j) H        if (result == EDMA3_DRV_SOK)% O' P7 g) m( U0 T4 M9 l6 Y
    {% h! C: G, _' N( O+ o5 F/ \
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
$ Q: W/ B  F% y3 T  a                                                       (EDMA3_RM_EventQueue)0,
* F; k( \$ y2 k- G; k( A5 z                                                            &edma3_isr, NULL);
3 G" ]8 |! ^5 Y$ ^1 j- A    }6 z2 L1 P+ ]4 Q
       
# l! u$ @, z9 L/ \- {+ b        if(result == EDMA3_DRV_SOK)$ Z5 o1 @) O$ n3 r6 t6 G
        {
1 E+ \" {0 O3 g! o3 O                paramSet.srcBIdx    = 0;; s2 L/ y1 g2 S) w8 W& p" _
                paramSet.destBIdx   = 1;& [  b/ ?9 N% V& D$ h: v" w
                paramSet.srcCIdx    = 0;
- N6 ~, H. T: i( m+ q0 P                paramSet.destCIdx   = 0;
' l9 R) `' S9 B1 C5 X                paramSet.aCnt       = PING_PONG_ACNT;% v9 k2 Q9 f1 _4 T2 j: ~
                paramSet.bCnt       = PING_PONG_BCNT;6 W/ I+ L/ H* m! B- ]9 T
                paramSet.cCnt       = PING_PONG_CCNT;
: z; M5 C, H7 N% b" H! S9 @& f               
$ t( z7 n" K3 E+ s! N- b                /* For AB-synchronized transfers, BCNTRLD is not used. */
% d9 F$ {8 N0 G2 G# a! J: b                paramSet.bCntReload = PING_PONG_BCNT;
$ c+ C2 C* c  P; P; I% w/ ^
+ ?0 c) A# ~( c, V9 L' F) ^                /* Src in constant mode Dest in INCR modes */, Q2 T  k+ d2 e% H6 C4 o
                paramSet.opt &= 0xFFFFFFFDu;) L, b/ ?% ]# g  H& P
                //paramSet.opt &= 0xFFFFFFFCu;
; d8 D* W" _, A, E                7 @, G" e7 K5 q8 m" l) W6 K6 x
                /* Program the TCC */" k3 N2 k7 F; K8 `8 z7 O
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
% r( r+ G8 d  k5 F  Y9 q0 ~3 u( l/ m+ |' G
                /* Enable Intermediate & Final transfer completion interrupt */
* j$ j' Y" a1 N5 s5 v                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
4 G* [# ]; E& E' |3 x9 ]% j                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);! `0 {$ ^$ S, q! I. Q
% g3 w; U- L% o2 t4 }9 W
                /* AB Sync Transfer Mode */5 s$ X2 h& l  [
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);3 @  `! d9 w5 h
                0 [! n) t0 P. h- e
                /* Program the source and dest addresses for master DMA channel */
9 q9 o3 U7 O# M* W                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);( U- @: ^3 e. s; R" g" p6 g1 k( N5 I
                paramSet.destAddr   = (uint32_t)(ping_buffer);
* \& @. y, o  _5 R' ~( q( _8 {! ?7 R8 G1 x
                /* Write to the master DMA channel first. */
  S; @1 u) S1 n' C; L                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
( J# I. @& o+ p  A/ F    }         P0 \2 |; F' ^+ I' r

" |9 @0 G% P, }: G" c/ B" P        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);0 }9 x& o8 L* v$ C6 p% g3 `
       
4 [1 _% d% z$ f7 O    if(result == EDMA3_DRV_SOK)
( ^& R. H5 p1 p* M, i+ i    {
! |  b6 W' n+ \# e6 z' y            print2arm("edma3 driver init success.",0);
$ K# w7 S* b: s: S5 R3 R    } 4 t3 W9 d; x, k3 M' r2 Y
}
: u; C4 }. i0 n4 }3 H
5 t! W% v: p$ b* [4 \6 h9 i
0 v) B* g/ c& z0 \EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
) A# u+ j+ A8 o$ @9 d/ N
3 N( D9 F) _' w$ V) a3 L* @  S# ~; z* 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- {/ V3 |% f$ Y0 b+ S* @
每次DMA传输完成后都要再次使能传输
3 @) _  L. R4 [0 a$ F  ?; }4 w% k% [& G
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-20 13:01 , Processed in 0.041881 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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