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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:  K4 o" T7 R# _/ U7 v& b
#define  PING_PONG_ACNT          1( b  f/ x4 G) U) }7 ~* c3 T( e  @9 j
#define  PING_PONG_BCNT          8*32*40
$ v% S+ v! P6 z: c//#define  PING_PONG_BCNT       1
) Y9 g$ m4 _1 Y$ }  d7 ~#define  PING_PONG_CCNT          1
0 a" k' j$ h1 e( C5 n#define  MCASP_BASEADDR          0x01D00000' F  v/ ^, H5 v2 w6 \# w
#define  Mcasp_RXEVENTQUE        (0u): l, E: U( c( \' \  l
* N+ z( E# v, \7 u2 P& E  v, j
/* OPT Field specific defines */
. \' w. T1 L) L3 D; d9 w& U6 s#define OPT_SYNCDIM_SHIFT                   (0x00000002u)/ f& i6 l# B7 Y4 R
#define OPT_TCC_MASK                        (0x0003F000u)5 a! \. w' ~/ |8 b1 d
#define OPT_TCC_SHIFT                       (0x0000000Cu)
1 g* O3 ?' G6 p+ _3 a* G$ z#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
: n6 f2 M, U) v9 X- L#define OPT_TCINTEN_SHIFT                   (0x00000014u), x( e# {, ]8 p, T  \

