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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
2 u) @- h5 ~( ~6 q, a' P, h#define  PING_PONG_ACNT          1
6 V% o1 B$ v8 L- N#define  PING_PONG_BCNT          8*32*40
1 w- z9 _% c6 F/ c3 t//#define  PING_PONG_BCNT       1 9 Q9 Y2 D1 V' \/ v/ e- c6 H3 q
#define  PING_PONG_CCNT          1
; _0 K; W; X! a5 }6 x#define  MCASP_BASEADDR          0x01D00000
8 L  E5 o" I" p, ]#define  Mcasp_RXEVENTQUE        (0u)
; I) d6 z4 W+ F$ U' f$ {, @  m, T1 ^. n( D
/* OPT Field specific defines */3 Z" N: {! }5 C
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
! r, ^" L' ?) j0 s( T- D( L6 U) X#define OPT_TCC_MASK                        (0x0003F000u)$ K& y& c( Q2 g% G0 }
#define OPT_TCC_SHIFT                       (0x0000000Cu)+ s4 m, V( Z4 ~' F* f
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)# a% W+ {% J- Q7 ~+ i$ D' G
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
' `: b# `0 M! s4 L0 F- z' m6 A, V! n& C! O1 \) T/ V
char ping_buffer[PING_PONG_BCNT];, @1 f1 x6 o6 y, h
char pong_buffer[PING_PONG_BCNT];$ z5 s" y# l2 g0 J& u
/ |- n7 K. r* ?/ V! W- M

+ x  Q" }: f5 z+ E9 O0 r
9 h3 R' F  M5 g. y; k4 O. U' F! j& k" ]5 e
static void ys_edma3_init()
+ M& c# g" Y6 N! \7 T* g; j5 c: q{
0 e# i+ K# F, w# N; ^* H9 ^3 _6 @        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
, O( h- C  h+ l0 B        EDMA3_DRV_Result result = EDMA3_DRV_SOK;& s3 |: }, }- Z3 Z) e& r1 O
        EDMA3_DRV_Handle hEdma;
0 H: V% O! x; r5 u, u    uint32_t chId   = 0;
, e  v# l+ D% k    uint32_t tcc    = 0;
$ N1 U; ~7 U- [5 o' {( l- \2 {/ C1 s0 q: q! \5 y2 X1 T
    print2arm("edma3 driver init...",0);: c7 R7 Z; _) Z! _
; l. m7 I; y  H% R1 ]; f
        hEdma = edma3init(0,&result);) |5 P2 s3 V' ^% O3 R
        if(hEdma)4 a. [" k/ \5 A# D4 \, `
        {
; t+ X" n- v8 @) E) Y; L9 q                print2arm("edma3init() Passed.",0);- R/ |0 t3 q2 F* _# [  E
        }% [3 y1 R( [/ h2 C
        else
1 L, ^# h; q$ s/ j- W5 P        {
. O( f3 x% }  x  h$ P5 u                print2arm("edma3init() Failed.",0);& C- _) N/ T' J5 x$ n8 n
        }
* u0 O+ c  D& [/ f1 T3 f  X5 J5 ?) W        % z& C+ d! _2 U0 w
        if (result == EDMA3_DRV_SOK)- i! S5 F1 A# r/ _
    {0 o+ L. e: x9 ?3 x$ P  c
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,% ~' X% A+ |$ N
                                                       (EDMA3_RM_EventQueue)0,* C" s% ]# H" x  R5 s
                                                            &edma3_isr, NULL);
& R+ s4 ]. g: u4 B' c2 o    }
: e. r  w. o' i% C+ U* ^% P       
% n( K) f$ q% c5 v" u- X% @        if(result == EDMA3_DRV_SOK)' ], D7 z* l0 w7 N# [
        {1 h: ?9 F4 g/ |0 I1 L8 R' _
                paramSet.srcBIdx    = 0;8 q& R0 w. B! k4 b
                paramSet.destBIdx   = 1;
7 d" x2 O3 W; C- N9 {8 [                paramSet.srcCIdx    = 0;
3 E6 u# `7 g; n; n  T. d! @                paramSet.destCIdx   = 0;( T" B3 J2 T0 @, {  g
                paramSet.aCnt       = PING_PONG_ACNT;
1 _1 z2 L' n6 _: P$ _1 y                paramSet.bCnt       = PING_PONG_BCNT;3 F: K9 O6 j4 f  y
                paramSet.cCnt       = PING_PONG_CCNT;
# j. T$ z' R( l" b               
6 K) k6 I7 A, V% z3 _2 Y: h                /* For AB-synchronized transfers, BCNTRLD is not used. */( R9 w% W' T. ^. q+ n3 N' x
                paramSet.bCntReload = PING_PONG_BCNT;  ^4 a5 v6 R5 e7 p

% s+ [. D8 q5 o6 a                /* Src in constant mode Dest in INCR modes */) C) t& [* a' X/ X! |! [/ C8 b& t
                paramSet.opt &= 0xFFFFFFFDu;
) A. N7 W2 n. O2 q  {# l* T* u3 v                //paramSet.opt &= 0xFFFFFFFCu;$ Y' |: j2 O' o0 O' N
               
6 d$ q( I4 A& L7 `( l1 y                /* Program the TCC */  Y4 g$ o0 P7 A: u* z, k  `
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);3 b3 r, C, e' {
0 m4 g+ {7 A: P4 B* ]$ m
                /* Enable Intermediate & Final transfer completion interrupt */
  j$ h1 o, K6 {; \                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);% x) [9 M, D' y- k. a- @; s
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);7 S1 Y# j+ N& v2 _9 d

8 ~' W( T" ?( r& m3 o                /* AB Sync Transfer Mode */
% Z1 i6 n. I' l) Y1 |! M) N/ O) D' B                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);5 g4 S5 C! W& j" I9 \4 ~  L  H- d
                9 q* G, Y. F2 b. ?) T. q: O0 o1 F
                /* Program the source and dest addresses for master DMA channel */: E) m  ]* E$ b4 w; L
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
, m  Y' K+ H( u* T1 t                paramSet.destAddr   = (uint32_t)(ping_buffer);9 W3 t$ g5 E/ q
; i) [. U" H2 G/ I& Y2 {' m
                /* Write to the master DMA channel first. */
. o+ ~4 A- z, E; @6 v0 V! [# W: {& F                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);2 c& [2 n1 P) m/ v: c
    }       % h7 k9 ]% c5 F) y
2 s: ?* ~% ~" _  C$ f
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
3 D, d4 Q) ^' c# ?# E          a( Z$ U& Y. q; ?6 S. j, q
    if(result == EDMA3_DRV_SOK) ) x! i9 G; z  O- S. l4 t
    {  d$ h' u' ]5 g9 z& Z# `
            print2arm("edma3 driver init success.",0);
9 f- v7 v& \, q    }
6 Q; W) |; Z) f0 o) j3 r% [! \: j}% h; B) |8 [, n0 I& m" V" Z" e' X4 m
) j$ g1 Q# b% J

" {2 f  Q% ?3 V) ?EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。* ~4 B9 B: B) n
6 ?* I& R7 i4 k  I8 t

7 J" v  S" R4 a
分享到:  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
" p7 Y; z$ W2 y; I每次DMA传输完成后都要再次使能传输
% ^) j2 N7 T8 c# Y
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-12 10:33 , Processed in 0.041333 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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