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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
8 W) s- Q0 a7 l) j  q+ `#define  PING_PONG_ACNT          1
) o/ m1 D4 M6 \" j. s#define  PING_PONG_BCNT          8*32*40
, V! v" X7 I( i4 g5 m) n" [//#define  PING_PONG_BCNT       1
6 I/ r$ i7 ~7 y/ C2 y! o' s#define  PING_PONG_CCNT          18 r- b1 q: X7 t
#define  MCASP_BASEADDR          0x01D00000' \4 W; V/ o1 i9 `
#define  Mcasp_RXEVENTQUE        (0u)! M9 A$ s0 M* C/ B6 _( V4 Y

  D5 \( |1 |% N- u0 N/* OPT Field specific defines *// M% `0 b& {& S) H0 O
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
, k  q6 {4 M2 v, d4 k. C2 ]#define OPT_TCC_MASK                        (0x0003F000u)
' S& ?# }: s) Z# J! y' c9 o#define OPT_TCC_SHIFT                       (0x0000000Cu)
) o2 J: @- P& e7 T3 k" M3 r#define OPT_ITCINTEN_SHIFT                  (0x00000015u)9 I0 L$ a& ?; j+ R
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
( M1 D9 @: w& }5 V+ l; M9 [
8 I6 r8 M6 ~' |" w8 vchar ping_buffer[PING_PONG_BCNT];
( ~0 r& g" G3 q/ E- j. g, Zchar pong_buffer[PING_PONG_BCNT];
* {* ^( @3 w$ Y+ N; U3 x2 o1 m& L& i
5 f$ m; C0 `" L- \

8 ^5 w* g! f6 _1 o. f, D: a) o4 J  l3 F  A% N# c9 e
static void ys_edma3_init()4 Z" U1 X9 K2 y
{  ~$ f% N5 i9 w+ @0 f: k4 l8 f( H
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};3 n, B7 L# B* o* |9 }, A1 z
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;: n0 N: |1 ?4 X) ~) _9 q) l6 C
        EDMA3_DRV_Handle hEdma;
/ c( Y4 j5 ]% E0 J0 t    uint32_t chId   = 0;
1 D# p: |$ j  W: r  u* K    uint32_t tcc    = 0;' d( k4 L7 `$ R& O& ]
& ~0 v* ]( j8 B3 `: B$ r3 @
    print2arm("edma3 driver init...",0);
5 C+ ]6 s, ^8 l( D4 {
. d0 H5 u5 F- ]) N3 I        hEdma = edma3init(0,&result);
# D1 r. t, r  P8 U7 V6 W" D        if(hEdma)
( Z: r2 _; X! f( e6 x7 A        {0 K( b% s3 N/ I" P, E
                print2arm("edma3init() Passed.",0);
/ N: f* j2 R& V  R$ s2 o$ r+ J( r        }* G2 X% f+ Q/ x4 y
        else. I+ }5 Y/ A+ u# Y! i% z$ E9 v& [: D$ n+ W) o
        {5 U4 T: z4 O7 @2 c4 A) u6 I) B: J
                print2arm("edma3init() Failed.",0);
- I0 O# O  `3 I+ A/ U        }+ ]  p, @5 p" l
        $ F3 L! o, z+ n1 `
        if (result == EDMA3_DRV_SOK)
) U) p- k/ l/ Z    {
2 j' T; O3 w% k! V) ]                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,, w5 [( `: o, o  A: l5 G1 m$ k5 m$ u
                                                       (EDMA3_RM_EventQueue)0,
( m5 q. X6 l) `8 k" ?# z                                                            &edma3_isr, NULL);9 w% y+ X! d% o3 z! X9 A) W
    }
1 t4 g( o2 X% H* _  O! \        % q' C5 U. t, j3 L2 w* y8 z
        if(result == EDMA3_DRV_SOK)3 u6 A, s2 M1 o
        {
; A- X/ F7 G8 Z* p# c                paramSet.srcBIdx    = 0;
# f* J; z2 c$ ?% c1 a, U                paramSet.destBIdx   = 1;
$ G  L- u$ ~4 }7 \3 S3 P                paramSet.srcCIdx    = 0;& M: v6 g8 T4 B, `6 `4 U
                paramSet.destCIdx   = 0;
3 P$ v$ S& ?1 _9 \% g- ?( Z                paramSet.aCnt       = PING_PONG_ACNT;5 d2 f& i9 \6 m  r3 S& X( N7 @
                paramSet.bCnt       = PING_PONG_BCNT;' b$ L, t$ [. `7 {
                paramSet.cCnt       = PING_PONG_CCNT;( N, `. T$ t; L1 l1 Y
               
- J* e# ^4 _- q' W4 J                /* For AB-synchronized transfers, BCNTRLD is not used. */- Q. |4 m! ~" W/ `
                paramSet.bCntReload = PING_PONG_BCNT;
5 \. D& L' I- J0 ?- f* h' [% {% I0 _! I3 e0 a
                /* Src in constant mode Dest in INCR modes */+ Y, W2 v, R% \- e4 F
                paramSet.opt &= 0xFFFFFFFDu;; e8 L; c% I5 k3 t2 s
                //paramSet.opt &= 0xFFFFFFFCu;
4 k2 R$ |/ A8 N                % C8 {- d( u, Q# E, @
                /* Program the TCC */: U# z, ]8 L& L
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
) s2 {9 E9 C& d8 D9 r2 v, {2 T8 d% X4 ^0 J+ l" p5 R1 ~
                /* Enable Intermediate & Final transfer completion interrupt */
1 S% T- [/ \( W5 j7 j5 G% V! B& k                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
7 x$ B; K7 P. T5 \* A" H7 K                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
# |6 z% `0 v+ l! G
9 x2 K0 C: B7 I5 u2 N  ^3 n                /* AB Sync Transfer Mode */
% S5 o$ Q9 Y: P: E                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);( Y8 i" s/ e; [2 R) C
                1 ?8 y3 e- U7 `2 d
                /* Program the source and dest addresses for master DMA channel */( i4 p, ^* I- i: A! i: |  e( b
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);: w7 c9 b5 Q: M% U2 H" G; _
                paramSet.destAddr   = (uint32_t)(ping_buffer);
  F1 l8 \$ |- m
' y) F: Q5 ?( s% [- E                /* Write to the master DMA channel first. */' C& w( w2 E9 y  ?$ [- j7 g, a
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);& B% {3 B' u- j  S7 S
    }      
) y: I6 L' A7 H. M, ?. L. w% k( T& i: Y( w
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
& `6 k# v6 K8 L( U       
  W( y7 [# v& \4 o. g1 ]    if(result == EDMA3_DRV_SOK) 2 U$ c* [$ v0 g: V: y
    {
/ I- l( M& f7 \4 u* K/ M. G            print2arm("edma3 driver init success.",0);
/ w; B4 n: j1 [* U+ G    } ' E. l2 R$ ]' R7 x. e
}6 `3 t; Q- j0 _2 o# b
( x, `( `( |( ^( o

2 i" w. r+ {  b. v) i& ~0 F0 fEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。+ k: L* n6 d/ f2 Y4 n7 U- d$ h
0 ?; [. {5 u0 N: q. Y2 A

# o; a, x4 X8 _* y
分享到:  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
& v- j' D( i8 ?! G8 q8 v每次DMA传输完成后都要再次使能传输
; R* b* p' e1 \) F; L6 }$ U, c8 o1 T3 T
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-22 11:22 , Processed in 0.042222 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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