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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:: P- a8 `+ _% w) Z' Z
#define  PING_PONG_ACNT          1$ g6 h- z, B; k* @. e2 q1 b) }
#define  PING_PONG_BCNT          8*32*40
- s2 w1 V+ k$ s//#define  PING_PONG_BCNT       1
2 A# `, \3 t4 y2 O' r#define  PING_PONG_CCNT          13 B. U; P* v! R3 L) R
#define  MCASP_BASEADDR          0x01D000006 W. y/ k4 T/ j/ T
#define  Mcasp_RXEVENTQUE        (0u)
) n9 [" X2 |9 A( @- {# j; S* \  }- A) c/ i; |+ A) F, X" C
/* OPT Field specific defines *// G  j3 i/ \  Y
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)$ u2 J3 `7 x) T6 ?% U& b: B
#define OPT_TCC_MASK                        (0x0003F000u)6 x1 B9 \% M/ {1 L. ^( E  J
#define OPT_TCC_SHIFT                       (0x0000000Cu)
' X4 `4 M- T8 p) T# X#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
) w2 {, p- y" {& X/ D& K2 @5 K#define OPT_TCINTEN_SHIFT                   (0x00000014u)
9 M9 _6 a4 B1 n1 t( `+ x8 B$ O3 F% @( V9 @9 M* C9 ^
char ping_buffer[PING_PONG_BCNT];$ C8 n3 u) Z* B4 y% m5 h  }% M
char pong_buffer[PING_PONG_BCNT];8 _+ d3 Z3 ~0 B( v0 r( [
" b3 T$ e' N2 T" M' Y5 k2 N
  E+ q0 `: S$ X9 \
. f  W! `8 @. o4 V" k& n# R) w
; b0 H8 z3 K7 U  O" a( q
static void ys_edma3_init()
0 B; r. k7 n/ C{# T" Z4 U- c/ o  T" `/ W9 ?" R& e/ E
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
; s7 F5 [9 |7 L* \        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
# N$ R8 v7 T! I- K# D8 t: i        EDMA3_DRV_Handle hEdma;
/ E7 N* L- m- V' L# H    uint32_t chId   = 0;% o' f3 {- F# [: c+ u/ H
    uint32_t tcc    = 0;
% \4 z7 V3 I2 E2 |6 _9 U; t6 k6 y
    print2arm("edma3 driver init...",0);) }' u$ C0 ^9 p2 [
# H7 ~0 x: W7 g' u6 O3 B5 K" e/ d% P
        hEdma = edma3init(0,&result);
/ a2 Z* l# @/ V6 G        if(hEdma)9 c/ F% V6 z  h- s1 y, c# `
        {
- y' n+ w# a+ i( b! O                print2arm("edma3init() Passed.",0);: R0 `2 r) F% G; `& Y, D' _
        }
8 z3 @5 X4 t& l        else% h# j, q( U2 [" y: p! |7 y0 h2 g
        {0 v* y# A6 o( E/ _% E
                print2arm("edma3init() Failed.",0);+ E5 M) Q3 E7 l
        }
& D0 A& G1 C3 H+ X. j7 n       
3 U1 q( H: H  _' L' J2 ]& w& t: ?$ z        if (result == EDMA3_DRV_SOK)- F2 ?' ]3 X: c7 q9 V: K
    {
" G+ {/ X2 y' a. ?                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
! S. T: J& D# Y+ X4 Z5 u) H% p" m                                                       (EDMA3_RM_EventQueue)0,
3 Y* W% Y& @4 Z# X/ G" X7 V$ [                                                            &edma3_isr, NULL);
1 v% ^! ~1 G  Z% q& q- Q    }
* A* }. V5 o8 A! R: B       
. s2 Y8 H4 A3 @1 P        if(result == EDMA3_DRV_SOK)
- }; j5 z" |2 V" \, g6 }6 Y        {
7 M9 B9 N: F) p4 s  a5 Y                paramSet.srcBIdx    = 0;
" [0 h/ B" \. b5 f4 F; u! z1 Y                paramSet.destBIdx   = 1;" H; |$ v8 O8 K3 }+ P3 a& }
                paramSet.srcCIdx    = 0;/ C( @# O. l7 f3 U! M+ D  X
                paramSet.destCIdx   = 0;: k( Z2 a3 t) F! p3 v1 K; E9 a! d
                paramSet.aCnt       = PING_PONG_ACNT;
: N3 ]; Q/ K! P                paramSet.bCnt       = PING_PONG_BCNT;
4 b8 t' e) C1 S' N                paramSet.cCnt       = PING_PONG_CCNT;7 Y% X7 ~! Y( s# W, H2 g, [: _
               
* d( q+ y7 M( t  s                /* For AB-synchronized transfers, BCNTRLD is not used. */  ^2 C( b3 ~! a1 u4 ^, A$ @
                paramSet.bCntReload = PING_PONG_BCNT;. v4 Y) S6 H5 ~9 ^
/ Y9 v0 \  A* S" u
                /* Src in constant mode Dest in INCR modes */$ `* L: R5 s/ M0 ?- S
                paramSet.opt &= 0xFFFFFFFDu;$ z. A- y2 S9 \4 [, z$ q( N( m6 t8 J
                //paramSet.opt &= 0xFFFFFFFCu;: m4 H9 |0 x& @5 c0 ~
               
7 x0 j# X$ N1 e) R& m2 A                /* Program the TCC */6 B( t5 `$ Z: @$ z8 v0 ^
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
" Z# \8 Y& ^1 C# n4 V: g
" Y: W1 @# ]! S                /* Enable Intermediate & Final transfer completion interrupt */' e# y' ]/ L5 h/ i$ E5 o0 X
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);' f; V+ f' _, o+ @- f0 T
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
( e4 c/ @: s/ l. t! r4 ^% n( w  U
/ l- f! w: Y! e" U% S8 \! t  P; ]                /* AB Sync Transfer Mode */1 V& r% x2 R' h3 D+ _) I9 m' w
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
# c  K% k" R8 H  K9 @# ^0 R) h4 A. s/ @                * ^$ H% H) O( h- @
                /* Program the source and dest addresses for master DMA channel */: P2 @! ]9 ~7 p; p' T3 w
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);  A, `2 L- E: v8 ^" y
                paramSet.destAddr   = (uint32_t)(ping_buffer);1 V0 w( b) o5 N$ y- w  |) I) O

( r9 n" L" U" A                /* Write to the master DMA channel first. */& D1 k8 W& m1 K) v0 [0 H) R
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);% y+ U* B0 C7 ?3 _8 Y) P  ^
    }       - Q8 z, R% l4 G5 l! s# ~

* |2 q; q' k: b7 G        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);# |+ k  l/ x* _& e7 }, w
       
; P7 ?7 H% }" G1 S    if(result == EDMA3_DRV_SOK)
1 O. A9 E) k% H) i! u0 }1 v6 }    {4 ?2 s/ o# t' J6 Z$ ]
            print2arm("edma3 driver init success.",0);
& q+ O- E! o! z) r* c9 a3 M6 ?, A/ E    }
8 z6 {: D3 ?2 u4 G1 l4 }( Y8 Y* n}
5 C2 P! B" H. [7 b
; g0 X8 b  g7 H; m- L& E( B2 Y* g  Z4 P" u* `
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。* h. u" X" h7 E: ^& H! E( g

2 ~! Z5 M% P1 U! X- V" J/ U4 Y* e8 K) i; D8 Q7 [
分享到:  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
" P2 U# m4 f" x, k每次DMA传输完成后都要再次使能传输
& h* p0 ]' v! d( ?3 ~
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-23 09:38 , Processed in 0.037849 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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