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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:8 w1 o$ c; u, E" l" Y- N
#define  PING_PONG_ACNT          1& X3 W2 p2 B, {5 D) L0 ?
#define  PING_PONG_BCNT          8*32*40 * S% u" ?: |) ~7 s7 X: R
//#define  PING_PONG_BCNT       1   q* o' D  {- [/ A- v2 L
#define  PING_PONG_CCNT          1
" C  I- Z. |5 k/ f: L; R0 [#define  MCASP_BASEADDR          0x01D00000) u- u1 t7 v% I# J3 Q3 G
#define  Mcasp_RXEVENTQUE        (0u); a& M8 J+ h0 s3 S6 ~1 G

5 }& R+ S' O5 A) a1 a/* OPT Field specific defines */& y  L& g' k& [" d+ t
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
) d% _5 z( s' w. G#define OPT_TCC_MASK                        (0x0003F000u)
# k- k4 F' G0 h: n#define OPT_TCC_SHIFT                       (0x0000000Cu)
" Z8 r* u) S" L) k0 _#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
/ k  g* v" J8 b$ ^#define OPT_TCINTEN_SHIFT                   (0x00000014u)
% o0 ]5 [6 V! s4 f5 L5 `; j- M7 U* W
char ping_buffer[PING_PONG_BCNT];
' S' a+ P( P2 L) ochar pong_buffer[PING_PONG_BCNT];
' n; U$ ]% r8 ]1 Z; b3 u- `- _: e3 y

: m; `: K0 D2 m% W- o; I  W8 J0 [$ X- ~* |% o. Y; t, Z

" s0 i* P0 d7 Z1 }* ^* K4 _2 Sstatic void ys_edma3_init()
# n! T6 `9 G0 \" k7 _( t0 @{
. w7 x2 h+ D2 U2 H! J        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};: V3 D# S: \- ]7 a+ _4 B
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
/ @* E# Q& W& n9 \2 |6 v& U        EDMA3_DRV_Handle hEdma;1 V5 l" \7 |5 S$ d. O
    uint32_t chId   = 0;
$ \, S: `4 P+ o6 [, W8 ]    uint32_t tcc    = 0;) o# V& `- [; R$ L9 A8 ~
7 L* Z  b! G% f# q- R& m1 |4 \
    print2arm("edma3 driver init...",0);- n4 z& ]( G+ \- }8 @
2 T; f+ k; p& [6 u( S& u
        hEdma = edma3init(0,&result);! `8 o4 t  R7 c; d3 h, a1 Z
        if(hEdma)
+ C& F# j2 `* b3 |7 U        {" h" f9 p5 s  Z* M1 u$ T. {
                print2arm("edma3init() Passed.",0);
7 ]2 W$ b9 v$ j4 Z* x) o, M        }% r1 Y  g7 R+ `  X3 v; i- M4 @
        else' g( I3 L: W. l( V# \- P- Y
        {) C# I- u2 O$ E6 h1 n
                print2arm("edma3init() Failed.",0);
" A3 j  |; e" A3 A6 }% m  v        }
+ g: Y4 `: i) H. B' b1 X0 K       
; B/ _( N8 g' Y  \) r9 x. d        if (result == EDMA3_DRV_SOK)4 m) R- O. d0 N8 |6 d; _, b6 s4 Y
    {- w! ~0 }) e; `5 O2 a
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,2 X3 M0 @" {0 f  j3 G/ c% D
                                                       (EDMA3_RM_EventQueue)0,
. Q5 h* [# V$ o+ K; N' J                                                            &edma3_isr, NULL);
* i% c! N7 ~6 r" o8 I: l    }8 I4 r" ~# R- N+ `
       
4 c' h8 F1 B" r8 f1 l        if(result == EDMA3_DRV_SOK)  i8 P9 B% ]( `$ r' M* n
        {/ I) d2 I, A' L5 |' P5 o8 c( N1 }
                paramSet.srcBIdx    = 0;' D' G5 y  c3 R& k, m8 R! q: A
                paramSet.destBIdx   = 1;
2 D/ n# I: s8 j                paramSet.srcCIdx    = 0;. P6 h) V+ H( A. |
                paramSet.destCIdx   = 0;! M- E7 j0 X( j: X: l& w% g
                paramSet.aCnt       = PING_PONG_ACNT;# F" \4 U2 K2 b' @" |$ e
                paramSet.bCnt       = PING_PONG_BCNT;6 t% G1 K1 X7 R. c: n1 X7 f; m
                paramSet.cCnt       = PING_PONG_CCNT;
3 \+ s) T4 u9 n$ e( l) Q  p  G4 V               
9 W( J3 d, f0 u( E1 f                /* For AB-synchronized transfers, BCNTRLD is not used. */, j8 H; D  q0 O$ J
                paramSet.bCntReload = PING_PONG_BCNT;, r# c. p- _/ v/ p& E4 s& B6 p

& X. j+ V+ q8 J; R# O2 a, o. G                /* Src in constant mode Dest in INCR modes */1 [( M9 z8 R( a6 R& ?# K
                paramSet.opt &= 0xFFFFFFFDu;* T. U3 s3 N" P4 o
                //paramSet.opt &= 0xFFFFFFFCu;
2 ~& z( H% P/ M! ]                . {; i3 y2 ?, x3 q
                /* Program the TCC */7 p1 h# U3 ^) O) ]  P0 S8 L& y3 O" l
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);1 [% p, A! r( X, k! U8 A

( {2 E7 T* M6 b1 E' _' l+ p5 M: C                /* Enable Intermediate & Final transfer completion interrupt *// G% Y6 M! _9 R. b
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
* J  {  i: x& h) o) q                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);9 V: [. y4 v0 W6 F( o. M
5 I( h8 t5 f! s
                /* AB Sync Transfer Mode */
1 y$ o3 k( z) |* ?  L( f5 `6 R* j                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);& M2 A! f& M% `  K, s% q: l$ I
               
8 E2 J( ^( R9 a                /* Program the source and dest addresses for master DMA channel */
. Z( f+ o6 `4 O4 w  j                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);+ }! J6 A, Q( L$ v" F
                paramSet.destAddr   = (uint32_t)(ping_buffer);
9 s+ }: u: }# x9 u- ^$ A( g6 n: k7 C2 G
                /* Write to the master DMA channel first. */& W: G0 M5 S( D
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);8 E/ c2 F5 F2 D! v9 J
    }       ! b  `+ w$ d- }( U5 E

: n% Q, @: I+ [0 `" \3 A        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);2 J  }- U! S1 ^, b2 d9 m
       
5 H% ?! S* E" x* i  L% M4 {    if(result == EDMA3_DRV_SOK) + A! f1 A' r/ x+ a
    {
1 n+ G( K* m/ B, A1 F0 u            print2arm("edma3 driver init success.",0);* {. B0 a6 h, F3 B: T! c, t
    } ' u3 d0 m( x! c. B
}
9 _0 n% W7 h1 n3 M( R0 [. c
7 y5 ?- f. d6 t" x1 }7 h" l7 C
8 e1 O. Y" s! `- [/ o7 w5 {& v6 SEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。2 M4 d  e  l1 U2 I# p

/ H$ d+ u. X3 L: W! f7 v5 b; n+ }) W5 K7 [: o, P
分享到:  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
+ _# Y' t  f2 K# y* X' T; Q每次DMA传输完成后都要再次使能传输

) S# \% D7 q* v原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-18 15:08 , Processed in 0.039575 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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