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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
# W1 Y+ F  ]+ L#define  PING_PONG_ACNT          1
& j, }) P; i' N, N% f#define  PING_PONG_BCNT          8*32*40 - L0 V; r' _# z7 d4 d0 a
//#define  PING_PONG_BCNT       1 & c4 J( P! e& ~: P' S  P" S
#define  PING_PONG_CCNT          1
+ }1 H5 A3 W! m( A/ I3 L#define  MCASP_BASEADDR          0x01D00000
/ y1 ?% w) y$ q- o1 p9 Q4 ^#define  Mcasp_RXEVENTQUE        (0u)
* w: a) |4 ?/ e+ Y3 ^5 d3 [  a% n" r& J/ L
/* OPT Field specific defines */% c, \# o8 g' R5 L8 a( F- \
#define OPT_SYNCDIM_SHIFT                   (0x00000002u), W! j8 Q& N) k  s6 s# F7 W+ b, C4 f
#define OPT_TCC_MASK                        (0x0003F000u)- }- B: E( [7 w! E5 K
#define OPT_TCC_SHIFT                       (0x0000000Cu)9 y, c& d# }* N1 E3 a$ k
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)$ ?: m/ ^7 f0 z- O/ V
#define OPT_TCINTEN_SHIFT                   (0x00000014u)+ ^( t! e; i; M" Z
3 B, ]. h) t+ {- g; W4 }0 z: _
char ping_buffer[PING_PONG_BCNT];# c1 ^- k& h4 S- q+ G" e/ I. X
char pong_buffer[PING_PONG_BCNT];. X/ _, A& \. G$ j
( w) d3 {0 P6 f! G8 w( j% s

. }/ f- t3 Q( E5 h" @( z, z- v7 V0 F4 k& H
0 e! c2 l: f# g. K# T7 e
static void ys_edma3_init()/ n2 p2 T4 Y& {% c7 T
{
  y9 u  I  K/ }, t! A        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
" s* m$ {0 w$ X0 I' `        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
, N. e( Z; T* ?) m4 M7 r        EDMA3_DRV_Handle hEdma;
" w! v$ {, O+ ?    uint32_t chId   = 0;
/ {6 @& g7 c$ z7 S, t    uint32_t tcc    = 0;1 ?, }, Q" M& J) {6 t

9 @7 ~' N4 U* w7 o    print2arm("edma3 driver init...",0);
+ m1 Y4 \5 d% N' w
7 z8 q) |( }: f# [        hEdma = edma3init(0,&result);: s) u& j( d' c$ U
        if(hEdma)' e# i$ q8 g& r& ~$ q- T! Q9 D
        {
% Q, p+ g8 ^/ S3 I4 J5 D. C                print2arm("edma3init() Passed.",0);5 h4 X4 E( s/ S6 m8 a
        }
6 A* y4 Q" {/ H: a7 Q- x& b# b        else, p  v" d2 Z( _
        {5 g! [! R$ O; o! \1 {7 `, L+ h0 _
                print2arm("edma3init() Failed.",0);
- D1 c! c5 m9 B3 d* |6 b        }
: K7 x) H( e$ b3 N2 |% V% W/ Y        6 J1 p' v) Y% O" w
        if (result == EDMA3_DRV_SOK): P  d" P  e6 R+ u7 V8 w* S
    {
3 d/ u3 j" F7 b' n9 N                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,0 k( q* O9 ^" A. U7 L. p
                                                       (EDMA3_RM_EventQueue)0,6 R7 q& t. T4 G' s
                                                            &edma3_isr, NULL);$ Z9 O7 U0 w6 A) B! T% O
    }% {5 K4 N4 y0 `7 R: ?# u( N
       
5 P( F" C/ r  N/ M        if(result == EDMA3_DRV_SOK)
+ Z1 \4 G6 L; ]7 @        {
7 L" u) k/ o6 P/ @8 n! \3 c, w                paramSet.srcBIdx    = 0;( {8 o( Q" Q, ~) X5 C7 T
                paramSet.destBIdx   = 1;
+ i" G( r# l1 a9 n                paramSet.srcCIdx    = 0;
$ q# q; H. v) S/ s                paramSet.destCIdx   = 0;( h. S( }/ z8 G; W/ A( M2 u
                paramSet.aCnt       = PING_PONG_ACNT;
0 u: R2 I6 m* i                paramSet.bCnt       = PING_PONG_BCNT;% c/ \9 E& U( I8 e( g+ J- V5 l
                paramSet.cCnt       = PING_PONG_CCNT;4 V# @9 E# {9 i
               
1 v. ^4 w) [$ I) x& i0 e, D                /* For AB-synchronized transfers, BCNTRLD is not used. */
3 Z8 c5 s7 A6 i% D5 G* f4 S                paramSet.bCntReload = PING_PONG_BCNT;
1 V0 ^8 M/ q6 U* O5 v4 ^
3 `( Q, _4 x; ?5 o" J) A7 d! `                /* Src in constant mode Dest in INCR modes */% |2 ^$ L# u& `8 P5 U) n% ?& I% @
                paramSet.opt &= 0xFFFFFFFDu;
4 d7 F. j7 n, ~0 O                //paramSet.opt &= 0xFFFFFFFCu;
' c  h. o, v* o4 V               
0 i" i5 t8 u, N                /* Program the TCC */$ \3 C8 z. o7 n6 W: o2 S8 z/ a
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
. J2 F7 s5 K5 [! z% p! I# j  S5 K8 f& Z) X% @9 g. c6 j
                /* Enable Intermediate & Final transfer completion interrupt */! E/ q) ~5 ]% F; q% a- E" V5 |4 T
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
3 m: M  Y; s9 H                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
! Y9 ]- P' h$ V' s; K/ `. l' B+ @
                /* AB Sync Transfer Mode */2 A4 o4 X! W% H0 l
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
& H% E; _' Y6 ], f/ A                ) b8 h( E$ b7 f# S; h
                /* Program the source and dest addresses for master DMA channel */* W/ u  b$ }" d/ o* Q
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
' s$ }! C  l$ ]                paramSet.destAddr   = (uint32_t)(ping_buffer);
  b6 m2 o# q1 V
7 S1 _% V- @1 f6 T& [                /* Write to the master DMA channel first. */9 W+ _: j9 r7 T1 r& |$ M
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
: U# T+ Q7 U4 C( N  T    }       - b  o. S, H- R' o, f& {8 k* C8 j

- A& J1 r9 d! U0 n3 j0 `        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);/ F% q$ s& l: [6 z
       
  ~9 A# a; A0 F' o" T2 c( w) t    if(result == EDMA3_DRV_SOK) 6 f: i% @0 ?' @) M* w  N
    {
! {& u( ?! s" S$ m' ]8 _7 y( Q5 I            print2arm("edma3 driver init success.",0);) g' W/ _% K' u" ^5 L' p
    }
% ^- k5 ^+ t' p) @: k0 b}
9 t$ L' X; _: w5 q7 W3 ]9 b
$ f# E4 M' w' r! G$ `6 ]- P
8 r5 l3 [4 x6 }4 M4 K- w% CEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
- ?4 f1 r( }$ c% @) N
* B$ O  T6 f4 [# P/ O  k6 z, y+ J  C- T$ y0 v8 `  f4 y
分享到:  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. u; k5 B, x$ B" y- \- w
每次DMA传输完成后都要再次使能传输

. l& L+ s( c7 B) I! \" c原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 10:12 , Processed in 0.037395 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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