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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:) q  l& F) V. c, h! m! P
#define  PING_PONG_ACNT          1$ K3 V/ F, Y; L: C. H1 ~- u
#define  PING_PONG_BCNT          8*32*40 * J2 [& x/ V$ r: q' c, _1 H! T1 g
//#define  PING_PONG_BCNT       1
5 X5 g8 w4 l3 b6 Y  r#define  PING_PONG_CCNT          1% c  Q& Z" H3 z" R  \
#define  MCASP_BASEADDR          0x01D00000& k9 y) l! v& ?! g  }
#define  Mcasp_RXEVENTQUE        (0u), ]3 V) X' T- U0 V! P' j1 h

8 A4 j. T6 L  u! ~/* OPT Field specific defines */
  \8 q! N( [- Q9 E#define OPT_SYNCDIM_SHIFT                   (0x00000002u): u7 d# u; H* g1 S" f. I7 {5 b/ Y
#define OPT_TCC_MASK                        (0x0003F000u)' y7 r; n0 {8 |
#define OPT_TCC_SHIFT                       (0x0000000Cu)7 I0 m! \5 b5 L+ q" M
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
- V4 d' Z* o* Y#define OPT_TCINTEN_SHIFT                   (0x00000014u)4 d0 r6 H. Z. Z. V% P' I) n

2 c5 k/ p; k' `# H' T5 v) rchar ping_buffer[PING_PONG_BCNT];
7 p$ a2 {+ m1 ~, Z* f& v2 echar pong_buffer[PING_PONG_BCNT];9 R6 M  c" S% G9 F

( S8 O! S) ~3 B, {& {" q, @5 H# B8 v, P5 G6 N) n9 `
' F5 ]7 k' S5 u8 U- c( {
9 G0 _$ u. G1 ~( H" j  m
static void ys_edma3_init()
+ n( V! H, U: X% g% I% j4 [) v{! K( n. ~2 N* d7 l
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
# }( c1 t$ b8 T) G; }; Q        EDMA3_DRV_Result result = EDMA3_DRV_SOK;' Q& U' j4 Z7 [5 T% f
        EDMA3_DRV_Handle hEdma;- r+ }& |% x: r+ D
    uint32_t chId   = 0;' H, C5 r1 ]; x$ ]" M- S
    uint32_t tcc    = 0;- {) L/ ^7 _) e+ A1 I

( d' x' ]* A, `0 j# L" R1 k    print2arm("edma3 driver init...",0);
8 y) A) L  k- q
) B# u$ |$ a; u  G5 l5 r        hEdma = edma3init(0,&result);
4 u, K0 N  x( p/ \1 i+ @        if(hEdma)
# K+ ^) Y* D7 C  s5 V% q        {
7 g% H% @" h4 @                print2arm("edma3init() Passed.",0);
4 p1 Y- g8 |0 @        }. t+ Y- @. k. e7 ]" q2 c
        else
( v" ]8 j# o$ O, u        {5 V) j4 C: S6 _3 J! [2 P' ^6 m
                print2arm("edma3init() Failed.",0);$ E0 f+ Z. y' c3 \7 u
        }7 i% Y/ m# z( E, P4 u8 D; e" j
       
/ N8 k6 L. H6 w% R# ]9 p        if (result == EDMA3_DRV_SOK)9 h% [. ?1 }+ G
    {- k2 G- o. l5 r# R3 {
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,$ o4 Z9 W. L' ^
                                                       (EDMA3_RM_EventQueue)0,& v1 Q6 s5 I, O1 R  o
                                                            &edma3_isr, NULL);5 |7 s! B  n* e  S  E5 Z& d
    }
3 u$ H. B' x7 n& p       
: @2 ?0 M5 A# X# b! h) \- n        if(result == EDMA3_DRV_SOK)* A% y& Z0 Q6 O$ U1 F7 z7 ?
        {
: d1 t! m3 X; I' ?% p5 k5 f2 [' I                paramSet.srcBIdx    = 0;. B1 h# X3 Z8 N
                paramSet.destBIdx   = 1;+ n& u$ A1 L6 M6 Q5 d7 t
                paramSet.srcCIdx    = 0;
0 A% ?( \  I8 m( O                paramSet.destCIdx   = 0;
% a. i* t1 B- I- r2 @                paramSet.aCnt       = PING_PONG_ACNT;' Q. X+ W: a- _4 X$ ?
                paramSet.bCnt       = PING_PONG_BCNT;
7 o7 V. W/ F) _: n0 p2 U; w2 K" G                paramSet.cCnt       = PING_PONG_CCNT;% }4 O* Y4 r1 {7 J" L2 l
                % m9 F' H/ L& Y* J
                /* For AB-synchronized transfers, BCNTRLD is not used. */
% i1 P* n1 N/ T  J' r$ r" q                paramSet.bCntReload = PING_PONG_BCNT;. P: W& m5 z8 M) f
! C  H. M" v: w: V
                /* Src in constant mode Dest in INCR modes */+ q8 D& W, X. ~6 D/ v
                paramSet.opt &= 0xFFFFFFFDu;
; e& R1 M& ~& k7 D. T9 B                //paramSet.opt &= 0xFFFFFFFCu;: n: P" j. u+ |. }; H. E/ N
                % A& w- p  @" U. j% G. J$ c
                /* Program the TCC */
) R6 C" Y! D$ ~! H- _' X9 B                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);0 k! X! Q3 Q: J8 r

0 e7 j3 r0 }/ |6 v3 g; M& \  [2 |                /* Enable Intermediate & Final transfer completion interrupt */: e  `" [, s1 a8 U* r% l
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);* d% `$ U# m, k/ `! h) m# C$ z3 r- J
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
3 D. |- w8 u3 n. p3 h! L. Q
8 i/ W' H7 e) E  n7 I; s, h3 Q                /* AB Sync Transfer Mode */# S& \& P) i) ~) A) J2 p7 T" n
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
  T$ n4 L: U( J                ; {0 \% Z& _$ R2 Z9 I
                /* Program the source and dest addresses for master DMA channel */
5 ], K0 M  [+ p2 [6 |                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);8 [, V+ X. M) ]9 e* H
                paramSet.destAddr   = (uint32_t)(ping_buffer);, f; z8 w2 G- D  @5 x$ R
5 ~9 F3 X* j' N7 _& x
                /* Write to the master DMA channel first. */6 v; o( l) M4 ~' \: Y4 y# _9 a
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
8 ~5 v1 E5 ?+ g8 B; B2 {+ K    }       + _; a$ ^! k) V3 X

: B4 d3 M% L+ l% j9 ~3 U        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
6 P: \8 k" I: r& c1 J+ ~) K8 p1 `7 J       
# a! k3 g1 Z, D0 W# P& w    if(result == EDMA3_DRV_SOK)
" k4 w# I8 b# _1 ^    {
% z# I' h: C% W- J9 P% n            print2arm("edma3 driver init success.",0);- o+ M1 U& ^  M9 U. I7 N
    }
+ e+ j8 |; t' _2 Z8 O}
7 o, @$ e# B2 p; o; i; }, o3 \" p  B3 K/ c0 E
( _! j, }! }$ m6 p6 {
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
8 O  E5 q4 q7 v. Z1 z' ?& [
+ l* C( T" h& F" z+ y" c( h) Y7 Q2 F0 p" D' m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
沙发
 楼主| 发表于 2015-4-29 23:25:56 | 显示全部楼层
Lewis 发表于 2015-4-24 10:476 o8 T4 T: [, G' V& t* [2 w$ F
每次DMA传输完成后都要再次使能传输

- m+ j+ v" R/ A原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-1 06:10 , Processed in 0.044426 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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