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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
7 k6 ]5 }5 r$ d  g#define  PING_PONG_ACNT          16 D6 a* U. g! H' V* I: j& [
#define  PING_PONG_BCNT          8*32*40 ( n% [( m8 m8 Y/ p/ a
//#define  PING_PONG_BCNT       1
- M' U; i$ L* t+ d( J' T" n" j#define  PING_PONG_CCNT          17 x4 |5 h- T, w3 N/ c, d7 W
#define  MCASP_BASEADDR          0x01D00000
- i, O- W8 i; s( ?6 L9 u#define  Mcasp_RXEVENTQUE        (0u)- Z8 N1 i: z7 J
6 p8 N: a: p& ^$ o+ ?; [
/* OPT Field specific defines */1 h* C- w: }6 ~0 G$ A4 k
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
3 Q7 k' [: f9 R# l#define OPT_TCC_MASK                        (0x0003F000u). A9 z" _) F; f/ F" Q2 q
#define OPT_TCC_SHIFT                       (0x0000000Cu)% _! P- T1 T5 w6 _" v; j
#define OPT_ITCINTEN_SHIFT                  (0x00000015u). _0 Z" K* k. d& A8 |
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
* z$ _0 ]8 d6 o: p+ ]. J8 |
+ L; U! w, z" h. M) l5 d5 @; hchar ping_buffer[PING_PONG_BCNT];
& @& p% f1 O1 |+ @char pong_buffer[PING_PONG_BCNT];
1 t/ P& j8 V& K0 H; B1 k% [9 B
: t  s. c# {! P/ S
" B) [2 C, X8 w, z: ^
3 I  s+ E$ E* D+ `( u! m4 C# x/ C; [  q5 _- V. M/ n& X
static void ys_edma3_init()2 a) }; L5 `2 V, Q, d8 ^$ a! x
{
* K$ A; W2 [1 c% N        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};! o- ^5 ^, D1 s1 }9 P# m
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
  t; X& j: F- R6 a        EDMA3_DRV_Handle hEdma;
- D5 ^" c( B* M# v; t; P    uint32_t chId   = 0;: Z$ A6 A7 U, W
    uint32_t tcc    = 0;3 c2 C* t8 o$ P) q0 _! I- K

1 f: j& I. }# W& o" Q$ k( I    print2arm("edma3 driver init...",0);; P. j0 b: ]1 r: u8 K5 Z9 E3 k
9 ?8 w! d# _, M/ |! z
        hEdma = edma3init(0,&result);& [! H' k- }) Y+ n1 j6 `* p7 o
        if(hEdma)
2 d- g7 l. b# x) j/ R        {! d, t8 m. ?! w% }! a
                print2arm("edma3init() Passed.",0);
0 ?) `; ~" n, S  f5 U9 M; b        }
3 b7 x3 }- }: H        else
' ~1 o/ s% ]3 e1 o        {
* b$ s6 w. {7 x2 H7 {$ m% x% Y8 G/ i                print2arm("edma3init() Failed.",0);
8 w  P, q4 y5 n* G& s$ h        }
! t# S0 e( ?' _/ N+ R+ U' x  _       
0 u% P2 U2 S& Y% H        if (result == EDMA3_DRV_SOK)
& [+ p  O9 b! ~    {! h; h1 F6 F, X! G3 P* ]  k, W7 L
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
7 W% P  H6 f, E! d% k  v+ `                                                       (EDMA3_RM_EventQueue)0,
" z1 h% n+ p) r9 e1 O* r                                                            &edma3_isr, NULL);
  L  C6 E4 B( L0 c' a3 I; Z+ h    }: K, {; ~0 J/ L* x
        ; f9 L# k1 S% L( y  m  p
        if(result == EDMA3_DRV_SOK)- o5 P% G4 {: t- `1 g
        {2 l. s0 n$ {9 d+ e6 A9 n" i% B8 f
                paramSet.srcBIdx    = 0;
7 {+ B8 Q) ^  E! t9 V" ?                paramSet.destBIdx   = 1;
+ X+ b3 I% p  _                paramSet.srcCIdx    = 0;: m- E2 N2 _7 I8 Q. L! W% X' J
                paramSet.destCIdx   = 0;/ \$ O( p: o4 `0 U
                paramSet.aCnt       = PING_PONG_ACNT;
. a) m+ k; C/ c2 R                paramSet.bCnt       = PING_PONG_BCNT;0 M7 E: k7 I$ M
                paramSet.cCnt       = PING_PONG_CCNT;: O# [3 d: n% w. j7 X
                & s% ]! l7 x2 t# b* @9 G9 _" S( o
                /* For AB-synchronized transfers, BCNTRLD is not used. */
7 I# b9 ]  k, c: M) i3 t& m0 P                paramSet.bCntReload = PING_PONG_BCNT;
% }' u6 j: B  p, ?  ]4 p, M
* Y" E3 w2 I6 M; B, a/ _- i5 u: F. g& q                /* Src in constant mode Dest in INCR modes */
0 l: G0 t: o% S8 V3 _                paramSet.opt &= 0xFFFFFFFDu;
* ]+ N! y4 s; g  C) H                //paramSet.opt &= 0xFFFFFFFCu;" _  f( x8 Y3 Y
               
2 `7 c6 ~; f1 ^1 X9 c' Q                /* Program the TCC */# `/ `3 ?* Y( c. p! p& J9 s6 b
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);+ Y+ h8 U  |8 k# \
: G  ~9 R% g3 E7 t9 O3 u$ x
                /* Enable Intermediate & Final transfer completion interrupt */2 @9 }9 }; X  }  M
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);- V% W: A0 l2 ~/ A
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
" }6 F& q0 G# u# P# G9 m0 E0 s# z' ~! f6 m) u6 [
                /* AB Sync Transfer Mode */5 Y. T5 n& B- P% x1 S# L/ A
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
: U; v4 J$ D; }& x/ u# q               
9 j% ]6 v% C' J' I0 Y4 o- ^$ Z                /* Program the source and dest addresses for master DMA channel */: p5 Q: \+ M# ^$ K
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
1 g3 C8 T. w1 E4 M& X7 D3 H                paramSet.destAddr   = (uint32_t)(ping_buffer);
2 \0 m4 O" r. I; i& p. i4 g1 ?8 A) `: G, u6 P( f
                /* Write to the master DMA channel first. */
% p" T+ G# @/ ~4 \$ G                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);/ w9 M1 n4 f5 C7 M: K, K
    }       0 g6 V6 n& R3 `; z

6 o; s1 h) W% O' P/ V        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);: \' N- i- f( a, F% K  f8 Z( I
        . p! p+ z4 [; F8 K4 O
    if(result == EDMA3_DRV_SOK) 7 ?2 e' D  e6 w! ~( r- A
    {2 F; C- ^$ A" J, ~9 ^
            print2arm("edma3 driver init success.",0);
8 u8 D. g5 j- `5 P# _' ~/ ~' Y9 c    }   ~2 x4 Z" u. {  g
}6 ^+ |0 B4 d5 g* X& G3 Y4 {

/ I1 {8 a' T& k& i' v0 d9 R3 S2 t' U" B" o. }9 ~/ m$ J
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。% e$ |$ E+ q. @; k4 t& Z" E

% H: X. R& J/ W1 r# z4 D( @# w
7 r, @; c, ]' w- p+ }& T: 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
. C8 n8 H9 _. Q. y; |% ?; Z4 K每次DMA传输完成后都要再次使能传输

5 K& S* h! n  ]- N/ y原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-16 10:03 , Processed in 0.045880 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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