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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:$ P1 z1 q+ K, e- c8 v$ m3 `
#define  PING_PONG_ACNT          1
0 ]% t6 C2 D, I. V#define  PING_PONG_BCNT          8*32*40
- s+ C  q  a6 }' X//#define  PING_PONG_BCNT       1
) T7 W, F8 M, U- J#define  PING_PONG_CCNT          1  R6 C2 D' r; N' ]5 Q
#define  MCASP_BASEADDR          0x01D000006 z# G3 ]) U% E
#define  Mcasp_RXEVENTQUE        (0u)% Y6 `$ N4 `  L& [" e$ V
4 l6 ^0 [$ S+ p  r4 N7 Y# h
/* OPT Field specific defines */
/ ~  W; D0 Y' E' Y2 ]% Q#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
+ l" L) p, Q+ i7 n8 t9 W#define OPT_TCC_MASK                        (0x0003F000u)
" ~: N2 ]8 m1 b. V0 V) o- N; J#define OPT_TCC_SHIFT                       (0x0000000Cu): t& g6 l7 A! m) w8 [' p
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)8 V7 p( j+ \  ^1 ^* ~8 ?
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
& T  M8 A! [2 @1 u5 b. E6 y: j9 F1 [1 M/ U
char ping_buffer[PING_PONG_BCNT];
8 D2 Y7 y! {8 @+ e% e9 pchar pong_buffer[PING_PONG_BCNT];3 H. e1 c* C6 b8 m
, z$ r/ h/ S  x! y' e: ]" c# s" O3 E2 L

: d, Y0 j/ c) L* a6 @/ i' W$ ^) c  [& \

+ [! s+ P9 a2 `2 Q7 astatic void ys_edma3_init()1 A& m- I" ^9 L3 {
{
( s- w. Z/ Q5 w' w7 G9 {# n- y$ d        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};: p* [) \8 J! M5 @
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;  s0 x( [) w1 I' @. @& N# D& l
        EDMA3_DRV_Handle hEdma;
& A) I# G% f+ R4 S    uint32_t chId   = 0;
3 x* H; C" e% u6 m    uint32_t tcc    = 0;) W! Q8 P, V6 \6 T6 a3 h9 j

2 A' _" J6 n+ C' m    print2arm("edma3 driver init...",0);/ e% B0 q+ w# t+ H

& T, t+ j' E  @6 G) Y        hEdma = edma3init(0,&result);- c) P0 ~8 y* P- m
        if(hEdma)3 n5 R6 \  ~. d8 f; U
        {
( A  h% B& W% }& ^  y" P; u: F                print2arm("edma3init() Passed.",0);3 ^( V) l* F2 n% ~- W6 u) v
        }
7 J7 U% f( k) p( ~  t5 J. `$ R        else4 O9 Y# t8 j' f
        {) F  e) O; [' W/ V: L" W
                print2arm("edma3init() Failed.",0);9 f* r2 L' ?' J
        }
6 ^0 m$ N1 o0 ], C1 ?( e6 Z- D        - j: Q4 y9 v; p; e. O, ^+ p
        if (result == EDMA3_DRV_SOK)
( e' H; G$ L, t    {
1 m. |. z* @/ a& `7 x                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,$ b2 l* `) I8 t
                                                       (EDMA3_RM_EventQueue)0,; C# M% y0 T  m$ W! ~
                                                            &edma3_isr, NULL);7 k4 T' R0 h1 n& m0 g# @
    }
6 a. {" j! `# J        ( V; h/ ]: Z8 K) ~
        if(result == EDMA3_DRV_SOK)
) A* C# M8 O, P& Y        {
, u: H0 c% p% o8 c                paramSet.srcBIdx    = 0;
# X9 J* O% Y0 k' e                paramSet.destBIdx   = 1;% F0 I$ N* f, E* m4 B
                paramSet.srcCIdx    = 0;
2 r- E1 i; i* R6 M                paramSet.destCIdx   = 0;
, l: {# h- O1 r( x# }                paramSet.aCnt       = PING_PONG_ACNT;
& k9 S& l0 ]5 y                paramSet.bCnt       = PING_PONG_BCNT;; u6 |7 U% F- ?( @$ z; S; R
                paramSet.cCnt       = PING_PONG_CCNT;% {( C" r: P+ X5 ]% h
               
; Z" Q' _4 P- A                /* For AB-synchronized transfers, BCNTRLD is not used. */7 h% f" C- V& `  m3 `- p
                paramSet.bCntReload = PING_PONG_BCNT;( I+ R/ l7 y2 ^9 ?

/ s8 a; m, `! Q( ~9 Q. O                /* Src in constant mode Dest in INCR modes */+ q" N: Q* ~/ G
                paramSet.opt &= 0xFFFFFFFDu;( S( h4 J  w0 u3 ~0 g
                //paramSet.opt &= 0xFFFFFFFCu;
% v( E" B% M1 r( h/ ], p, }                  K- q% J0 Q( G" m0 w+ D
                /* Program the TCC */
6 u7 ]% H4 W( m! N( V                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
6 V$ M! M2 E& v) h
3 k9 N7 A5 u2 g8 l$ t                /* Enable Intermediate & Final transfer completion interrupt */
) y( G+ D, x9 e: o  B/ o% M* d                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);3 U1 [6 T3 a( ?( D8 m
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);* @' {& @  m6 F5 w

4 I# B+ `' p9 m8 i1 t% H& _0 }/ }, n9 B                /* AB Sync Transfer Mode */
1 u& T/ i5 W+ a( Z9 U+ P4 i                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
: E6 f8 d8 H3 w                # \; Y+ T4 F+ E9 \. k$ i9 L+ p2 d( \! r
                /* Program the source and dest addresses for master DMA channel */
2 i2 _3 l' f4 I' J1 P$ h                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
3 ]/ f% ^6 v2 g9 |9 T                paramSet.destAddr   = (uint32_t)(ping_buffer);
' i( v1 K) e& r( l% @$ D+ d
8 e" U/ W) ]6 k                /* Write to the master DMA channel first. */' f# t; d5 X; f8 D) g  N) @
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
3 Z8 ]( Y% K% E. t5 F    }       . C& `7 \( N. I3 A4 b
* c1 I/ ^1 `8 M2 `
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
( i) l3 n! a8 ?. t       
4 }, t! d. O) ~# X! ?    if(result == EDMA3_DRV_SOK) ' _' p8 g9 Q: u0 K
    {
) e3 h; l4 s8 B4 H1 P            print2arm("edma3 driver init success.",0);
2 g) [8 R, ]' v    } 1 Y0 Y7 T; X' j7 |. O& y
}
. u* c& W: ]6 |% j& V+ H
2 r# @% ]5 C% A$ O9 }* S/ F1 A3 C" J' X! d3 y0 V/ H# _
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。4 S4 q$ i& ^6 O# Y; S" c; R
, q5 f. |- {- C) _1 N, V' F& }

5 ]/ }; B; k) q
分享到:  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:475 C: ~- R, p! d' j
每次DMA传输完成后都要再次使能传输
6 J4 F% s& G" }% ?' F  E3 [
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-30 21:08 , Processed in 0.037925 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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