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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
/ l* p# t) j$ E1 L- O#define  PING_PONG_ACNT          1- l8 H$ N& W4 }6 I
#define  PING_PONG_BCNT          8*32*40 6 j6 ^& w( `' q& h' B4 H
//#define  PING_PONG_BCNT       1 ( R' |0 c) L; I8 `" j
#define  PING_PONG_CCNT          1
$ D: ~' v' R. R5 v3 \# a1 d3 ]#define  MCASP_BASEADDR          0x01D00000' x) V! X# `2 J1 P4 t! ^
#define  Mcasp_RXEVENTQUE        (0u)3 X) l; s; b2 `+ l  v- k  k
7 ]5 v/ g+ O# [" a
/* OPT Field specific defines */
% a: s/ {5 t" Q. p#define OPT_SYNCDIM_SHIFT                   (0x00000002u)( D' U$ @$ i  D  o8 v- w9 }
#define OPT_TCC_MASK                        (0x0003F000u)' c* Y( T4 T1 |4 N: R, |
#define OPT_TCC_SHIFT                       (0x0000000Cu)
9 Z' [+ p; o* Y8 K7 e' M#define OPT_ITCINTEN_SHIFT                  (0x00000015u)2 I1 J0 z( o' T: a; d
#define OPT_TCINTEN_SHIFT                   (0x00000014u): u1 w; d6 Y  r: V1 o$ E+ n4 U9 f) t

3 K  N- F2 N' B/ M* A0 xchar ping_buffer[PING_PONG_BCNT];" `& h0 s& c* r/ n8 w/ g) v
char pong_buffer[PING_PONG_BCNT];
5 s' a: @8 [1 t3 W5 i' H2 S' U* @: M6 ^1 p: g
$ t0 o/ u2 O# p+ ?  a5 o
( v/ y; N- W  i' q& \

5 r$ C4 D! j$ a9 Tstatic void ys_edma3_init()
7 G3 x. V( J1 w{
0 D& {! Q6 b) o) Z7 R        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
& u2 B5 Z6 e1 r# d+ z        EDMA3_DRV_Result result = EDMA3_DRV_SOK;7 E, i9 S. t8 x& @4 F' D# u- j
        EDMA3_DRV_Handle hEdma;
% w' N' Q3 Z- L5 j4 _, C    uint32_t chId   = 0;
4 Z. x8 A4 ~, X0 K1 G; Z    uint32_t tcc    = 0;+ }; ]! Q4 N- `1 k' i) ?$ E5 c
4 \' r9 l7 S1 u) F- e1 `9 Y
    print2arm("edma3 driver init...",0);: q0 b" m4 O8 G3 R  y5 O

5 h( G* u! ~2 @  y  ~: Z        hEdma = edma3init(0,&result);
" X& z( r" G$ O, ~" F, j0 r        if(hEdma)4 O& g  E  T  Y  t: Z* x8 o
        {; C$ k2 H0 \$ g3 J5 \5 w, f
                print2arm("edma3init() Passed.",0);
" D" z8 n- x" J3 W$ q% I7 b3 K  L        }+ s: G) u! V2 s
        else
* P" y( y3 P% ~        {
# @8 O$ d4 R* j                print2arm("edma3init() Failed.",0);) t$ i; m  _" U, l' ^/ B9 A: F: B
        }
, r9 w3 T, _; D9 Q* k. g0 v        ( G: a! G/ T. {" B
        if (result == EDMA3_DRV_SOK)( U$ Y) r  N6 W; h
    {6 s8 D& |. `2 p8 Y) @9 {0 f/ y/ c
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
9 Z  P% Z) v5 K! k                                                       (EDMA3_RM_EventQueue)0,6 W; F* H, P, b5 S: Y9 Z+ j3 U
                                                            &edma3_isr, NULL);1 T6 b; O3 u- x6 g# \  h. D
    }5 k. A# x& Z* D! c- d1 r
       
0 Y& ?5 T' j$ K" _2 T5 ]0 U5 L1 b        if(result == EDMA3_DRV_SOK)
+ \. A& y+ T" _* _( f        {5 b; i2 A5 e7 p0 M5 y
                paramSet.srcBIdx    = 0;( U# ?" @1 }; ~; |8 O, D" X, b: [9 s
                paramSet.destBIdx   = 1;
1 P( q- H8 P4 T- a, h                paramSet.srcCIdx    = 0;  g; Y9 H6 t7 e1 e$ c
                paramSet.destCIdx   = 0;, i: t! J5 O, P6 Q& ]
                paramSet.aCnt       = PING_PONG_ACNT;
6 Y# H: t) j& Q4 x7 ~$ W                paramSet.bCnt       = PING_PONG_BCNT;
3 N: S  r8 i; L1 q( p                paramSet.cCnt       = PING_PONG_CCNT;
0 L. E( Q& v  u8 U                9 n9 M  d7 {6 i6 h
                /* For AB-synchronized transfers, BCNTRLD is not used. */
% \9 i' P- c) J: u- W, z                paramSet.bCntReload = PING_PONG_BCNT;0 n; q0 u5 P/ @8 H
* g" o+ L! v( H' c" M9 }
                /* Src in constant mode Dest in INCR modes */
6 n+ h. ]( a! u, j7 o: E                paramSet.opt &= 0xFFFFFFFDu;
" @% H# q, d1 V; j- n: }                //paramSet.opt &= 0xFFFFFFFCu;
9 c* S6 X/ P# N, ^                7 s' [) K2 J% |7 C, s1 Z- C8 c2 {
                /* Program the TCC */. X' U" N0 I& u: N1 \9 x
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
9 v' M5 G# H3 k" a
7 |; J1 [: y/ }8 t8 s2 o7 S                /* Enable Intermediate & Final transfer completion interrupt */5 f- Z9 Q  R1 T" h- L" B. o
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
! Z! J  [) r) @% M                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);! e& i8 o( W/ [( ?! ]% O

' w6 V! W, L/ n2 ~/ v                /* AB Sync Transfer Mode */
! Q, [/ ?  y/ o/ y                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);% y$ X% m, r$ ^0 l# i7 O+ O% n( @
                : O5 W* o2 D( w2 @
                /* Program the source and dest addresses for master DMA channel */( N/ S' Y! l. j* }! E
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
! D1 N% ~& q& o9 _                paramSet.destAddr   = (uint32_t)(ping_buffer);% f1 X& {  i7 `

% r( A; ]" _- q* `% E- C                /* Write to the master DMA channel first. *// \6 g( p, o  r' h  L% o  |( L1 r
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);5 B8 @+ B9 p& A( u* s7 M
    }       , l5 J' n( e! c5 n' B

. |, y! V) E' C5 T        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);3 a* y3 s+ R* \" c% d- _; J
        ' k$ }, o$ q* K8 A! }# [
    if(result == EDMA3_DRV_SOK)
6 ~7 o1 [( a. E: R7 K    {
$ h' j2 T' y% p. b' x+ k            print2arm("edma3 driver init success.",0);9 l( U# S5 H" b1 g; E8 d9 \
    }
. I7 L6 ?1 [2 q4 E4 ~! [! j/ u/ e}9 f9 m& ^2 \- R+ l# @. v

) t+ B( |' w5 F4 n$ l; }* L$ @2 m1 _' V8 ?3 I6 Q, G
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
" o4 y- s) A- @4 T" S
4 G3 f" N% z7 N
0 e" f' U) p* m5 J+ 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
6 I. v! a' u7 N7 M+ g! `每次DMA传输完成后都要再次使能传输
2 Q  |3 k& o  f& ]7 t% f
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-23 12:06 , Processed in 0.040533 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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