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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
4 E1 `+ r: c  P& @#define  PING_PONG_ACNT          1
9 N: K, o3 k- t6 z2 J: z8 C#define  PING_PONG_BCNT          8*32*40
& e0 \1 f3 O8 j6 C- P8 j6 j//#define  PING_PONG_BCNT       1 * A+ O9 `- d+ ?* M# m$ k  X3 w
#define  PING_PONG_CCNT          12 }2 B- a" [+ m4 n
#define  MCASP_BASEADDR          0x01D00000
, X# R, F# |; D; @$ f) {( x#define  Mcasp_RXEVENTQUE        (0u)
) A. q) E+ v' p" e3 ~& Z8 s
; E2 ~* P- J( r/* OPT Field specific defines */
/ Q) \3 Z4 d6 V1 d# ]#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
/ D; [3 F) W2 T" p/ o#define OPT_TCC_MASK                        (0x0003F000u)+ g' C) b! u- v) f! d
#define OPT_TCC_SHIFT                       (0x0000000Cu)/ b8 H3 W: Z5 _7 E
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
+ G/ ~# _6 R' I3 u#define OPT_TCINTEN_SHIFT                   (0x00000014u)
( t" V7 p, [8 g. k9 ?4 L& H, [3 K" y1 ]3 _3 B7 i5 a
char ping_buffer[PING_PONG_BCNT];( ]+ \  S- A3 j$ w
char pong_buffer[PING_PONG_BCNT];
1 a8 I/ _7 p  F. o0 ^6 V1 [( W1 y5 N5 K+ q( \$ i% }6 Q$ D" Z

4 p+ R. x; H2 l$ o; Y
. y% L$ n% @6 u  b7 s) m9 q; e5 z2 t4 h/ s% S2 R- o5 O* v
static void ys_edma3_init()
7 _: Q" B( q! o8 q{( g; D$ w/ `6 k9 S- l- ~2 H
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
! h- H8 |2 Z* J% W% |4 D# ?4 [        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
6 N" s# s& ^1 A" o# F1 r        EDMA3_DRV_Handle hEdma;2 H- m% n9 J, q2 K. `6 Q4 h
    uint32_t chId   = 0;  N% [& |, G) @3 t7 s& v; `. j, r
    uint32_t tcc    = 0;
8 r8 H2 P% O- K/ K9 \) [8 m4 W- r. W
    print2arm("edma3 driver init...",0);
3 Y: _) O/ k' `) D6 L; x3 }6 }" _/ p
        hEdma = edma3init(0,&result);
# `' `4 q. u) c8 E9 E/ b: N        if(hEdma)
: F; g0 ~) N/ S" H3 U8 ?" p2 ]- s- p        {
8 V- j6 m0 y+ s- S4 x                print2arm("edma3init() Passed.",0);3 K* z7 q& B; J! d+ p1 Q# f
        }
& U1 _, [' B3 g: P) L8 T        else$ w* {, s0 ?1 f5 `- M4 `
        {
9 C. Y9 ^) ^. A  u6 v8 S                print2arm("edma3init() Failed.",0);3 i: o4 `6 y) f
        }
) ~3 x+ O, U0 ~3 o       
5 a% h& I- g& `7 \# m$ M        if (result == EDMA3_DRV_SOK)
: f. b; C( V7 p4 c  E    {4 q; m) f* e# j3 j
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
. N6 [* C6 s, _- A  S2 a9 a                                                       (EDMA3_RM_EventQueue)0,
1 ]5 g; z* T0 [5 I  q0 h                                                            &edma3_isr, NULL);( s" W4 d, M; Q
    }! V1 ~! o" W; P0 a( V7 Z! E- I3 O9 V
       
- H4 V" d3 h! L: p$ d# k$ j+ u        if(result == EDMA3_DRV_SOK)# o. v, v$ o! I- G
        {
2 O! Z# t$ j5 ]/ X                paramSet.srcBIdx    = 0;1 O  t/ X! Y6 g5 `8 U3 C9 D
                paramSet.destBIdx   = 1;
/ q0 U4 v8 w, L2 t$ F6 J, |/ u                paramSet.srcCIdx    = 0;/ Q; o3 e4 n& q8 R- n
                paramSet.destCIdx   = 0;
" ^+ D* X' c$ e# N, M7 v                paramSet.aCnt       = PING_PONG_ACNT;
1 w' p4 ~' S, M: Q                paramSet.bCnt       = PING_PONG_BCNT;, V( r! l3 I3 a$ V& ~
                paramSet.cCnt       = PING_PONG_CCNT;& H' o, m) I( P3 J* y, c) q* Y
                6 f6 B* Y2 z1 j" P
                /* For AB-synchronized transfers, BCNTRLD is not used. */) H0 d6 C) M% T  G8 i
                paramSet.bCntReload = PING_PONG_BCNT;( u0 k. t( y+ I% D: j3 N

! m+ W6 G: r5 H# a' ^( O                /* Src in constant mode Dest in INCR modes *// ^1 i4 N& f9 J6 k( u/ O5 `
                paramSet.opt &= 0xFFFFFFFDu;; J1 Y% j6 T  l% M" z
                //paramSet.opt &= 0xFFFFFFFCu;
# q7 B" e( O% L% Y/ b- H+ d; g. A               
$ D8 J2 ~7 a! k& V+ V                /* Program the TCC */
  w4 j, P& H& M7 Q8 q- u, b                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);2 l( M9 P9 o3 a' B2 Q( F- T! n

' I) \; _; a: f" I' {( f/ p( z                /* Enable Intermediate & Final transfer completion interrupt */
2 X0 N) a3 E! u/ A                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
5 `! O- q0 h* _9 J  ^                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);3 M" N$ O$ X; p$ Y

5 ^0 Q7 U/ P& ~2 U) Z                /* AB Sync Transfer Mode */7 }$ K! r& \0 X1 H8 ~! F
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);) F/ n! v) c, d5 o$ x
                  B! L' n0 ]7 G0 F9 ~5 [! m
                /* Program the source and dest addresses for master DMA channel */
6 ?2 w, z8 D* ]& t' j- |                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);1 n4 O- J; j, @! w0 |
                paramSet.destAddr   = (uint32_t)(ping_buffer);
0 P& y/ @  [2 o. q' G$ y8 r7 I+ g& B) ]! Y* u
                /* Write to the master DMA channel first. */* S5 z' b+ D6 @0 B& i4 M
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
- Z" D& h$ @4 D# G2 e    }       " R  T) C* P0 `8 r# ?
. T5 e# n; W6 I% i6 a4 m2 Y3 ^
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);4 z" }) w# N9 \7 Z
        : Z& A! k' j" L: k( o3 e% n" \
    if(result == EDMA3_DRV_SOK) 7 M& \  a! ?7 T1 d( O: V
    {* Q' I9 D" D$ e
            print2arm("edma3 driver init success.",0);
. x* t' Z8 O3 D5 f$ {# K    }
& o# v8 _3 |3 l9 [) U}
8 `  I' u' \8 ^+ q
- l' y% ~9 H: w( `/ S( Y1 ?
9 x* g- b5 V2 vEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
% \$ L3 n. J) K: G* S! a
) l* z+ v% W3 T! S- C' R/ |3 q' E
分享到:  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
7 ~" H  R( r) n' J每次DMA传输完成后都要再次使能传输
* Z- F7 @; r( j7 n
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-12 09:57 , Processed in 0.037549 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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