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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:. U2 W. Z! D4 v3 L1 \* Y
#define  PING_PONG_ACNT          1# o1 Z  G; u7 d. b
#define  PING_PONG_BCNT          8*32*40 ; e" [1 u3 e9 o  y7 r4 N4 _
//#define  PING_PONG_BCNT       1
' E7 o$ B( G; A8 v8 B#define  PING_PONG_CCNT          1! q+ a  w4 W4 g( N5 H* h" ^( f' q
#define  MCASP_BASEADDR          0x01D00000
, d7 D) {6 t- _- _. L( F% s#define  Mcasp_RXEVENTQUE        (0u)- @( Q: \! X' k2 j7 M+ ]# C
- y6 v3 w' q+ q  p
/* OPT Field specific defines */
0 l- X/ I( `8 ^" d: o#define OPT_SYNCDIM_SHIFT                   (0x00000002u)- O) ?: j8 Q- f) N$ H$ p& j. F
#define OPT_TCC_MASK                        (0x0003F000u)- I# B. `+ B7 p+ N( k7 z: a
#define OPT_TCC_SHIFT                       (0x0000000Cu)+ }* S; m9 T$ q: ]; E' V! u
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)" t  Q- G% ]7 L
#define OPT_TCINTEN_SHIFT                   (0x00000014u)' s; v  H: J- e' l3 Q
" ?, ?6 M% G) Y# L, \3 V( s; V$ h
char ping_buffer[PING_PONG_BCNT];
: X  v/ P9 W  P) L& tchar pong_buffer[PING_PONG_BCNT];
- q9 G  m/ ^5 R1 }5 A
5 q. K: X7 g: D
6 t; S. K. d9 f/ }$ R9 |3 N0 W9 \% N# a2 s( o
" U. X: t0 W, J" Q
static void ys_edma3_init()' A; J$ U* g7 i: X
{
- Z1 c& N/ y6 ~  d4 g        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};, G$ v$ q2 f$ J; W1 V- l
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;) d8 L3 n' \* A. n! Y+ k, y0 b
        EDMA3_DRV_Handle hEdma;
$ [( y# D2 H$ [  B) m% p    uint32_t chId   = 0;6 |# R% K4 y: n3 L0 X5 c
    uint32_t tcc    = 0;5 W! u: z  Z2 o( W& ]$ i: b/ h
5 I; D$ B; [' X
    print2arm("edma3 driver init...",0);
/ n6 P- Z  N# e! J7 G
% f3 X/ `% }; g0 [0 @        hEdma = edma3init(0,&result);
4 u7 F) A0 h, S% P& m9 k- p; @+ W        if(hEdma)
0 i2 z! _  o  [% V' W- x( \* \* F        {* a8 A8 Y: R1 g( y) _
                print2arm("edma3init() Passed.",0);& Z, Q; B% x( S$ k
        }) t* r4 N4 N8 x: _  o
        else8 H# y/ v% H, C" S9 I
        {$ i" E! L& l7 J& t3 ~
                print2arm("edma3init() Failed.",0);
! l( a; Y4 F5 C* v$ l; G8 R" m        }& R0 X8 s" m8 X/ y
       
" _' a2 J. K8 [, h+ |* P. f        if (result == EDMA3_DRV_SOK)
. _  C2 W* J- e! e9 m    {
( u0 X+ R- W( Z8 r7 w( f+ P0 U: T7 u                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,$ _, Z+ L) g; `
                                                       (EDMA3_RM_EventQueue)0,7 e# H4 A7 t3 z! S- Z3 B/ ~
                                                            &edma3_isr, NULL);5 C$ x% R8 S$ c) O* t1 s9 P; u/ F- _
    }
1 a+ E; \' f$ R3 W       
) Q! L% D) {7 [$ Q7 q        if(result == EDMA3_DRV_SOK), F6 M: k) B' T! Z2 y/ z
        {# m  @) X; P/ U' f6 p# u: |4 Y) Y- l
                paramSet.srcBIdx    = 0;3 `2 q# l) p+ G# x5 g; K" p/ t
                paramSet.destBIdx   = 1;
7 E  o( i0 v* G  J' ]( y0 K3 P* z                paramSet.srcCIdx    = 0;( Z; V( `4 v1 i" s# m+ {
                paramSet.destCIdx   = 0;  ^( `' S7 w. p, i! t4 B' N
                paramSet.aCnt       = PING_PONG_ACNT;' d  b8 D2 S$ B2 K9 o9 R4 ]" q
                paramSet.bCnt       = PING_PONG_BCNT;
( e& w6 q4 @/ |' v, a4 N                paramSet.cCnt       = PING_PONG_CCNT;& T7 g; i+ R6 B1 f
                1 K/ [  f9 X* \' Q6 Q
                /* For AB-synchronized transfers, BCNTRLD is not used. */4 T$ J# u2 t, ^) R8 f  y
                paramSet.bCntReload = PING_PONG_BCNT;5 e0 `$ \' I. P# U! r4 L6 z
1 F+ f6 G, j+ ~
                /* Src in constant mode Dest in INCR modes *// `+ I4 M0 m) H
                paramSet.opt &= 0xFFFFFFFDu;
) F/ N$ P/ s3 w                //paramSet.opt &= 0xFFFFFFFCu;
% f  X0 K# q3 N( W0 D  [$ s* e- E8 f                3 c5 `& T( _0 K* d
                /* Program the TCC */5 h6 g4 q3 k1 i
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
) t' e% X+ f# b
+ T3 b; U: ^! G/ s" c- n% ^/ x                /* Enable Intermediate & Final transfer completion interrupt */
3 V' p% Z% t0 E$ b3 A9 Z! S                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
6 U9 F4 C8 y3 [" B6 K" C# J+ n                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);. G9 f# w6 z  ~9 `

: }) s0 m( l4 M6 X                /* AB Sync Transfer Mode */0 V# E& @- S* |& F  j: p, ?
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);) u4 B6 D8 S( Q# w" o; A
               
* G0 F& Y) _2 @9 q                /* Program the source and dest addresses for master DMA channel */5 b; |/ A, ^5 K9 _" [7 v4 T8 ^- v, J
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
; k% q8 f  S9 a                paramSet.destAddr   = (uint32_t)(ping_buffer);2 G* S; p7 Q: D# x$ w$ R) d
. `, V. q* |7 u- R4 E
                /* Write to the master DMA channel first. */3 U" b6 |# \+ C% s: F8 e- N5 V
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);& B6 z5 ~% t: Y, `) Y8 X* R1 R
    }      
* `% w5 v- }6 n0 T/ U, V1 E, ~5 v+ o! Z# [4 r3 N% ~2 a4 O
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);: o8 Y  |& m* `1 d
       
/ k' x" r0 ^9 l4 I' H    if(result == EDMA3_DRV_SOK)
) a! D$ L) z5 X& \) T$ [    {
0 x2 g( i# [0 b8 L            print2arm("edma3 driver init success.",0);
# O% ^- w1 o' I) _# k    }
2 I% G( M3 o$ R3 d& H}
$ P9 f3 V, K, @; |, o' U
2 g% G) e; x! m& o9 X
+ @5 Y/ h+ H9 W8 ^0 R: vEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
% g; j# v/ X7 r! i8 `7 D& p, y: @1 J% S
5 `+ h5 o) |9 I8 V
分享到:  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
% K; G! i0 [( d每次DMA传输完成后都要再次使能传输

4 u8 j& w6 _0 Q1 m5 x  }- l! u0 ^原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 00:43 , Processed in 0.037356 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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