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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:4 t9 l  _  ^: h7 M6 v- U; t4 Q6 d( L
#define  PING_PONG_ACNT          1
6 |1 z0 l: c- [, }+ t/ g$ E) u#define  PING_PONG_BCNT          8*32*40   d5 e4 ]2 ^  G* r2 E
//#define  PING_PONG_BCNT       1
% H- Q! o/ a6 f8 @7 y3 j7 u#define  PING_PONG_CCNT          15 ]% V2 R" ]/ c! t, w
#define  MCASP_BASEADDR          0x01D00000/ X+ \7 @3 v+ x, v1 r6 G
#define  Mcasp_RXEVENTQUE        (0u)( ^$ w  h1 x$ [, T9 r
) }1 r0 j, F5 b8 I
/* OPT Field specific defines *// r. z2 E+ E" }1 o
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)7 B% Q' v6 e* D9 O
#define OPT_TCC_MASK                        (0x0003F000u)% n; j4 q- D1 N- a; [* G! K$ C
#define OPT_TCC_SHIFT                       (0x0000000Cu)- s: J& H5 c2 y' X0 b
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)2 x5 I. E" u% h& Q0 F
#define OPT_TCINTEN_SHIFT                   (0x00000014u)( `. W$ @5 ^, M% Y- S
% b$ w6 `7 N0 i# W( z: A: i
char ping_buffer[PING_PONG_BCNT];6 x. F0 J7 k$ @5 i/ u1 ]# i8 n+ \3 r
char pong_buffer[PING_PONG_BCNT];
) ~8 d& y5 s6 a; G7 |7 Y; g* b" ^0 H$ k* E

/ t& o* i% b1 X/ J% U0 @6 t7 O) b6 O/ F( v: z" z8 A+ }

$ n3 D3 d( a0 t; {1 [5 n' T+ Nstatic void ys_edma3_init()
: Q( `# y1 F  N* Z{+ C+ t9 w; w* K0 Z8 w' f; v
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};6 ^' B  k/ M' H. @, j, @0 o" ]
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;  x% J% t7 }: B9 Z6 y2 d
        EDMA3_DRV_Handle hEdma;
( P7 W- [" R- l2 C- \$ U    uint32_t chId   = 0;" Q9 \# d7 T- {6 T) o( n1 g
    uint32_t tcc    = 0;
" n0 t  X  K- g% K+ ^. h3 C0 M$ e3 L' Y+ E
    print2arm("edma3 driver init...",0);$ L* i1 n% ^3 w! [

9 v$ c2 T' c8 n+ i7 R9 g        hEdma = edma3init(0,&result);5 |$ i( q- D1 C, s) i
        if(hEdma)
' X) @* b2 L: I) n7 ~        {4 D) b( P/ n, D/ z" r
                print2arm("edma3init() Passed.",0);- _% F, ^3 g2 P- N0 ?7 a% y
        }6 z/ y/ \) f0 ]9 U
        else- h+ N% n* E: A: y& Q5 r
        {
; n0 U+ M9 A( G9 h3 O. [/ T2 Q                print2arm("edma3init() Failed.",0);
& Y  X; ]: ]" r0 Q0 j8 z        }3 @9 k" A( r- z. ]; ~
       
# g7 C; p' U, w1 o        if (result == EDMA3_DRV_SOK)! y7 ~5 z& P  i0 W0 T( r4 r3 O* b# x
    {
+ x( M* X% p' y                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
0 E9 P" K, o7 }" d& h                                                       (EDMA3_RM_EventQueue)0,
, p  g+ N/ A# J, n3 ^                                                            &edma3_isr, NULL);* y" U9 Y* J; n  _6 w' E; V: |$ G) _
    }
: X1 m6 i7 }! w7 p1 @# Q       
9 h, G2 V. K6 I1 x/ [; f        if(result == EDMA3_DRV_SOK)
; l3 J) Q' |. P& v5 _- n) C* B        {
( |) ~. w+ v5 o3 f/ @- ?                paramSet.srcBIdx    = 0;
  u+ O7 C0 L# H8 {. O# M                paramSet.destBIdx   = 1;
0 s! C6 m! o  [0 W, @# v( T3 g                paramSet.srcCIdx    = 0;
% x, N* M' r3 D; M& I                paramSet.destCIdx   = 0;5 g1 [& F1 L1 b& G
                paramSet.aCnt       = PING_PONG_ACNT;
* W& _6 ?2 E( q                paramSet.bCnt       = PING_PONG_BCNT;9 p* g: g6 x+ k% }4 h5 T9 y9 U
                paramSet.cCnt       = PING_PONG_CCNT;
" M( s+ @  C' |- s, g                + ^8 ~# a# t5 V7 h( ~0 q0 i* i
                /* For AB-synchronized transfers, BCNTRLD is not used. */
6 r. X* W. F5 M6 v: W                paramSet.bCntReload = PING_PONG_BCNT;
8 G3 Q4 S& h5 X7 @3 P& X/ ]3 ~8 Z$ q/ q7 M# L
                /* Src in constant mode Dest in INCR modes */
+ Y- ~: ^: m9 d% V  V                paramSet.opt &= 0xFFFFFFFDu;
* N8 m7 s, k* d! k- g                //paramSet.opt &= 0xFFFFFFFCu;
" W$ [: Z& c$ Q; T. l. d7 Q               
( {3 u2 n$ E( N( Q+ W                /* Program the TCC */
2 y/ j2 f% W0 s6 A: [. B2 ^, k                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);. Q( q: j, @& W) q+ |

/ Y  f2 Q4 ]" {2 l$ H                /* Enable Intermediate & Final transfer completion interrupt */
7 O6 B$ ?" U1 v& I" d: a                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
! K! I% _8 g  l, t# ^2 n                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);$ t# T8 F4 O% P: R9 V

1 A3 N! E. A  a; h                /* AB Sync Transfer Mode */  p2 ~" Q( q2 J" n/ w) N
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);# \4 i4 G1 P  q4 M5 y
               
9 v* w/ d0 l% `2 m, j                /* Program the source and dest addresses for master DMA channel */
6 j+ n+ ]3 B' d2 j2 h$ C                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);$ K; |; X& `( d% h+ Z& W
                paramSet.destAddr   = (uint32_t)(ping_buffer);
* h6 i! g9 q3 J7 T) l
0 |6 ?* ]: s! h                /* Write to the master DMA channel first. */; m0 J/ f6 _. P4 v6 }$ W
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
5 N3 Y+ r$ W% b    }       ( C, M# V% g$ E" f4 _

- x% `) W0 S& |- T. k. l# w3 {        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);$ f/ s2 k0 @) U! S" Q
       
/ g. U; B; U, H6 i5 X2 ]    if(result == EDMA3_DRV_SOK)
" H+ s- }2 A6 C% T, }& w    {0 B; ], }3 `* _3 }
            print2arm("edma3 driver init success.",0);" y  B& N) g! T! {
    }
* x% T0 @  R8 e* s1 L- i- l}1 `( o6 U2 ~' J5 n/ f2 F

5 t  C, F7 v. U# I! c/ k1 U4 H( r7 g/ ^: k  O2 q
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。- H! J. e1 n$ C1 X- N6 ?  K( U

, A6 T. P' E7 K! U" d: {( p2 [7 _& f2 _& I+ K. c- F
分享到:  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
" m, P. e' D, D! n5 p2 h. `每次DMA传输完成后都要再次使能传输

  w% h: M) l4 w( P8 g, u原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-19 00:52 , Processed in 0.041947 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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