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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:8 @5 X: p) L7 h! u: U! e8 E
#define  PING_PONG_ACNT          1
# }6 P" V2 ^6 N# H#define  PING_PONG_BCNT          8*32*40
* P% Y. Z" G" p) w//#define  PING_PONG_BCNT       1 8 ]5 n# g! Q( K3 ^' a
#define  PING_PONG_CCNT          1# }* B& u" q& o; O3 ]
#define  MCASP_BASEADDR          0x01D000007 k# ?* [9 b# U% J
#define  Mcasp_RXEVENTQUE        (0u)
/ _. r5 V9 E6 m2 V5 }+ S8 i8 g5 _
% }. t9 [, S, Q  b/* OPT Field specific defines */
& w: I/ t$ J7 E. ?#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
: r% I( {$ ^# o* B#define OPT_TCC_MASK                        (0x0003F000u)! p6 d# D  A( i3 o. }5 Q9 G
#define OPT_TCC_SHIFT                       (0x0000000Cu)
1 j3 Z$ E" f1 t! \: C1 l#define OPT_ITCINTEN_SHIFT                  (0x00000015u)" ~; b$ q% V! W8 v5 R3 d
#define OPT_TCINTEN_SHIFT                   (0x00000014u), L7 F  I- \3 F

3 w1 B2 {- U  Nchar ping_buffer[PING_PONG_BCNT];
# O: W: d& ]% I8 U7 w5 s/ pchar pong_buffer[PING_PONG_BCNT];6 V# O( v" I1 z; z$ c. c

$ U1 @9 ~) i: d# z1 ]' o  k
2 t/ H1 M3 B$ m& a2 E  G) L- Q* A; ]' j: h4 c- j$ @" `
, l3 ^6 k0 m* Q5 J
static void ys_edma3_init()" G. [+ P- A% }, W$ A& u
{
  U- E6 b5 k2 q0 L" v# l8 Q+ q2 s        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};" `+ `( K6 q0 D' O# Z
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
/ w4 W; g6 R' `. h        EDMA3_DRV_Handle hEdma;! M: X) G9 w" d7 r! W
    uint32_t chId   = 0;
3 r! X& ^  c+ B' Y1 v4 X3 H    uint32_t tcc    = 0;
, W8 T" }9 ]* U, O% c. |3 n% u( e+ Q5 E( Y( X
    print2arm("edma3 driver init...",0);# m2 L- Q/ |1 C2 {' I
# v$ |% R* R8 u, p% _
        hEdma = edma3init(0,&result);
5 i: f! y  [  V3 |6 F        if(hEdma)" u0 V8 v: _& H
        {7 H# K% _' A; j  B6 ?& v) t; t
                print2arm("edma3init() Passed.",0);3 S  e1 X8 q% K! w1 y' V
        }% `. B( _  G. s
        else2 P' z3 w' t* o$ T
        {- J2 k) b3 I9 V  ?3 `- o5 F2 |
                print2arm("edma3init() Failed.",0);$ d" K+ ?) G% g
        }( ?7 L5 K. }6 e7 o4 d1 S
        9 l4 a& l8 q; @! W) Q$ l
        if (result == EDMA3_DRV_SOK)
9 X; T3 o$ U+ e. X2 d! R    {+ O5 ]7 ^* V( T& F
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,/ t( `; ^9 |* Q6 }6 C% ^( y( [
                                                       (EDMA3_RM_EventQueue)0,) [2 A" u/ k1 y" F* W
                                                            &edma3_isr, NULL);
1 e; m' V, i4 j" K" ?& o2 V    }
; P5 ~* @3 ^( k) d' I! d2 e2 _       
( z$ o' t# V, }# X) v& g* Y( w+ N( n        if(result == EDMA3_DRV_SOK). q; R  f/ i& u+ \/ _1 M4 Q# _; T$ U
        {' @2 y2 y' Y9 _6 h) W/ r
                paramSet.srcBIdx    = 0;
. j/ Q# r. {6 \; _4 M% g& @. s                paramSet.destBIdx   = 1;4 f% j7 X9 i& p- n# Z$ I! ?# G6 @
                paramSet.srcCIdx    = 0;( A9 |9 S8 ]* D/ c0 ~
                paramSet.destCIdx   = 0;
9 \2 a# \! _% h/ _- P3 n" J. a/ L; M4 E                paramSet.aCnt       = PING_PONG_ACNT;/ E7 j3 o* |  k
                paramSet.bCnt       = PING_PONG_BCNT;
" b- \% e2 z8 F+ i                paramSet.cCnt       = PING_PONG_CCNT;
# r, `. i6 n. s( ^               
) U% w# Q* q- u: ?                /* For AB-synchronized transfers, BCNTRLD is not used. */3 t8 U5 q$ V! ^7 _* s; ?
                paramSet.bCntReload = PING_PONG_BCNT;
: q2 O$ W& g6 ]4 p, _8 i/ s3 i8 m7 [1 K! ~( g8 f5 O. x/ q. R+ W
                /* Src in constant mode Dest in INCR modes */
+ i4 F( K! H+ @# t# R! U# p                paramSet.opt &= 0xFFFFFFFDu;
( v2 C6 Q- ?2 Z1 b5 {% d                //paramSet.opt &= 0xFFFFFFFCu;& j% V- Q: j0 P4 k1 a1 Z! a
               
% H) D/ o/ V5 P  B) v: t                /* Program the TCC */" d9 X' @, g) |
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);3 j6 D5 B+ u0 h+ A4 g
6 [8 S# V# i( ~# S/ [- q; [4 o
                /* Enable Intermediate & Final transfer completion interrupt */
) B4 q4 C  J2 ]3 U8 v                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);: I" @" t  \, ?$ y* z
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
# J6 E( }% F4 {
+ Y3 d$ s8 l' Q5 G                /* AB Sync Transfer Mode */
. Y$ C( q6 F- X8 n' I$ O( Q% W                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
) ^  b# t/ V/ M" h0 |5 v0 G               
; C- B3 n# T) g                /* Program the source and dest addresses for master DMA channel */: e. J& g, k. M$ C8 w& T/ c; ^0 c9 B
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
0 H( z7 B9 o: V: v+ ^; v                paramSet.destAddr   = (uint32_t)(ping_buffer);
: I3 L, m2 w5 I. h# k* P  J, n& e* z- _: r. m
                /* Write to the master DMA channel first. */
4 |7 H4 R( q; _. ?7 C+ f8 G. {                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);" Q- E7 A6 q; c& a
    }      
7 ]; n' O: H2 R6 s# n& `3 k' Y4 v7 |2 ]# P% @( x8 h
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
. y' u9 m, j  }. h1 e2 B( {2 |0 L       
8 ^7 A! x! ~1 s6 s1 l. Z0 `9 o5 E    if(result == EDMA3_DRV_SOK)
: I/ w/ X4 R/ D    {8 N; R  b5 o6 R+ r& b& f1 Q
            print2arm("edma3 driver init success.",0);8 l* O3 B/ f' O4 D
    }
8 |# \! l5 ~# `! w5 j. Q3 m" p- w}9 s1 M9 K& }" I; h  w# d& F: \

2 k% F1 c) _: T. N1 Z" p7 z0 n; {& g$ ?
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。: [9 t8 U+ M- b: P
5 ?. K$ C, l: ]9 i) \  J5 ~
9 V, E% q# x" H: R& z# w
分享到:  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
( Z  s2 |0 x6 p% M7 R5 e每次DMA传输完成后都要再次使能传输

/ T; h9 O# {+ v% S! h3 v% o原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-24 14:53 , Processed in 0.040651 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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