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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
6 H4 {/ \- \! T#define  PING_PONG_ACNT          1& g9 f5 R6 t0 f- i# g' r4 x
#define  PING_PONG_BCNT          8*32*40 + J& r: e. ?* f0 V
//#define  PING_PONG_BCNT       1 9 ^( b: i$ e/ M/ s% A: h$ E4 |' L
#define  PING_PONG_CCNT          11 L/ s4 u' R8 C; X( s7 G$ S
#define  MCASP_BASEADDR          0x01D00000' R# v9 R( D! ^  L; q+ r- l
#define  Mcasp_RXEVENTQUE        (0u)* c2 |' f* Z, k7 L- Z
) d5 \( U& k  a7 y0 _1 ]
/* OPT Field specific defines */
3 q- d  a/ j8 s5 {( J& z$ D7 V#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
% X: [3 P5 j( I! h( U7 u7 J; G4 `#define OPT_TCC_MASK                        (0x0003F000u)
3 A) @% ]3 g( d- F1 y' n( l#define OPT_TCC_SHIFT                       (0x0000000Cu); i* i; Q+ P4 T1 U# B4 }
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
8 p! M& M' U& l#define OPT_TCINTEN_SHIFT                   (0x00000014u)
5 z9 @! k' N  ]1 I8 d1 l& Y5 }. E) A6 `, I
char ping_buffer[PING_PONG_BCNT];
0 C/ j2 R; G2 W5 W" y( O2 R1 dchar pong_buffer[PING_PONG_BCNT];: A/ Z0 n( Z! B* G1 F/ a5 d& ?
7 E0 b  |2 ~+ @

  T" E  w9 W: v& y$ I3 t
# T% }0 R  ~/ c" {4 v8 v1 B9 L& g6 _/ n( c9 a8 I4 B, q' X8 G
static void ys_edma3_init()
% x7 j( F' H, m8 r' c6 h2 ?{: a% E! Z; r6 k% B" [
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};2 x- O3 [$ f3 ~! I
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
1 o+ @* E0 F5 H, |7 H& H, I5 R9 h        EDMA3_DRV_Handle hEdma;
1 D, E5 L, {5 d' X6 }; q8 S7 k    uint32_t chId   = 0;
5 P+ I0 B9 }% K, C: U    uint32_t tcc    = 0;9 {2 d: Y' r8 w+ v# f& {* E# Z

/ K+ W7 {% S% M3 w( w. c    print2arm("edma3 driver init...",0);
- S% J7 {/ {7 b. f
8 V( ^- ^& G2 H# k7 P' c- f        hEdma = edma3init(0,&result);
, Z7 e: z5 ^1 \) e: W        if(hEdma)
* B5 [) @" q# R# J$ N. J) p  y" Z        {/ d" v2 X5 n: X2 d3 |+ q
                print2arm("edma3init() Passed.",0);
% _6 ?) s$ m2 t% b$ Y4 F" F        }
9 D1 t' z( n. P5 N; X# C        else
8 r7 Z  O) B; n1 o- \1 H        {% @8 l, F8 r8 E
                print2arm("edma3init() Failed.",0);- f! E2 {3 _' v3 n. U$ p- \; ^: Q
        }( l) H$ |4 ]5 N5 y, c& A/ n
        . V: _, r. ^" K$ h9 N, X
        if (result == EDMA3_DRV_SOK)7 ?: U+ I$ N' T
    {
$ ?! g* M, s; \/ {( l8 g! u" q                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
8 f, `  ^) ~0 U% W7 s+ ]                                                       (EDMA3_RM_EventQueue)0,
' N  g7 W9 {, k% l                                                            &edma3_isr, NULL);
1 p' i9 I; D1 o* F' M6 r% P0 w" z    }7 _# c/ u5 Z0 {, v/ b
        9 s! d9 V/ U: D2 f4 S
        if(result == EDMA3_DRV_SOK). F, f( B: U: c& P- ^4 T
        {. }5 q, N7 E7 d- m2 C- M' K
                paramSet.srcBIdx    = 0;
4 v7 z$ G+ Q* o" i  A0 y( V                paramSet.destBIdx   = 1;
& \  c9 c/ z! x" \                paramSet.srcCIdx    = 0;
+ G( v6 z7 `) B' Y# V- P0 ]! \1 y( u                paramSet.destCIdx   = 0;
; e( M+ }9 C; x) X( ?) {                paramSet.aCnt       = PING_PONG_ACNT;& t# ^( m( _) a& e7 @/ B! [8 a
                paramSet.bCnt       = PING_PONG_BCNT;" O% o4 U9 K* F+ V
                paramSet.cCnt       = PING_PONG_CCNT;9 F7 v. n! D% ]" F
               
) V3 ]3 g: _7 c; u% H1 J                /* For AB-synchronized transfers, BCNTRLD is not used. */7 S+ T% o# N2 h% z
                paramSet.bCntReload = PING_PONG_BCNT;8 A7 e1 S1 X/ Y& V

  b$ l+ ^& k% B$ L                /* Src in constant mode Dest in INCR modes */
! o, p- _. g5 G# A1 x/ Q- n" S* w                paramSet.opt &= 0xFFFFFFFDu;$ Y1 z* C1 Z( S
                //paramSet.opt &= 0xFFFFFFFCu;
4 F: x- U$ }+ w               
3 H  b+ l, t% Y" P! o, R8 x) }                /* Program the TCC */
* N0 Q& d* x# z6 w                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);# }& V5 k3 R( J9 V/ G

7 Y$ W: R  q5 f" u' c; P                /* Enable Intermediate & Final transfer completion interrupt */
9 Z, T7 m" J5 h8 K                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);& R0 X5 O% n: s& U& R  C
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
% \: Z6 ]! j& K' m2 c6 E' z9 t9 g, E9 Y9 ]) d3 A* [! u
                /* AB Sync Transfer Mode */
; L* P: B. {" ]! J' J8 [3 Q                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);# O* w$ O6 y- V
                6 k6 ^9 `& B7 Q1 z
                /* Program the source and dest addresses for master DMA channel */0 i2 b  I; C) z% Y% U+ W. Y, c& {
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
/ L1 U6 f6 _9 D6 f                paramSet.destAddr   = (uint32_t)(ping_buffer);
; b. K9 w: C3 W: G/ @* A% U& v( Z4 l: t; s. p! o% L
                /* Write to the master DMA channel first. */* @9 v. D- y1 ~! t2 A9 h$ {
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);( x  _* E! z- _
    }      
, d& \, U% Y: e+ M7 P& i; t4 v( F. J- [; m! V  N8 ~2 P3 B: O2 m. W
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);9 q6 f8 P3 m8 i/ l
        4 _! \# F' i! P+ O% _4 \+ K" l
    if(result == EDMA3_DRV_SOK) ! X8 t; Q3 F* y/ v6 b6 R9 Z) {
    {
- ~0 ~5 r7 @/ a6 Y            print2arm("edma3 driver init success.",0);3 v, t: O0 t# M3 }
    } - J* n$ |: F1 f9 F+ D+ f3 z
}; ]- m6 c, W7 S+ n* Q
4 h  ]$ @2 W2 q1 A; w
, u6 ^0 C5 Y, ?( K
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。! v9 J- w7 ~! u

9 b7 f9 R# {2 ^& Z7 x+ W7 l3 y
: h5 \, f# P4 s7 @7 u
分享到:  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+ {5 p9 ?9 @" z
每次DMA传输完成后都要再次使能传输
  b8 {7 ?; U- U4 N8 Q7 w+ s
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-3 00:42 , Processed in 0.042364 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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