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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
% n1 u( k5 s5 y' h! ^' @#define  PING_PONG_ACNT          1
' ~+ R" f% z+ K; E- B! C#define  PING_PONG_BCNT          8*32*40 # Y/ H* N/ d7 ^
//#define  PING_PONG_BCNT       1
! @6 f; M9 \6 n/ m* `#define  PING_PONG_CCNT          11 F2 y) H& C1 W! H' s3 y# X7 b
#define  MCASP_BASEADDR          0x01D00000" v' a& S7 E6 g4 o. G
#define  Mcasp_RXEVENTQUE        (0u)
, J3 @* Q4 d/ }' x! ^& E+ d4 y" i1 J) \- H
/* OPT Field specific defines */
2 h( \, S! n  }2 l, Z#define OPT_SYNCDIM_SHIFT                   (0x00000002u)9 q, ?, C# D7 g/ n! D, d
#define OPT_TCC_MASK                        (0x0003F000u). D0 ?( l) v  K$ m5 ~7 r
#define OPT_TCC_SHIFT                       (0x0000000Cu)
- w' A$ c- O( H1 g$ a#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
& G8 T7 K* Q3 S. k#define OPT_TCINTEN_SHIFT                   (0x00000014u)5 h% }* z+ y2 v+ s2 i) W
( C- [$ b3 i! e. H- C
char ping_buffer[PING_PONG_BCNT];1 }3 H, F1 Z2 H/ O1 h0 E  z
char pong_buffer[PING_PONG_BCNT];3 b0 V. P  h: I% s; @
: N9 Z: m( X6 e  r9 q

# a2 Q4 S. |! y9 ^: w: \; h+ ?9 m% q, s: [$ V  W# w
5 k( x  V9 c; y) z
static void ys_edma3_init()
' z# ]; }0 X1 b$ z1 a. V{. S0 e+ i% a' _9 M  Y
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};% r8 N* s* [+ E# x+ Q
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
7 n# d! g2 r. @) b        EDMA3_DRV_Handle hEdma;. @- Q1 P' Z! z7 d4 c9 _* U+ i/ M. j
    uint32_t chId   = 0;
4 w$ d$ i' e3 N5 O- `' G( |7 h    uint32_t tcc    = 0;: m% P7 Y6 Z# ~
* z) a- d! Y& i2 j
    print2arm("edma3 driver init...",0);
8 m5 T2 f; P) q# ^1 y6 N
5 u& W( x  {- f        hEdma = edma3init(0,&result);, K  `! _0 m  _0 B0 C- a8 J7 W! E- C5 {* k
        if(hEdma)
! `* F2 J+ p, V3 a( H% `        {
9 \, ?  C. v9 D" @0 f- E: Y! X                print2arm("edma3init() Passed.",0);
, F! s  \+ f8 L        }
+ k; J  j6 i2 I3 @% |$ V5 G        else
' Y* Q- M% E: H        {
  Q9 f( `+ r. U! B                print2arm("edma3init() Failed.",0);* h8 B. v% O+ n; S/ J" c/ w
        }
7 U" l7 X8 d' K       
# ~1 m6 l; |, {5 N        if (result == EDMA3_DRV_SOK)2 d0 o5 o! k( G) f
    {
5 _7 u) A, e$ S7 e                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,- U+ b3 b8 o5 }6 a8 r$ i1 o% [
                                                       (EDMA3_RM_EventQueue)0,
0 k& w& W6 H! t. I4 ]2 Q/ e                                                            &edma3_isr, NULL);) j- r. O# b: B
    }
! b! R  ~6 _$ D  F7 y       
" j. l- O; b- x+ R5 T1 D        if(result == EDMA3_DRV_SOK)
1 K" X2 _) c5 p+ \  I' r7 A        {' F+ m; E1 r8 `0 g* `$ F
                paramSet.srcBIdx    = 0;
  o* b, Q5 r0 i' V4 r                paramSet.destBIdx   = 1;
$ v( D8 w) X0 q! g5 q5 s& ?7 i                paramSet.srcCIdx    = 0;9 |2 N0 a4 ^4 J( \7 y, j; {
                paramSet.destCIdx   = 0;
" z0 Z# s6 ?. w: R% H% r8 F3 |                paramSet.aCnt       = PING_PONG_ACNT;& t  f5 }, T/ `. U3 m3 Q0 y- f
                paramSet.bCnt       = PING_PONG_BCNT;
- ]2 o% e7 S0 m$ y3 E2 r! d                paramSet.cCnt       = PING_PONG_CCNT;
/ D+ D) z3 h* j; Y                # a" q3 E4 j3 i* ~: @
                /* For AB-synchronized transfers, BCNTRLD is not used. */
5 o7 n% a5 k/ c# ~/ @1 x/ R! t                paramSet.bCntReload = PING_PONG_BCNT;
6 q8 ~7 _1 Y7 E/ M' i; S; c. C0 p6 B# n; |
                /* Src in constant mode Dest in INCR modes */0 k+ z) j4 K4 z* L/ q# [( P! E. G
                paramSet.opt &= 0xFFFFFFFDu;3 S- [$ F" c. B+ L7 o. J
                //paramSet.opt &= 0xFFFFFFFCu;
8 h$ l* @0 Q0 V& K/ {                : r' J7 k2 U( J
                /* Program the TCC */2 g* M2 E: h+ a7 r7 A
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);" d" }) N: r6 K4 ?
- g6 `& [4 e! `5 V+ w
                /* Enable Intermediate & Final transfer completion interrupt */
3 @0 R8 f4 F8 `' c1 l7 j2 l- Y                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);( t/ |* u2 H7 ]' b& R. p+ v
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
4 U3 c; s) [  g8 y; o  A
6 D) P& u$ ?' t: m# M9 Q                /* AB Sync Transfer Mode */! P# G6 d" G$ S  p6 b8 e5 Y$ C
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
/ e5 \/ U2 t% A' d$ x               
' `' \0 O- O* q3 t                /* Program the source and dest addresses for master DMA channel */, u/ s6 b* b" I! e
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
7 g" l. j& Q/ r" B* M5 {0 P                paramSet.destAddr   = (uint32_t)(ping_buffer);
8 [7 ^2 t! M8 z* b" A" V* m
4 G5 X; x0 N+ U' ?4 d6 H! g                /* Write to the master DMA channel first. */
$ {  _9 B6 D. v3 ]) m* l                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);) e  _! Z6 k+ E7 U$ S: `; }
    }       1 j; T2 w0 R- i8 O

7 a+ k; O/ E* `7 Z' }/ e& X4 W        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
  z; e. q1 e* f1 r6 a* i        : x1 \& r4 O2 {; z& p8 w
    if(result == EDMA3_DRV_SOK)
3 Z  {9 Z- D/ v& n' Z, l% i    {5 C2 H) Z1 y/ a6 k4 [
            print2arm("edma3 driver init success.",0);6 V" h- _9 l2 }% @4 _% j5 S
    } ( |/ k9 U( d5 U
}' ?' A3 I9 n- O
( c  f0 G9 N# b0 B) q5 e

) {  q" v4 _, N9 a& h( J3 G) X( lEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。( C! _) E0 K( ?. U  o7 u/ J+ k. T
3 l" o) b6 V9 ^+ o$ d: z

1 p, G0 G) i  J
分享到:  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
( R+ N/ C6 ~: R' b8 K; `; M每次DMA传输完成后都要再次使能传输
7 n+ ]2 R* ^+ _6 ]6 @- N: z
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-1 18:24 , Processed in 0.058995 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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