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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:) w- \; L' |$ B, e5 j
#define  PING_PONG_ACNT          1/ g( H5 l  o* p6 O. L+ ~" v. e
#define  PING_PONG_BCNT          8*32*40 ( \# X% T  k3 W, S# {; U8 l/ w
//#define  PING_PONG_BCNT       1
5 X& n3 K. R& D: V#define  PING_PONG_CCNT          1
0 D" g+ \& E) y$ N4 A% {& i7 Q* K#define  MCASP_BASEADDR          0x01D00000
0 ?  Z- n% v" f1 x- V/ [#define  Mcasp_RXEVENTQUE        (0u)
- X) h- y5 L$ s$ x* J0 E( Q% l/ X5 m0 b$ N2 @
/* OPT Field specific defines */
  N7 `- R- Z7 f! R#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
2 ^3 [0 \# W: k1 n: l#define OPT_TCC_MASK                        (0x0003F000u)
+ }& W  {% d- \$ J5 F. z#define OPT_TCC_SHIFT                       (0x0000000Cu)
7 S9 i: H7 j6 D. i# C#define OPT_ITCINTEN_SHIFT                  (0x00000015u)4 y& \8 s3 _7 `4 y; M! s
#define OPT_TCINTEN_SHIFT                   (0x00000014u)" h7 B8 ~, s: @8 O# b4 m

6 R/ K; X, Y0 H3 R: ^char ping_buffer[PING_PONG_BCNT];
$ a# a4 t. \7 t6 z" Achar pong_buffer[PING_PONG_BCNT];$ L8 G/ ?; |% b  s

( x2 U) @) B7 u, a' _4 K7 m* W) R8 H( l
) m# Q% |6 D# e$ g6 W' L7 e
3 H% w2 ~0 a/ y' |
static void ys_edma3_init()2 G8 \2 G& ]( r. B" E; `4 a$ L
{
- ]% A$ f/ O! k( g        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
9 b+ L1 n3 W. H+ N9 `        EDMA3_DRV_Result result = EDMA3_DRV_SOK;6 X7 l3 W& e( {7 T
        EDMA3_DRV_Handle hEdma;
5 N8 c6 m% C3 d8 }8 u) U    uint32_t chId   = 0;
& q( n7 q9 T; k+ J- d5 H( J    uint32_t tcc    = 0;* C. X3 P$ p% Y6 d2 x1 W
6 o) U" Y2 l- f# A7 m6 s
    print2arm("edma3 driver init...",0);
( B$ W& I3 m% l2 e0 m
+ p: f5 D$ G, t+ N; F2 p- n        hEdma = edma3init(0,&result);
7 e! l+ \9 U( j        if(hEdma)& ^8 ~, F  o# H) X# r: R( t
        {7 V+ ^5 {/ Q+ p  `4 M
                print2arm("edma3init() Passed.",0);" a% X9 N6 N$ f9 ]9 L0 j
        }
+ e7 \" Z5 K9 }$ }( w# K2 b) L6 u        else
$ E: P9 o$ i0 X( U  W: T% Y        {6 O/ I8 C1 A9 D" j
                print2arm("edma3init() Failed.",0);  W4 X4 _% t  g, {7 R8 m9 w. D1 v. c
        }  Q' C' }5 t- J# V9 s% M/ b9 `
        ( ?5 r9 ~( H& `( B6 x! ]/ b5 Y
        if (result == EDMA3_DRV_SOK)' |6 e/ ]! ]8 z4 @7 S/ K
    {0 I* }( d- v  {; k
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
% J) s* u& r# @7 y: @" D/ f                                                       (EDMA3_RM_EventQueue)0,
9 w* ^5 v5 Z: }- ]                                                            &edma3_isr, NULL);
3 K, d4 c% _8 f6 d. }9 S    }* J- Z& v, q$ Y* P% ]) f: |
       
  P2 n4 s/ E/ |+ q* f# E: [        if(result == EDMA3_DRV_SOK)  @5 \& h# n- U+ o1 j
        {1 O) f+ F6 c! C! l
                paramSet.srcBIdx    = 0;5 S' K" M8 [/ p2 a# _! l0 b" A/ R
                paramSet.destBIdx   = 1;1 e) E, J3 K. I5 r& i# ]/ O! O9 W
                paramSet.srcCIdx    = 0;
5 I+ D* _' `' m+ p                paramSet.destCIdx   = 0;
) ~" l$ w3 M, [' a                paramSet.aCnt       = PING_PONG_ACNT;. K, T' f0 t6 N; E: q/ B
                paramSet.bCnt       = PING_PONG_BCNT;: x6 p- K) ]( Y' R2 N0 @
                paramSet.cCnt       = PING_PONG_CCNT;' }2 W6 K4 n; o& A% T" h5 q
               
3 t/ Y4 e% Y* L  f0 O9 M                /* For AB-synchronized transfers, BCNTRLD is not used. */
" Z! I  ]* ~# L- P9 G' C. A# e: M                paramSet.bCntReload = PING_PONG_BCNT;
/ p. r4 Q" M0 P; Y% y
# i% \: u- \$ P8 w4 e                /* Src in constant mode Dest in INCR modes */
7 j, P# B$ E" e                paramSet.opt &= 0xFFFFFFFDu;7 T/ ~" ?7 d. q$ i4 k; I9 h, A
                //paramSet.opt &= 0xFFFFFFFCu;
' {9 k) g; {- H) c                ) A. ~# F0 W$ x" t: [' e
                /* Program the TCC */. x% k  w6 Q; S* M: N
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);( J1 b8 K. ~9 |: h+ V  G
' l# _( P3 |9 }) @
                /* Enable Intermediate & Final transfer completion interrupt */4 W$ z' B% I: H* g; y
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
/ K7 z" v& I( I0 X# m% P7 q3 @7 A                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
  @$ e* s" l3 I! j& ]$ o+ F, a, |# }
                /* AB Sync Transfer Mode */1 k$ L' h! ]2 \& u
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);+ B. }0 P0 Q+ h  C
               
3 H  K: r4 [* G                /* Program the source and dest addresses for master DMA channel */. U- y8 R# e3 O, p
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
  f: @/ h4 g6 K# s* O* A                paramSet.destAddr   = (uint32_t)(ping_buffer);/ g1 f9 X* [& Z. p

  b/ D' A- R( H: X                /* Write to the master DMA channel first. */8 k& |3 }2 `5 @2 Y' y( W
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
& p# k1 |% N7 Y    }      
) v$ {1 E+ u. h1 b8 j$ q/ q4 ]: H+ @
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);1 l  k% U# _# F# w
        $ q9 L- y1 f2 V0 q$ f' R
    if(result == EDMA3_DRV_SOK)
5 U! n" m9 K: u* `5 r    {
( W& K+ J# K3 a. \& q- \& L            print2arm("edma3 driver init success.",0);/ p% x; ^3 T0 p
    }
# \" T; V- _" _; I4 V}
" d  T+ J! f* U- c' L
% {: ~4 r0 E/ ^5 p  ~7 V; Q+ M
% R4 a2 i7 ]! E4 Y' F( hEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
5 q5 V+ E4 d9 r" l) J8 E! v; U- D/ x6 t0 j$ }5 A
: j& G& X# _6 o9 ?% B/ 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& b) C  G7 N$ Q( X1 f, j
每次DMA传输完成后都要再次使能传输

6 x* p. f" I2 G+ j2 N原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-9 07:46 , Processed in 0.039570 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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