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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
" M- L# B- l0 |+ H#define  PING_PONG_ACNT          1
9 a6 L# ?0 E; ~4 u& x#define  PING_PONG_BCNT          8*32*40
, j% Y3 K6 X7 y% _//#define  PING_PONG_BCNT       1
' k0 I( o/ Z1 `! @8 ?8 j2 A#define  PING_PONG_CCNT          1
1 Z- P7 @! O8 M- d4 O#define  MCASP_BASEADDR          0x01D00000
6 p/ g6 U: v# l: u4 m. Q1 ^#define  Mcasp_RXEVENTQUE        (0u)  B+ z9 [; Z1 p8 I3 i: @( Z
$ W- `; ]) P' N2 [/ t9 [4 g2 g' {
/* OPT Field specific defines */0 |2 D( _! r$ c* ]" a* H+ }- Z& \. j
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
0 `% [3 d% h' ]+ ?) C; @: J* h#define OPT_TCC_MASK                        (0x0003F000u)
1 }0 r7 M* F. ]5 v  J7 I#define OPT_TCC_SHIFT                       (0x0000000Cu)8 w- D$ u+ j: `! X/ i
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)6 m! x6 U, B8 `# [0 l* c/ W' g
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
; \$ A  }. i& |& G7 e/ [# x# J6 o2 r- |  Q9 a6 [  P% J0 _$ \
char ping_buffer[PING_PONG_BCNT];# M7 t& g7 z/ |3 j! s7 F( I- {
char pong_buffer[PING_PONG_BCNT];8 Y4 A; Y3 b& _6 X( @1 M- k

4 E6 P4 }: Y4 D5 P9 k% Z/ R1 O( v2 j4 y
. P$ b+ E, @2 k  p5 Y/ Q8 v' ?
  d) C( l) P5 T/ W3 L
static void ys_edma3_init()' E6 V/ p  T0 _! ?4 R& X& ~
{
$ V- n1 z4 Z9 D        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};' c) X. Y9 H) ?( ?% q  |' q
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
" v7 x- i9 S5 i8 `5 e0 T        EDMA3_DRV_Handle hEdma;5 m/ q% ?9 p/ o) L+ P3 b$ k: N
    uint32_t chId   = 0;
6 H& a8 m" C6 C2 U7 R8 [0 R# P    uint32_t tcc    = 0;
2 Y/ l( b0 l, w) b7 D( g- J9 }' q  h! j  c( ?4 U
    print2arm("edma3 driver init...",0);
7 i( u8 E* p, ]/ E+ F6 C
  g' q! L1 _; g# h, t        hEdma = edma3init(0,&result);
0 N+ ~2 k/ Q0 z: v1 {2 |, [0 ^        if(hEdma)' ]0 v! ^* ^! _7 c. l2 f, |$ {$ h
        {9 J# C+ S+ A% X6 c' R' |/ p
                print2arm("edma3init() Passed.",0);
, Z/ @  f( k" O  @2 d; O6 z: O        }) a; j' e4 [' J
        else" r4 J  G7 P( ~& M, v' m& p
        {% B' h+ a7 F7 ?) a3 y
                print2arm("edma3init() Failed.",0);- w9 C4 m7 Z' q# Z
        }
; J$ m& e7 B# f5 x1 N3 @# R& l        8 u' a2 H( }$ ?7 z$ L
        if (result == EDMA3_DRV_SOK)+ w7 o% u" S8 }! Q2 v; b
    {; X0 w( Q# Z4 e+ m0 I$ X! p7 {
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
3 x. Y5 b% a; n! a$ P                                                       (EDMA3_RM_EventQueue)0,
( U& v' w- h( A7 {/ j. m- N                                                            &edma3_isr, NULL);
3 N; u! _4 M. |, d' e    }) b7 u, ^; L/ G) d0 l) v
        . }  c+ {' F# i& C
        if(result == EDMA3_DRV_SOK)+ G' G( R; n% }; |: m8 j9 m* ^
        {. e! s* A. I; d1 n2 d
                paramSet.srcBIdx    = 0;
# K! v" |2 u  S# e# ]# N                paramSet.destBIdx   = 1;
2 C5 F- `2 \# n2 _* v& P                paramSet.srcCIdx    = 0;, a8 V/ p2 U. T5 M
                paramSet.destCIdx   = 0;2 H# K6 V9 j% H3 K" y! m5 [: G
                paramSet.aCnt       = PING_PONG_ACNT;
6 I: C+ R% U4 P. E4 t8 U                paramSet.bCnt       = PING_PONG_BCNT;* I3 `- t( ]) j4 j, r
                paramSet.cCnt       = PING_PONG_CCNT;* K" T$ [. `* w6 ^$ i
                4 r5 V- r6 ^8 ?: [/ x( B+ ]$ a: W
                /* For AB-synchronized transfers, BCNTRLD is not used. */
7 T& O# b$ Q' r" ^0 D# [! f3 Q6 d                paramSet.bCntReload = PING_PONG_BCNT;6 `( E+ X; o! E+ }0 X1 c, [' P% ~: e5 U
5 w7 ~7 q) ?0 [$ t% T
                /* Src in constant mode Dest in INCR modes */: b# b! c  [3 K$ d% N$ e; y/ }$ l
                paramSet.opt &= 0xFFFFFFFDu;6 X' M9 l( J& k, ~/ X( ]
                //paramSet.opt &= 0xFFFFFFFCu;- C# L+ F1 }8 B( J# |0 P6 t
                4 Z& h) B* C+ Z" i- O
                /* Program the TCC */
3 y2 U3 Z1 q2 }* O- N                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);$ Y$ G% c1 f5 S

/ S5 _7 U* I3 _" r5 |$ A, x                /* Enable Intermediate & Final transfer completion interrupt */0 d( [4 d7 W9 C( h6 R! v$ C! H
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
; ^& [! p: \# q                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
* H; M& p5 j  J+ f3 a5 b7 ]1 h
. C2 t& B. m) y1 y                /* AB Sync Transfer Mode */6 b$ b0 z; q7 L* q
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);: H5 M4 O# _2 v. S# Z& b. a
               
* {/ G) T/ o7 F                /* Program the source and dest addresses for master DMA channel */
! n( g( }' n0 Q4 Z                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
1 k% S' ~1 j$ C                paramSet.destAddr   = (uint32_t)(ping_buffer);* ^& m* [' k& S' ]* t

$ V: Z: g2 p# w3 C4 F: b3 [! n* d                /* Write to the master DMA channel first. */
; `7 v$ o% o% K$ ]                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);, Q0 S% A+ C+ h; t& Y
    }      
9 O& f1 [1 d1 P
( S% w5 b3 A& ]8 b        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);5 E! r0 ?3 X+ q! _2 {
        % q: e# L- q% G6 }
    if(result == EDMA3_DRV_SOK)
& Y" ]2 `3 f6 {: ]) F    {9 T! p  K( B5 [' T. c( T/ t
            print2arm("edma3 driver init success.",0);, E! W& S3 M. n
    }
1 a5 f6 x% j( e7 d( ^# }) i1 @6 K$ K}
$ v. ~$ [9 Q  O) Q$ T7 z" Z0 ]" |& B4 N: @
/ b- A" L, m; E- G+ u
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
: \! z- m. w$ T: `$ y. U/ @: Q% f- j+ N4 K- A% U
8 X3 S( M4 Q% x6 V& }
分享到:  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 o: m/ B  q! f8 G5 |* d
每次DMA传输完成后都要再次使能传输
) a1 w1 T9 {# K: Z6 O0 s
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 07:39 , Processed in 0.036854 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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