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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
* y, o, D' d; h5 t#define  PING_PONG_ACNT          1
- X1 \$ T7 c8 M) {( m5 t4 e* \7 s#define  PING_PONG_BCNT          8*32*40
( e- o2 [' @" C. r7 n: k//#define  PING_PONG_BCNT       1 6 [5 Y) Z  Q* [
#define  PING_PONG_CCNT          10 S$ m5 W, A; }) P4 q4 a: E
#define  MCASP_BASEADDR          0x01D00000
: U. ]4 i8 v0 E# }#define  Mcasp_RXEVENTQUE        (0u), c# T" X+ z; u* w; I
& v& X0 `5 {2 b* e
/* OPT Field specific defines */
0 Q$ p! c3 q9 L/ F#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
3 t' \- l4 f) d) G. o' Y6 H6 K2 V1 X#define OPT_TCC_MASK                        (0x0003F000u), O" q" |) x# M( C
#define OPT_TCC_SHIFT                       (0x0000000Cu)
4 L2 s  `. g- Y! C4 o#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
3 O6 T: i& |0 V1 b  |1 J. x' j#define OPT_TCINTEN_SHIFT                   (0x00000014u)% s7 H2 k' ]/ p

: _8 G$ q# J# ?2 Jchar ping_buffer[PING_PONG_BCNT];7 y! L: m5 }: j
char pong_buffer[PING_PONG_BCNT];! e8 S* C. ]( Q( C7 ~) V
# u5 ^, p; {2 b/ Z5 I% t

0 o# M5 n9 ^" p8 C2 f- S& H4 T3 T  l7 p/ `3 B( t" ^5 o, y
# E) P( E( B7 C6 X  H$ ^
static void ys_edma3_init()) A( }  F9 X1 @% E
{8 E9 |% W- G% s5 L: e8 h
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
5 [" Z% ^9 D" I/ @        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
- g- w8 F! J* f# z        EDMA3_DRV_Handle hEdma;+ C8 s9 G" w1 ^' X5 h# m
    uint32_t chId   = 0;' O# ^: o5 i. C3 l% }9 J, R( m
    uint32_t tcc    = 0;1 I9 z$ {* _  }7 @0 i
/ |" {- Z: r* ~) ~
    print2arm("edma3 driver init...",0);! K% S6 {7 z- _& j
. T1 {" R2 E% D* A' J. m& W6 u
        hEdma = edma3init(0,&result);
' f! K! d  c7 n1 b7 B) V  a        if(hEdma)
0 m& B# s: _* s! d% k        {
3 o2 F& }- P, P# u0 S0 T7 E9 Y                print2arm("edma3init() Passed.",0);
$ t9 p; s# Y) t! J* H. ]6 ]) ~. q        }" p. m& @4 y  E+ M5 q! x$ p  U# L7 e: Y
        else  c9 l. u* W" M4 D/ s" k
        {6 ~7 _+ ^& f( C/ I6 U& e
                print2arm("edma3init() Failed.",0);0 @+ k# V, e& r( X7 k
        }
) r! x2 J3 L; C4 p, [/ X0 R4 T        0 I  d2 [! Y/ d5 A8 E
        if (result == EDMA3_DRV_SOK)/ V+ }( h& M% k" c# i; U
    {4 W- t3 V* [; p, m% p; A) V
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,* f% D/ m" a! G9 n+ V
                                                       (EDMA3_RM_EventQueue)0,
: X" V9 r  p2 I. y+ R8 P                                                            &edma3_isr, NULL);- n3 U8 |* H2 g2 l# U9 v" ~3 L
    }
8 w. w& n& i7 s# a        - a( r6 h/ W# L! R) ?
        if(result == EDMA3_DRV_SOK)% Q; B2 O0 }, _3 E- B
        {/ r. _( @7 e2 Q0 j0 }  \
                paramSet.srcBIdx    = 0;
. k3 a. b  u: u# s6 B' ?; l) N5 Y                paramSet.destBIdx   = 1;
% ?5 K- t+ x% r1 T; H                paramSet.srcCIdx    = 0;
' U) X; A" p/ N7 R7 [& X/ C                paramSet.destCIdx   = 0;: J9 g: `. M5 B# u( A5 `
                paramSet.aCnt       = PING_PONG_ACNT;$ s( t+ B6 X; z, y3 m( U6 r
                paramSet.bCnt       = PING_PONG_BCNT;% Y- ^& k" r- b2 u( k" q
                paramSet.cCnt       = PING_PONG_CCNT;
5 f9 }/ s' {( A3 z$ V8 |               
: t; H* @* g. _# y0 m3 X  O$ M                /* For AB-synchronized transfers, BCNTRLD is not used. */
4 M) C7 w* X* M% S1 X7 O                paramSet.bCntReload = PING_PONG_BCNT;
  z) z' i5 f" ?+ |1 R/ F, i# _  k& T9 F& m- ]: E$ w1 {& w
                /* Src in constant mode Dest in INCR modes *// M- \2 u; ]( r! L
                paramSet.opt &= 0xFFFFFFFDu;3 e) T9 z: f' x1 I/ x5 F/ |
                //paramSet.opt &= 0xFFFFFFFCu;: _* y; g% \0 m; |# ?/ O
               
) \5 ~' i9 A' c, M0 d5 O                /* Program the TCC */$ I9 W% |1 v6 c% a
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
( l0 G. n4 |4 f3 h$ w: J2 D4 D% e6 \, Z0 q8 K
                /* Enable Intermediate & Final transfer completion interrupt */
( R* }' G' D; |- ]                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
8 ~$ P$ E, m9 T* J                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);' _* ~' r% |2 b: A8 N9 X1 r3 D
- l6 `7 d- R7 N9 [+ w( u" ?
                /* AB Sync Transfer Mode */" h0 }" ~# d( u- m! A, q9 l0 O
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
" r' j9 F2 F* ~& [7 Z               
$ G+ ]' K/ [8 i: k0 ^                /* Program the source and dest addresses for master DMA channel */
+ O  o+ t8 U; L  S- \' K( C9 j+ T                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);% Y/ U! b8 p$ H
                paramSet.destAddr   = (uint32_t)(ping_buffer);- X( ~8 i3 X! ]/ I: @
' I% q4 }+ g4 W
                /* Write to the master DMA channel first. */' B+ N/ G9 j: G% }  _+ G
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
0 D5 B* f. S" T; V, E    }      
$ c9 D5 C% f3 \) Z* F5 [" I- W# ]$ `( Z# r6 ?% o
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);* K0 p: G% D3 |0 s+ {7 s% B
       
0 ]5 U, m( H! V( p: p! o    if(result == EDMA3_DRV_SOK)
2 h$ u3 Z" j, I, C7 o9 d    {
9 U8 ]8 z' l0 H# N            print2arm("edma3 driver init success.",0);
% h% X# U( U4 Z) R# T    }
, ]  A0 H& _6 Q  I3 d  p* {}
8 k  }3 t3 h! ]3 I
' ?1 M& |4 O0 m; M+ I3 l# d# O. g: w" r; @% C  _
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。2 V4 y% s7 C9 J9 }9 n3 P
' K4 G8 {/ |/ U5 A' c% |1 p

) D5 E1 d5 K- y  t7 R4 f0 ]+ Y$ ^7 D
分享到:  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
' U2 U  b3 E4 Z" `/ ^9 B每次DMA传输完成后都要再次使能传输

3 T0 t9 A1 Y( E+ N原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-1 13:20 , Processed in 0.042040 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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