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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
+ c9 o& f& k" }: S2 I; |#define  PING_PONG_ACNT          1- T- Z1 I2 ^9 I0 ?, S- X5 w  R% }1 Q
#define  PING_PONG_BCNT          8*32*40
4 Z; b% p& F5 f& v9 ]3 }& @9 c//#define  PING_PONG_BCNT       1
' G# R) `  }* W# U7 _) r% Y#define  PING_PONG_CCNT          14 a. Z8 Y' g' A1 L: ]. i
#define  MCASP_BASEADDR          0x01D00000
- `- G% c7 }) h" `* T#define  Mcasp_RXEVENTQUE        (0u), ~0 P4 \# l( @: H' j! C: D% G

% t/ t% m7 m, G* ]+ S1 `2 g- K. ~/* OPT Field specific defines */
* ^1 q2 L5 {8 B  x9 R#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
. u8 Y7 m) F: {  E  j) y2 j6 I#define OPT_TCC_MASK                        (0x0003F000u)9 A/ ]7 s8 L; j3 X7 w
#define OPT_TCC_SHIFT                       (0x0000000Cu)
9 F0 ?& c0 U; Y$ T9 _5 L% a#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
% o  X$ F/ W1 u#define OPT_TCINTEN_SHIFT                   (0x00000014u)
. q- V+ ~2 W3 P  d1 |3 ]% |
' N6 [' [7 _( g: U: ~/ uchar ping_buffer[PING_PONG_BCNT];
$ [/ E* t  B' {* M) mchar pong_buffer[PING_PONG_BCNT];# g' x: X# r% P

! m3 d0 |2 `: z5 T3 H4 l2 ?( n$ `0 h9 A3 ]3 S: k4 O" J& p

( M+ p( I; \3 ?6 e0 {6 e
6 o/ ?0 J( f/ ~1 W: F# Estatic void ys_edma3_init()$ l/ g& R! T7 p2 Q: Y
{
/ T) h- Z2 @! l/ k        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
  o/ X2 P6 w2 i, n" V        EDMA3_DRV_Result result = EDMA3_DRV_SOK;+ y/ t& B- f3 H8 g- V
        EDMA3_DRV_Handle hEdma;& z1 U3 N4 F! c2 f' U- b/ ?
    uint32_t chId   = 0;
0 D! x, d1 F( Q- \, v    uint32_t tcc    = 0;
7 `# ^5 n' l/ _, W% x; s' G+ I$ |+ N9 T" h: r' r
    print2arm("edma3 driver init...",0);
8 Z: B/ `; P2 B0 U, Z* }  p) B' V3 W2 X: O4 L: s
        hEdma = edma3init(0,&result);0 h# C# J/ n; L& {2 l) j$ t
        if(hEdma)
1 J6 R2 K9 c" ]4 i. P. q        {3 b2 l8 R9 l, Q& d# `) W
                print2arm("edma3init() Passed.",0);
