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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
- @& O8 V% ^# t/ R8 o6 o: s, D# {- S# {#define  PING_PONG_ACNT          14 m* Y4 `2 o% h, @
#define  PING_PONG_BCNT          8*32*40
8 O9 D0 N) ?  f- g//#define  PING_PONG_BCNT       1 0 t# D# B2 V1 I- e
#define  PING_PONG_CCNT          1
4 N8 D. S% t+ ?1 d, d#define  MCASP_BASEADDR          0x01D00000
! B" I! t8 u3 x0 S) M$ C/ p- B#define  Mcasp_RXEVENTQUE        (0u)
& S( @" R' d8 t2 j- j
5 T! n" o7 c1 ^0 b/ c/* OPT Field specific defines */# v2 K# ^5 ^4 O! R+ b% e
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
( y+ C/ K7 v: V#define OPT_TCC_MASK                        (0x0003F000u)
( O8 F, i: j  N" U/ [+ f9 M#define OPT_TCC_SHIFT                       (0x0000000Cu)
* Y7 B3 N% Z' E#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
' z/ d% U4 c2 `#define OPT_TCINTEN_SHIFT                   (0x00000014u); b* ^" s% g% \! @" d" {3 o3 Z
8 b  u2 S& }6 ^+ x$ B
char ping_buffer[PING_PONG_BCNT];& x! z7 _/ k' q. P- g; n4 [+ l7 u$ Q3 ~
char pong_buffer[PING_PONG_BCNT];
: b2 ]" H: `! `5 ~
$ t* K: D0 ~' D+ z! |: E. q) U. n9 v$ D' l* ]; a# q

7 a2 C2 Z- E+ T8 S1 A
2 K1 z: j  U! R9 y2 lstatic void ys_edma3_init(); Q! Q& _: w+ ^# _8 D
{! h/ H" s" i; @* w) T9 o" X
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
6 t/ p4 |8 Q, w: ^% ^! d  N2 J; \' ~6 L        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
! Y: f. ?1 b7 X+ q        EDMA3_DRV_Handle hEdma;
& r" m: s, b& c$ J& e    uint32_t chId   = 0;
% U9 b4 o8 n5 P' e% d    uint32_t tcc    = 0;
* u, G$ `& n) L0 }2 F
, m4 r. s3 T. N0 I2 V0 y    print2arm("edma3 driver init...",0);
( s" t& M/ S" d. `$ w9 t* F) d
& c/ |, |# i, p4 X1 }( Z) q* U        hEdma = edma3init(0,&result);  N5 ]" C9 V/ S0 H& ?/ Y
        if(hEdma)
: }/ U1 K0 |& V  A        {$ J( M  x* d* @" Y* x
                print2arm("edma3init() Passed.",0);
/ ^5 n  C1 D  M        }
5 h* B9 k* c* ]& @) r. s; \( g        else
% y- a3 {" c# e; O5 m        {  m0 H; }' ~/ l7 ]* k* ^
                print2arm("edma3init() Failed.",0);
% \, I8 L+ k1 e        }
8 c  K* l, Q! Z5 f- E        7 U# u! y  k4 M! y
        if (result == EDMA3_DRV_SOK)
1 {/ f5 D) q& L! V    {! y, c7 {6 t: s3 F$ w* N  J
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,8 V' d! ?0 P4 G$ @3 m) p
                                                       (EDMA3_RM_EventQueue)0,3 V  A" w4 u6 y# Y
                                                            &edma3_isr, NULL);
# |4 \6 ~8 A9 i+ G  f    }
6 D. E4 Z9 K3 E        ( a4 C# @" H+ M# J2 G& o
        if(result == EDMA3_DRV_SOK)
: m# M9 ^3 Z! A6 [        {
* N% m) S: ?- A0 H9 U4 l                paramSet.srcBIdx    = 0;* R7 X+ s% |9 H4 h. I. t
                paramSet.destBIdx   = 1;
' m0 m. I4 J# N6 W0 G                paramSet.srcCIdx    = 0;5 g) Q8 x' e% x$ B/ O# S
                paramSet.destCIdx   = 0;
. T8 g' g8 t0 b( ]( ^: o- k                paramSet.aCnt       = PING_PONG_ACNT;
7 S' ]. ~( Q; J! N& J                paramSet.bCnt       = PING_PONG_BCNT;* }, w& d) h" ]/ G! k/ B
                paramSet.cCnt       = PING_PONG_CCNT;
  F8 D1 G$ h7 |7 W  Q# B1 F                : T- ^2 c+ x; J2 ]+ u
                /* For AB-synchronized transfers, BCNTRLD is not used. */
/ q) k3 Z6 @7 I% F) {; D                paramSet.bCntReload = PING_PONG_BCNT;$ b% q  k4 Q2 ?3 o( d

5 J. d# j* {3 ^" K: `: h                /* Src in constant mode Dest in INCR modes */1 p0 ?# y" q- H1 K5 t- t7 Z0 R3 p
                paramSet.opt &= 0xFFFFFFFDu;0 x0 T0 a6 z) K2 T/ l7 a
                //paramSet.opt &= 0xFFFFFFFCu;  o% Y' {' l' P1 h) f; C
                ) I6 G' j3 G4 X
                /* Program the TCC */) `* C7 o  v1 Y2 u( F! E
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
  x. W' m& F% g8 q, _0 W8 v! v3 ^3 f5 ]. S
                /* Enable Intermediate & Final transfer completion interrupt */
7 Y8 \6 n1 V" s/ T' a! ^6 s5 d                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);: y% J& b+ K! ~4 Y
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);% p. [5 R# b1 D5 P8 v
$ D% H+ }' q; z. e. ^, Z# ~
                /* AB Sync Transfer Mode */
4 X6 x( H6 e* }" s                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);$ j* v! A/ n: I& {# h7 M9 b6 p9 w3 _
               
& R, T- ~$ Z# r4 \                /* Program the source and dest addresses for master DMA channel */
9 i' T" x* e  s9 [) @3 W                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);9 [; y  \% |% T. T
                paramSet.destAddr   = (uint32_t)(ping_buffer);' H7 @" P9 J5 }6 s! g

* Y) a* {7 k; C/ f& ~/ y                /* Write to the master DMA channel first. */" p) e4 t% `; [+ ]  I  _' d! y+ p
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
7 ]+ ?- l2 [( W- `" v6 D    }       ) J. M( h1 O# `0 e
7 u" O9 O' U$ E  h, X' i1 |, B
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);% @! R# J& _1 Y2 `; d" H9 Q# @$ L
        . w$ i, a0 r" H. Z, c# r
    if(result == EDMA3_DRV_SOK)
/ J6 o& K3 C" Y) X2 g    {% \- t: w, W  }- v0 E
            print2arm("edma3 driver init success.",0);+ y+ E# ]" z2 A! W
    }
! @% t/ ?: B( u# P/ b! X/ G}' ?* S9 ?7 F; W* l' A. R

0 W' v3 c! v  t# C* q. a0 q# m% H& f9 F* ^2 ~
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。; _, w) d; t4 c1 [- O3 F5 Y( b
" B) ~1 Z7 j' ]6 v/ w

, d6 B* ]! B1 A9 ]1 u6 Y1 W6 l/ Q
分享到:  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' U0 u+ f' I/ f( V7 {+ a
每次DMA传输完成后都要再次使能传输

+ d! B: s) L2 J+ H! p, P' g6 k4 a) h! ^原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则


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

GMT+8, 2026-1-12 15:56 , Processed in 0.041200 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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