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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:2 z; `+ ~# S; Z( k/ ]2 b6 o
#define  PING_PONG_ACNT          1/ w  F5 U' B7 R0 B$ E" l5 J7 _
#define  PING_PONG_BCNT          8*32*40 # z. T& H, k4 m0 ?0 g
//#define  PING_PONG_BCNT       1 0 u9 M3 U! d3 J
#define  PING_PONG_CCNT          1# o# c) o1 O: G' K2 i$ }( ~
#define  MCASP_BASEADDR          0x01D000007 n9 z: J3 x9 H) ?! G0 e; P
#define  Mcasp_RXEVENTQUE        (0u)
$ l' v0 M$ H0 W3 u- `, h) Q) Z7 i: ]6 ~* T
/* OPT Field specific defines */9 T: W. r, o, t) o) S% d8 _) q
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
" Z" \. Q' c' B0 u4 P" `2 b! S#define OPT_TCC_MASK                        (0x0003F000u); |/ m9 z/ b; ]0 Z1 s
#define OPT_TCC_SHIFT                       (0x0000000Cu)$ X: F* W# N( l/ J+ g
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)  I6 R* r) \9 v) `5 C. ~3 C0 I
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
, x  O* b; Q' E+ f9 A+ y8 f: J9 G$ u& j  y' s  U% t
char ping_buffer[PING_PONG_BCNT];5 G: P! F4 t( v" w# n$ H
char pong_buffer[PING_PONG_BCNT];( ]1 k# I2 t+ D: q

- k# F4 ]9 j. z
3 ^3 n9 ?. t/ ]$ S2 B3 c) `. m7 a7 Y& f; R
- x8 n( a* p. U1 B4 l  v6 R
static void ys_edma3_init()
, R% L7 Y8 C: k7 y% s8 v2 ^{
7 k3 c; \9 |5 s$ `+ x! h. y        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};0 `- O3 T; }. I* R5 W* t
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
, ~# m% Z7 B, R4 _' ?! Y: m$ e        EDMA3_DRV_Handle hEdma;
2 K6 _9 i" U& @4 {9 t! g; a+ \1 }    uint32_t chId   = 0;; K' S$ L3 R6 ^4 S
    uint32_t tcc    = 0;# ~: y4 D* G* {. B! A! l! `

* U/ V; ?4 M: ~) ?- ~& R3 {( E    print2arm("edma3 driver init...",0);9 ]8 W7 p# t3 y% \$ {
  y( C7 k. N. [! c
        hEdma = edma3init(0,&result);
- t0 h# B: D8 K8 W) ]$ [        if(hEdma)
6 L% n% s4 {# }  [8 @1 t        {
: T9 E& d9 g5 B$ Z$ P& S% d8 n2 p: q                print2arm("edma3init() Passed.",0);
5 b2 W7 l6 L5 v' |# Z. @5 X        }
2 m" u4 c" t& k! E        else  O5 b1 A! _% u) y: m! ?  @
        {
0 Y' e7 X5 e& [8 G5 _                print2arm("edma3init() Failed.",0);5 s- t1 c6 _4 s& _" E3 P
        }3 ]8 k  z, ~6 x5 U- l; T! _' B
        5 f% r" k$ I# f) Z1 @8 i( K
        if (result == EDMA3_DRV_SOK)9 d5 l2 d- c% R/ l. J7 W
    {
5 a- c' u3 I! F                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,1 R5 O& ^7 q7 U* s6 Y0 p
                                                       (EDMA3_RM_EventQueue)0,7 z3 b5 R4 m+ H# e9 @- A; h
                                                            &edma3_isr, NULL);
7 [, l, R4 w, d5 D1 B( M, `  |( V    }8 t2 w+ B- u7 g. a
        6 v2 I" f- M3 Q0 b
        if(result == EDMA3_DRV_SOK), A* w3 Q" \: C( l/ y* v
        {% G3 Y4 Y8 T2 o( g7 X+ E: h0 J/ V: C0 O
                paramSet.srcBIdx    = 0;
$ f4 n- T7 S; n; t                paramSet.destBIdx   = 1;
, B; r" Z7 ]( \" p1 a2 s7 m                paramSet.srcCIdx    = 0;) W1 G4 W$ |5 q- ~
                paramSet.destCIdx   = 0;
! ~5 c$ {; E9 b; V1 P                paramSet.aCnt       = PING_PONG_ACNT;
) K$ y1 S; T; s! ~  A                paramSet.bCnt       = PING_PONG_BCNT;3 x' W/ [. ?" M6 C% a" I
                paramSet.cCnt       = PING_PONG_CCNT;
% u. h) h. e8 h! B3 o                ! q, I, ~) ~% B3 o/ D; b/ R
                /* For AB-synchronized transfers, BCNTRLD is not used. */3 U6 f" ~, J# r1 M3 R( e
                paramSet.bCntReload = PING_PONG_BCNT;
+ {" V( D& p' d4 R) e" S. a, P8 m, E  [1 O# \: w$ k
                /* Src in constant mode Dest in INCR modes */* Y" W, Z% I7 S2 y2 e/ H. c* s
                paramSet.opt &= 0xFFFFFFFDu;; `: I) E* D4 s7 d3 O
                //paramSet.opt &= 0xFFFFFFFCu;( I6 Q* F  _/ q+ x4 J) x. r  w
               
9 {' e0 I2 j1 F                /* Program the TCC */
. @8 c6 w8 g5 U$ @                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
9 M8 l" J% z; N  ?6 ^. `8 Q5 e
5 A$ g, D# q0 z                /* Enable Intermediate & Final transfer completion interrupt */% @# |. s+ r5 M, Q
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);  z3 u/ T' _& q1 l& ~" D- [
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
4 j! c: B" |' ?- k# X$ x: Q1 w. w+ D1 g4 t
                /* AB Sync Transfer Mode */
5 Y7 u2 {$ b  {7 U5 I                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
8 K' L8 `$ x; @) P' P% E7 J7 Q                9 ^( n# P! V  H: q) f8 F
                /* Program the source and dest addresses for master DMA channel */5 h, q; o8 G7 H. q+ E5 Z
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
* X2 Y2 w2 w  B: a                paramSet.destAddr   = (uint32_t)(ping_buffer);
8 x/ N. u  b7 X. q+ ^$ ~' c0 X7 i, M: Y( M" g9 v
                /* Write to the master DMA channel first. */
2 X8 C: y0 |1 s# x                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
/ O/ j# p$ ^$ S( X+ _    }       ) j+ c3 B. m- V! c- F: f

) K' K$ {( d3 ]8 s, L2 C. o: x        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
+ ]$ z! L; r* S1 K# l       
, A8 E+ G$ a  k. }; a  [% [    if(result == EDMA3_DRV_SOK) $ @' e3 M; l1 c" }* u
    {
! f) t" Z$ f, y4 z2 ?, \- K6 E* j            print2arm("edma3 driver init success.",0);
8 a3 Y# @; S( f! }6 g# U. p3 l    } % ?& ^. ]- X0 k6 v8 F- _
}
* i: r5 o- X, K% A' Y9 u& U2 a& d0 Z" Q0 w; Z4 Q6 q: a

) B7 [3 |( K  [# r; BEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。5 |* a% P8 N7 z1 ]' w

. V4 P' a3 e# I7 w; H
# |% k0 N8 ~/ _
分享到:  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
4 C; e) ?. ^, a  ?每次DMA传输完成后都要再次使能传输

! w" i, g3 M# T* M. ~原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-16 05:07 , Processed in 0.036437 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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