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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
, I7 w$ l  J8 |#define  PING_PONG_ACNT          1
9 @! s2 l& s3 g# X8 c$ _5 G#define  PING_PONG_BCNT          8*32*40
9 w$ H4 ~- n( c2 \. |//#define  PING_PONG_BCNT       1
* c4 S& ?4 b% x$ V7 Q#define  PING_PONG_CCNT          1
, q$ y) u+ E, |. y* [#define  MCASP_BASEADDR          0x01D00000$ |3 |( G  ?9 u
#define  Mcasp_RXEVENTQUE        (0u)
& J9 i1 A4 I* s4 N
, K+ E# r0 M9 u; u2 I. ]0 \* d/* OPT Field specific defines */. s. a: o/ \5 q  h9 z( L* ^
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)9 D% G5 R1 j2 u0 a8 p2 R
#define OPT_TCC_MASK                        (0x0003F000u)
4 Z( w8 Z: ^  e9 [8 S6 K) E#define OPT_TCC_SHIFT                       (0x0000000Cu)& T0 W9 I9 i' Q/ e
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
: m0 }8 P4 @: d( d0 x# A#define OPT_TCINTEN_SHIFT                   (0x00000014u): n. h9 g7 N. ?) U) ~  I

. w( y" J4 p& c& E$ F4 Kchar ping_buffer[PING_PONG_BCNT];5 a; X0 `: t  _/ d" \
char pong_buffer[PING_PONG_BCNT];6 s& a, F; X/ u# W9 ^2 X$ X
/ Z( x/ M8 \; V
' Q; ]- v, |) S3 t
/ s1 d0 R8 u- B& D) |1 t

: u5 ]5 J2 N% _' E& istatic void ys_edma3_init()
: p- d3 ^' Y0 ^6 z8 G, ^2 q{
* z1 S" _3 z, l        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
$ w( p, W. Q4 |. I1 E, X        EDMA3_DRV_Result result = EDMA3_DRV_SOK;0 L9 X& ~& Z/ A9 Y
        EDMA3_DRV_Handle hEdma;
/ r& y! e. A& {    uint32_t chId   = 0;
! A3 x9 ^2 N( m4 I$ f# J8 k$ Y    uint32_t tcc    = 0;1 @1 b2 L* K/ \- f1 \: m9 i! t# s9 V

: F7 ?" ^" R$ |    print2arm("edma3 driver init...",0);4 S# X: F1 D( u9 j! m

- X- _6 J* `  @6 `        hEdma = edma3init(0,&result);% C- K* J2 Y; A* Z  g
        if(hEdma)
  L6 I2 l  |8 |% @! H' [        {5 g& `% @( f/ A/ N
                print2arm("edma3init() Passed.",0);
7 ^1 r8 }: @& I6 o" F; k1 P        }. \! N& x- v0 r0 J
        else) A* i; z7 Y# g: Q' e
        {
6 c3 F4 I% k3 p! b                print2arm("edma3init() Failed.",0);1 E1 @  R; C: |; l. C- c$ t
        }3 y4 _+ F0 \* q, F! n
       
: A8 y, V2 g" H9 ~        if (result == EDMA3_DRV_SOK)  r9 e- ?9 p- n! H% u- l
    {( H  V! q# \7 t$ G$ I5 r
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,( h- x& k+ i0 ]  \! ^  w7 K# e
                                                       (EDMA3_RM_EventQueue)0,
4 V. U$ k3 E7 P* }* m" ]                                                            &edma3_isr, NULL);( t) j  _2 M2 q1 N/ B/ }
    }1 f) R# p2 `, p  U
       
9 a: ^/ ]) G6 A- g        if(result == EDMA3_DRV_SOK)
/ x* q* U4 l) f5 c& d        {- \0 f- W) K% h, ^0 ^
                paramSet.srcBIdx    = 0;
( J& S. ^1 g1 R7 U$ H- d                paramSet.destBIdx   = 1;
6 r) t# e2 W3 v* U- n                paramSet.srcCIdx    = 0;8 s" v" B/ T1 }) G, }, K
                paramSet.destCIdx   = 0;2 c* V0 x9 v# F& F  v: m
                paramSet.aCnt       = PING_PONG_ACNT;) u) V5 F- @7 m4 Q- {( n
                paramSet.bCnt       = PING_PONG_BCNT;
+ }$ R# u. w# |  W6 Y5 L8 C* M                paramSet.cCnt       = PING_PONG_CCNT;
5 d1 l: M* d! C# d" a3 ]               
; f- K3 T+ c# ?3 {                /* For AB-synchronized transfers, BCNTRLD is not used. */5 V; b; t% L7 D
                paramSet.bCntReload = PING_PONG_BCNT;
3 z1 r# E) X/ x- q
; H* E/ K( O" F& I                /* Src in constant mode Dest in INCR modes */
+ t. }# Y6 [9 F! I; i; e                paramSet.opt &= 0xFFFFFFFDu;
+ i% P" }7 z- B. F5 f7 r                //paramSet.opt &= 0xFFFFFFFCu;
, E# m$ G& J: i5 j3 j! F4 }3 M               
" b# r$ i# |9 I4 ]7 g                /* Program the TCC */
: h2 v3 t  |( E8 h                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);0 e1 B* g- V6 O: M
6 {) x$ G: Q, f, X+ b0 j
                /* Enable Intermediate & Final transfer completion interrupt *// {! C7 ~; \6 v: m
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);9 T  J6 K% `' v0 N
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);5 [# c$ R6 b% g+ ^6 S
& |8 |! P8 |; q% S
                /* AB Sync Transfer Mode */9 G: C$ L5 ^( X6 M) g! D4 L/ V+ G/ y
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);+ D2 H( N0 L4 Y- U
                & a; L7 W; l3 C
                /* Program the source and dest addresses for master DMA channel */
! r- ?! G; w5 g                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);5 h6 ?7 d) G# \4 H. A0 w5 I
                paramSet.destAddr   = (uint32_t)(ping_buffer);7 A% s/ s3 W- k; z8 X+ {

& V  T& U  ?1 k; S3 S2 E" U                /* Write to the master DMA channel first. */
5 n1 ]; |& M; Z! p' O/ ?                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);8 P# f$ w) w* j& i
    }      
- b8 i  O% D  U9 D- `& e! c) J. W5 Z/ `% l/ |6 M! U: _7 V
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);8 k* A7 V1 l+ a2 A2 P( w, g
       
0 a0 \0 W2 \, E8 C4 e! a1 x    if(result == EDMA3_DRV_SOK)
' |2 A" y; H% S9 N$ r' t9 }    {
4 x- S* C' K5 w* H7 V7 g4 _/ `            print2arm("edma3 driver init success.",0);3 k5 j! G" y6 m. `2 `
    }
% f( K$ P* e3 C- C}& N# r. x7 G" p8 }* t

7 f+ k( ^8 h4 u  j7 Z) ]& z+ z& H& m
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
8 p+ Q$ G! M# b) U. U& l; d0 v/ S8 ^+ ^4 `9 j, u1 x
3 S6 P) ^8 O2 k
分享到:  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:474 D; y) I$ _  E; s* a8 Z
每次DMA传输完成后都要再次使能传输

% v  n5 y9 ]9 x8 o  \; O. a6 i! U原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-16 19:43 , Processed in 0.041548 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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