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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
( [. d4 O4 ~4 I* o' V* v, a#define  PING_PONG_ACNT          1
* ]/ z- }6 W( B) R  ?) j; x#define  PING_PONG_BCNT          8*32*40
+ y8 R# R$ g5 X/ N% m8 g//#define  PING_PONG_BCNT       1 / T$ J6 G1 ^; W1 Q' \$ h' o; O0 M
#define  PING_PONG_CCNT          1  }# N# p# S6 j- f/ q) G
#define  MCASP_BASEADDR          0x01D000001 _- n2 L, h/ c
#define  Mcasp_RXEVENTQUE        (0u)
0 ~, L0 W8 Y1 v2 {- e. R) X- }4 m4 U
/* OPT Field specific defines */
7 }# ~/ T  J  ?% @; z  o% P#define OPT_SYNCDIM_SHIFT                   (0x00000002u)- w" Q% g2 G0 I7 T; L6 A( K0 B
#define OPT_TCC_MASK                        (0x0003F000u)" I8 f% z. z/ m3 u3 V! _
#define OPT_TCC_SHIFT                       (0x0000000Cu)4 y4 Z: Z* T0 u8 u  P
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
# t* O. e7 Y" g2 M#define OPT_TCINTEN_SHIFT                   (0x00000014u)
# q9 B' @" i1 @3 r9 q% @" G, ~# f& z
char ping_buffer[PING_PONG_BCNT];
2 V* B  s2 N2 P  Y6 Ochar pong_buffer[PING_PONG_BCNT];
) f' B& D+ \  ?: W" O0 v
; b- K5 _5 L" g( i$ w6 L( R
8 D7 h* Y, w5 p4 O
- _/ p# {8 [% q7 a: C; w# t- }7 S  U  F8 H6 Y
static void ys_edma3_init()# P' F; F" r' V% X, Z& t; p
{
+ d! A3 Z* g6 ~5 F: Y        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};2 _6 \5 U. P0 y$ U" _- \6 H9 s
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
1 U+ y8 s7 l" ~* S" E2 p' b- ]        EDMA3_DRV_Handle hEdma;
8 H  l+ k* c1 I$ a6 Y  D    uint32_t chId   = 0;; f; V' H6 O3 m4 H" f- f6 [
    uint32_t tcc    = 0;$ `' z/ l6 J) O/ @, l

+ h$ \/ N% S* Z* C. @6 M. l    print2arm("edma3 driver init...",0);. \- x1 s" f8 s4 N

# M2 K# L5 J9 M+ U$ b: }        hEdma = edma3init(0,&result);& C4 \: u8 K: G2 v
        if(hEdma)7 q9 a0 S  M$ s' F' R8 G
        {2 |) i! H7 |8 m3 a
                print2arm("edma3init() Passed.",0);
  p' `6 m- m2 E3 n4 K, H- w        }: ?  I/ ^! P- c
        else
9 f3 ~" T, f  l        {2 Q& R: j: g; A$ t% l0 W
                print2arm("edma3init() Failed.",0);
# x& l& ^% c6 h! _# H9 g2 y. T. P  G        }* V1 i  j! \+ o- o" r8 R% Y
       
5 X: U& r' L1 D2 n5 }        if (result == EDMA3_DRV_SOK)2 {$ r( b0 U9 o/ V; m) j1 l
    {* i. ~6 r8 I. _1 H3 _( Q
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,/ |  L: t: o' ~4 _; g5 R* D3 l6 W
                                                       (EDMA3_RM_EventQueue)0,; K3 [/ o8 |. Y  w- K$ b7 @, w
                                                            &edma3_isr, NULL);
6 p4 g+ @1 Y& m7 R    }
8 ~- F. e* ^: D5 x        ; Z6 c2 `6 K: _
        if(result == EDMA3_DRV_SOK)- [8 Z& [9 Z. b$ S
        {
9 X& K3 Z5 k- M, ~8 ~& j4 s. _! F+ U                paramSet.srcBIdx    = 0;7 ]3 z: I" T( d: l, O% f
                paramSet.destBIdx   = 1;
. }/ K) J; x& q4 e2 _                paramSet.srcCIdx    = 0;
' H/ O# _8 H7 A% G. i8 v                paramSet.destCIdx   = 0;
" P% s. `  a1 V: ~8 q6 Y1 p( _                paramSet.aCnt       = PING_PONG_ACNT;
! H2 p) _' `" e/ s7 Z0 s                paramSet.bCnt       = PING_PONG_BCNT;9 M0 Z/ p7 N" q5 h+ l
                paramSet.cCnt       = PING_PONG_CCNT;& l! w* w( J, a% y' c
               
' j/ z$ z: T) S; F) m2 [                /* For AB-synchronized transfers, BCNTRLD is not used. */
3 z2 n: M( m# \3 H, z* A8 A                paramSet.bCntReload = PING_PONG_BCNT;) w8 }8 x2 l* e5 Q, F

% |/ @2 Y; Z0 `" J0 r7 x+ q' ]1 R8 `; k                /* Src in constant mode Dest in INCR modes */" `, u, }  K3 e, |1 o5 E3 p
                paramSet.opt &= 0xFFFFFFFDu;
& {4 {& O# ?& x                //paramSet.opt &= 0xFFFFFFFCu;
+ c/ j% R+ ]% b3 f9 F, L                % g7 g' p9 f; q* F
                /* Program the TCC */
! ^- w- ^# A+ T1 P                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
& d2 n) X2 [2 L
5 E! F: G/ Y# }                /* Enable Intermediate & Final transfer completion interrupt */2 D9 w1 \0 u8 [& N0 m9 h" O9 N
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
% j- |. ]' {' G2 ^, P! c                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);) b5 z7 w5 B( c0 F. A

( [2 `) C6 X9 |! B/ F5 [. I) g7 [                /* AB Sync Transfer Mode */. C. Z7 \5 ~, ]6 F# s
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
5 d/ N( b: i4 E: s               
2 a9 L' `$ I, ^7 ?& \6 z7 b/ f$ s' T                /* Program the source and dest addresses for master DMA channel */; u/ M9 A: T0 A5 l; J. F
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);9 p" H; c* \! ?9 r( W
                paramSet.destAddr   = (uint32_t)(ping_buffer);& L6 y: L/ i( I2 C

% J5 k, B# B( x) U                /* Write to the master DMA channel first. */
/ ~$ C4 W* u9 r& ?7 t                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);9 M, B! t, C" M. Z2 M
    }      
/ i) S! T, }6 H! O( U" A2 g
2 b7 a- {5 y. o% }; Z        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
2 x2 `% A+ y/ x7 L" E( K       
3 [% {  X2 M6 d3 s: I* R    if(result == EDMA3_DRV_SOK)
+ x+ \9 [/ ^$ u9 {0 @& H( j    {3 @* z; A# r* T; }+ Q" @
            print2arm("edma3 driver init success.",0);
% s- o5 V$ }3 |    }
+ _: @! B" E- z3 {. v}9 u! _0 n! R6 ^- a$ y/ G

, z9 N- Q7 o+ F& w* D' k
- K) o  c1 u1 O0 LEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。( t. b0 [* J4 O* _7 i, O* m( u) N

& X9 G; @; U2 d3 I+ U5 e/ n" J. P' A4 P& c  {
分享到:  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:473 I! x1 F2 X1 V3 K) ]: A9 O
每次DMA传输完成后都要再次使能传输

9 R1 V; J' k* l; I7 ~7 ^9 R8 f原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-21 00:04 , Processed in 0.039293 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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