+ [4 x6 w  }2 ]+ V4 e        }1 p- h% b* Q* Q7 Q( r% @$ F+ L
        else. K( w4 ?* y/ \: k6 Z4 t9 j! K
        {
9 r$ F6 H1 k! ]+ b* D3 ]% _* K4 Q; F                print2arm("edma3init() Failed.",0);
7 U; }7 T2 B7 `0 v0 F! ~  \  G        }' z7 K+ \; p6 i4 }$ _# e% L
       
- [; Y; ~3 O$ m5 C7 \        if (result == EDMA3_DRV_SOK)
% T: V0 {  p, d2 x* R& e, V    {
* h$ t) }+ O9 i) ]6 x/ z                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,; @4 ~/ I4 T/ u
                                                       (EDMA3_RM_EventQueue)0,
2 c( ?, g, [! m0 c( E/ l# F                                                            &edma3_isr, NULL);
) Y+ N/ W- G& R; A+ n    }5 S3 s' O% y+ B  l: k- K
       
' y. i6 j% f5 Y1 B! Y        if(result == EDMA3_DRV_SOK)
% I( m) l- u, Q. w5 E2 z        {
3 J$ N' O7 N% ^' v5 c# x                paramSet.srcBIdx    = 0;3 \1 J* m( ~* E" O( K& v, D" f
                paramSet.destBIdx   = 1;
# @0 z/ A+ u3 |* i1 D' m6 D                paramSet.srcCIdx    = 0;
* S& K* T: W0 b                paramSet.destCIdx   = 0;* V) i9 @2 ?/ h1 U5 C+ I
                paramSet.aCnt       = PING_PONG_ACNT;0 \' n. @. X4 t" f
                paramSet.bCnt       = PING_PONG_BCNT;, A8 H' T& |4 N9 v9 b
                paramSet.cCnt       = PING_PONG_CCNT;
# Y( a. _9 d5 i/ B               
  Q! E5 w, o; J7 d  a                /* For AB-synchronized transfers, BCNTRLD is not used. */
4 k3 `% @1 K4 b                paramSet.bCntReload = PING_PONG_BCNT;1 d% n) D! e, N8 {1 q

$ [# d" l. c0 |. Q9 O! U" ]. x                /* Src in constant mode Dest in INCR modes */
5 [% D5 n- u* o5 w- Q; u  X                paramSet.opt &= 0xFFFFFFFDu;8 B4 i2 Z8 ~2 f
                //paramSet.opt &= 0xFFFFFFFCu;
, x# A* u; x% C% |$ p. V                % h1 \  A& \0 E* ?9 V
                /* Program the TCC */( d7 C7 e3 G5 j) Z1 E2 Q/ _
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);/ M# ^5 W: N: v0 @8 h
' u* F4 G* c* d4 t1 ?
                /* Enable Intermediate & Final transfer completion interrupt */1 d3 R: }4 \% N( V+ m& w7 P! n% r
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
4 e! ]5 G- Z1 k/ `                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
; G! p, p; B0 [+ i. Q+ C" F9 m4 q1 _1 k  K' v/ _8 N7 @: [
                /* AB Sync Transfer Mode */
0 @* u8 g5 t5 ~7 n                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);! d$ s5 W9 N5 `8 T1 y
               
: x) ^7 J0 j. k/ w4 B                /* Program the source and dest addresses for master DMA channel */
, R8 V/ a2 c! P8 E+ b- |6 a                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);* X3 F( s/ ]& T9 h1 G1 C% s* W
                paramSet.destAddr   = (uint32_t)(ping_buffer);  v8 l7 Z; x. e9 s( P

7 y" m" I  m/ E# Q" u! L( Q                /* Write to the master DMA channel first. */
/ m% O7 f7 r; f                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);7 t" r4 p* @, M. o
    }      
: U( v1 N/ z8 l( Y; G  N8 n9 L8 o+ O: T; R6 m8 _3 y, r( Y  n
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);; g% {( |% r! M/ G% N
        ! N# I4 ^2 h, {2 m6 _" S: a2 ]
    if(result == EDMA3_DRV_SOK)
/ t7 L9 F: q. Y: X- k" ]& P' \    {
6 F) z, `, O/ B  d- K) r$ }8 f            print2arm("edma3 driver init success.",0);0 ^  ^* @2 B: q
    } * E4 R. h5 J* k7 w2 j4 x
}
4 A, q( f- @8 f+ [8 f# L0 v4 W) A6 p3 K) D
" \8 A7 W3 a, s% I% z. j3 [
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
$ B# A; z( k4 X! Y
! y1 n: w  p" l& X3 e; l
0 C* Q% N* e6 \2 |
分享到:  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
/ _1 S* e9 ?# d! A每次DMA传输完成后都要再次使能传输
/ {+ |$ u+ M' V' i
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 00:04 , Processed in 0.044555 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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