edma3中断只能进去一次 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
9 `) A/ F2 j  y( }( P4 j4 I; z#define  PING_PONG_ACNT          1" a8 a6 i& @, e  T- a/ h1 q
#define  PING_PONG_BCNT          8*32*40
% J8 P3 u6 p% N4 z3 \6 r6 a//#define  PING_PONG_BCNT       1
$ _$ J- Q0 {- k+ j. T/ M: R0 }$ O& u#define  PING_PONG_CCNT          1  I' x/ b* c, K4 f& }: z" i6 v
#define  MCASP_BASEADDR          0x01D00000# U2 G! [! S3 M6 p8 y! S
#define  Mcasp_RXEVENTQUE        (0u)
: C* c: g0 I- U; q. I. R3 X) f0 J- T3 g5 e* d) v+ ^
/* OPT Field specific defines */
8 ?$ `$ d/ g' I- \#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
  v6 R6 c0 j. |1 X1 X% j#define OPT_TCC_MASK                        (0x0003F000u)
# X$ K- m/ n5 z; Q* ]#define OPT_TCC_SHIFT                       (0x0000000Cu). N% y$ s1 A8 w8 x4 \: h
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
% B) G1 x+ A: y& A2 N8 Z#define OPT_TCINTEN_SHIFT                   (0x00000014u)! ^4 L* B1 H3 n5 i3 V4 G9 x

$ ~/ N+ r# u; P) o! M6 nchar ping_buffer[PING_PONG_BCNT];
* w* f" Q1 F% w) ?char pong_buffer[PING_PONG_BCNT];
; F( ?; Y: z! h/ l" Z  n: s6 i) }, K" l) t% F) P1 w7 p3 B

7 m) Q1 u- I6 f! H$ e" k1 e* m7 C* R. Z

9 U  g6 p7 R! O1 i- Dstatic void ys_edma3_init()
& G4 b) Q, p2 j# @& w8 X# A{
0 w# f; `' D$ e. D4 o        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};8 R; [7 T7 O& L- J! q5 U8 }
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
7 |( e2 j: k$ N1 e3 {        EDMA3_DRV_Handle hEdma;
4 m; \; B! D5 F3 g4 t    uint32_t chId   = 0;5 G7 r# y6 p: d
    uint32_t tcc    = 0;
* Y! v- e) O) O5 \
( _$ o7 B& k' F8 o4 g    print2arm("edma3 driver init...",0);( T% k6 s" U' D9 I
5 l' n# P( [! {7 Z8 ?' l
        hEdma = edma3init(0,&result);
9 S0 g+ C7 P; ^! i  B        if(hEdma)5 M: V1 L; U6 g: Y
        {
( X5 \7 ]' F4 T  y% [                print2arm("edma3init() Passed.",0);8 o# C! z4 \: T/ S7 A8 |# F
        }+ I& @* p  C" O+ D- S, ^8 U
        else( k7 l( @/ F1 x- L* [
        {* b- x1 q; X( h, [
                print2arm("edma3init() Failed.",0);
" F9 \' [5 ?( n6 L        }
" c- G6 F7 A5 b/ P       
6 ^$ M& g; q8 n0 l, f7 D9 @        if (result == EDMA3_DRV_SOK)9 E7 M1 @8 w' B% d6 Z. z6 ]
    {$ G- t4 y+ @5 w( O/ o* p
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,, `3 Y7 Q- V8 V" c$ o
                                                       (EDMA3_RM_EventQueue)0,3 n1 N6 u; J/ l* k
                                                            &edma3_isr, NULL);
# Z4 ?$ \2 S" R& l0 I4 z$ J7 X    }5 v7 K& K  e, E
          T0 m; a/ `- }2 f
        if(result == EDMA3_DRV_SOK)1 L' R8 g& M. a( B
        {- S% x% z8 Y6 ^4 P5 n: ]9 G
                paramSet.srcBIdx    = 0;
1 a, W" I) N# x1 S: ^  O5 ~0 F6 ^                paramSet.destBIdx   = 1;
1 V# Q$ y4 T( X  |                paramSet.srcCIdx    = 0;3 _( r, U, {  K3 C
                paramSet.destCIdx   = 0;
+ L) M* P# f- O& \                paramSet.aCnt       = PING_PONG_ACNT;5 {- r9 f  Y3 n0 w& e7 K0 U% I, B9 G
                paramSet.bCnt       = PING_PONG_BCNT;
1 m& m/ n9 N/ l0 {/ E+ u                paramSet.cCnt       = PING_PONG_CCNT;
9 P, _! j% F0 \+ }                % ~& J, c, i; p. ?. ?
                /* For AB-synchronized transfers, BCNTRLD is not used. */: l1 w. E) N4 j
                paramSet.bCntReload = PING_PONG_BCNT;
% H3 c- Q4 D" q7 r
; ~$ n6 C# M. z6 r( V7 a- S                /* Src in constant mode Dest in INCR modes */2 @& M  |8 e% F  `) G7 a
                paramSet.opt &= 0xFFFFFFFDu;
% C' r& v5 j$ ^                //paramSet.opt &= 0xFFFFFFFCu;- Z/ E, ]  n# \5 @2 x+ c
               
" g2 @( t) E* O- c# h' ?                /* Program the TCC */
. P5 _$ y1 \' u+ D- k+ k1 N* `                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);+ V9 _9 v4 \4 B$ ]* w# p5 P. A

7 L/ ^& l. u& X3 H% \                /* Enable Intermediate & Final transfer completion interrupt */
& i* q& ?( P1 Z6 L$ t                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
! a- `  b5 x/ P+ _9 w  `                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);# P; }& j$ @- u
  [) B" R0 [: w& ?& ~
                /* AB Sync Transfer Mode */
+ u* j; @) X/ i, [                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
( f& P  d5 A; `" E& n               
+ k8 J( Q* @# M  W* }% ?- P                /* Program the source and dest addresses for master DMA channel */
' @+ H0 b: P) v, [- v                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
% c' h# F7 P! G- s  R1 x                paramSet.destAddr   = (uint32_t)(ping_buffer);! a; m" E( z( C

$ D6 @* ^! A. f" H. ~( ?                /* Write to the master DMA channel first. */& M' Z/ ^( G& v' x6 T
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);. s' e! d7 g% }5 A
    }       9 y9 Q, \" U4 i' _

5 C, x& g8 [9 Z! l        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
& n; U0 y& H$ I$ n0 v: Z. d) X       
1 Y# c" m1 L% s* K4 g, q& x+ K    if(result == EDMA3_DRV_SOK) 1 n+ o% Z7 H" o4 h! ^
    {$ n: g0 D/ H( j5 h! p3 L
            print2arm("edma3 driver init success.",0);" m$ K! o/ N! U- v
    }
/ |6 v1 z4 z. l6 V$ X1 r2 ]}& w& u; _5 s1 n( }
! f# R  \' D; D/ f0 R! t5 }+ K
7 ?' g5 H$ U) {( ?8 a" B: n
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。5 {' z7 k; L. u) x2 Y, |5 V

+ l- _: q" F7 O# w* e0 ^
: R7 ^0 q, o/ ?) n# ^0 r3 s
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
板凳
 楼主| 发表于 2015-4-29 23:25:56 | 只看该作者
Lewis 发表于 2015-4-24 10:47" ?: d) {: X, [% a$ v0 z4 P
每次DMA传输完成后都要再次使能传输
3 E( `" ~7 C4 D9 _
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2015-4-24 10:47:00 | 只看该作者
每次DMA传输完成后都要再次使能传输
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-1-30 01:17 , Processed in 0.039461 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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