4 [1 U% Q7 {3 zchar ping_buffer[PING_PONG_BCNT];
6 W; q% ]+ f5 ^6 H' s% E" _char pong_buffer[PING_PONG_BCNT];
' i' E/ X+ S7 ~. p
/ s" Q% v, S3 \6 e, e5 n
# G5 v! Z( u# f0 T8 i& ]$ A
$ M9 w$ ^6 v3 D7 }( H' U, I' [9 M$ c2 z
static void ys_edma3_init()
" C( ]0 ]! {: R" p% m5 ?3 R{+ p$ f2 s2 ?! N3 M! d
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};% Y4 E9 B4 B6 r) T& g1 }8 ^
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
+ z0 @5 V( r! r4 G% X$ `- Z        EDMA3_DRV_Handle hEdma;7 W2 D& ~( d3 `0 J
    uint32_t chId   = 0;+ ^% ?7 m0 w1 C$ U
    uint32_t tcc    = 0;
# L/ E$ n1 C+ ]
& n. ~6 e* _8 ?- p+ I1 E9 H    print2arm("edma3 driver init...",0);3 T/ l4 e8 w# J8 [* F8 Y0 p
2 B5 D3 K9 {9 d7 N" |* }% L- u
        hEdma = edma3init(0,&result);8 F1 ^7 D; D9 m
        if(hEdma)' k7 P' d5 M3 T- I( u# m7 z
        {' S' N$ h1 E6 j. g. `
                print2arm("edma3init() Passed.",0);
# Q) X* m9 W# k        }8 k9 K! s+ Y1 e2 [2 d3 n) g
        else; }* R$ A9 B7 J! e1 }
        {
5 [+ c" H( O) V% z1 N( f  K                print2arm("edma3init() Failed.",0);
; _# Z8 `6 z5 f. R7 O, o$ l        }1 j; k$ h+ N- Z3 Z% g- a' A
       
8 O, |7 |5 G$ |! [3 x& ^2 O" A        if (result == EDMA3_DRV_SOK)/ F- X  ~% {1 F% {4 R& t1 P
    {
5 G, ^0 `- I$ v( u                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
# Z9 v: x; C: e8 b" y$ S  P                                                       (EDMA3_RM_EventQueue)0,+ W( d, b1 q* ^; F0 b
                                                            &edma3_isr, NULL);
+ ]: i1 t4 S# J* X7 }0 T3 }    }
2 [1 U( t. b7 A0 a( E        0 S/ r/ S9 b8 O+ B( N4 |5 ]' i, x6 ^
        if(result == EDMA3_DRV_SOK)# q4 f: \" A  g
        {8 {' }+ x9 G  }+ A
                paramSet.srcBIdx    = 0;
7 V/ {- _! V" s- a- k                paramSet.destBIdx   = 1;
, @% r  k. J. i- |4 l* r/ E+ h& B                paramSet.srcCIdx    = 0;
/ i7 g% K8 N4 J* Q                paramSet.destCIdx   = 0;4 x5 `: z  L& a' T8 j7 P2 a
                paramSet.aCnt       = PING_PONG_ACNT;
; h5 Q, v: A! z6 f. ~                paramSet.bCnt       = PING_PONG_BCNT;7 d  O- ?; S( P5 R$ m; U
                paramSet.cCnt       = PING_PONG_CCNT;+ u  v7 w4 x; [8 s7 H( C8 |! n
                . n! H9 i8 [9 q* Z
                /* For AB-synchronized transfers, BCNTRLD is not used. */- u$ Q! P. |2 T0 A) b
                paramSet.bCntReload = PING_PONG_BCNT;& t% \9 y; \3 B

+ B+ g3 Z% d) X4 [3 ~: |                /* Src in constant mode Dest in INCR modes */: e' b$ ?/ W1 Z- S: x
                paramSet.opt &= 0xFFFFFFFDu;
) K0 k1 Q6 f4 y3 `( |* P8 M: s                //paramSet.opt &= 0xFFFFFFFCu;
5 ^1 R! z0 P" [# m( u7 P% J                8 X9 F0 f5 L5 p( h) N
                /* Program the TCC */
6 d- Q: ~! ~: y3 u                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);. K; H6 ^+ Z5 y3 Y. x7 h
5 o0 d7 S( U9 n
                /* Enable Intermediate & Final transfer completion interrupt */  Y) ?2 u; J  r- E
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
! L- r2 Y7 I+ c! l4 i                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
3 Q7 D9 J5 ~& K3 H. k
6 E5 Y" e8 y0 f2 }: |                /* AB Sync Transfer Mode */
, V+ A( o6 e/ e8 [) q                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
4 P0 i; W" y9 W  r$ r) B, i) M                : N+ j8 u/ j, u. M
                /* Program the source and dest addresses for master DMA channel */. y8 m2 p  ?: y% G
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
, R5 V' M6 k2 \) B2 \: m3 ~                paramSet.destAddr   = (uint32_t)(ping_buffer);9 j8 L* D, _8 f, Z. D3 f2 A

3 f9 x/ l" H- }, }/ N0 w4 |                /* Write to the master DMA channel first. */
% S4 [9 Z% n8 w                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);1 U+ k1 b! b3 [2 I% q
    }      
$ l9 o/ N. {. a* o' a. Z3 q. k4 Z4 f. y3 d; B
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);# @3 R3 J7 z. R5 Y2 [! h; `
        , D  }8 Y7 U" ?+ z) {
    if(result == EDMA3_DRV_SOK) 2 V/ @) @9 L0 ^- a+ y; l
    {
. J2 R, s; N$ x0 l            print2arm("edma3 driver init success.",0);
# q- q8 d3 ?3 p5 F/ ^9 t    }
' w& ]  J+ ]! v# T+ T  I& `}7 |: B/ G! p" p# p9 R( _4 a9 A

; {, \" S4 n' ^4 ~, ~* h- Q, w# |
! }5 K* N$ Z. v- l7 N9 J- g6 o4 lEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
1 a! M& |" R* W( J5 ~7 d4 a% Y4 T0 l) i# p) ?7 ~* w+ X
* m' a/ q5 n2 L& [: k5 Z$ 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:47
8 v; b# D: X. o4 J' C/ q( w$ Y每次DMA传输完成后都要再次使能传输

2 O' `2 U3 x1 k2 i; P# `5 a5 q原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-16 21:57 , Processed in 0.038644 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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