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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:! p. d5 H. w3 c( }* q7 b( p$ {
#define  PING_PONG_ACNT          1
7 T9 S9 U9 U$ b2 q' n! X#define  PING_PONG_BCNT          8*32*40
. N) I, T# `8 m7 w- `" F  j//#define  PING_PONG_BCNT       1
. Z2 Y0 }0 j% b3 F8 h' F% N8 M#define  PING_PONG_CCNT          15 w5 P2 ?5 A# W" B4 `! S
#define  MCASP_BASEADDR          0x01D00000- _$ ]5 n: s; W
#define  Mcasp_RXEVENTQUE        (0u)8 g. F: Y6 g+ `+ ]7 C) O' m
$ B, @8 r5 j, y9 M4 m; o+ G
/* OPT Field specific defines */
# y# B: F( j. B' J1 h! m) @$ L" S#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
& l4 N3 Y& s: U, o0 W#define OPT_TCC_MASK                        (0x0003F000u): L' T! r! y' Y5 Z' a; E
#define OPT_TCC_SHIFT                       (0x0000000Cu)
0 g  l6 H' Z) B9 g2 V& o) ?+ Q#define OPT_ITCINTEN_SHIFT                  (0x00000015u), l$ U' H3 `. f2 U
#define OPT_TCINTEN_SHIFT                   (0x00000014u)7 n  r' ^) I4 `6 O0 t- c, g

$ b, d  q: p$ V. Q4 h/ Y: qchar ping_buffer[PING_PONG_BCNT];
7 W2 }% F+ J9 {, D- pchar pong_buffer[PING_PONG_BCNT];
1 N0 X$ H# C- I+ t" }6 ~- ~9 b& d/ W8 ~' J
# [# Y! ^4 T+ K9 H& q

4 [5 R9 J# e: B) j% r1 q
7 e3 u5 x/ G9 Jstatic void ys_edma3_init()$ u) N( U6 y9 n) \6 n  x$ C) f
{8 F& t. h* B  F$ u
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
2 P) i. b8 a8 O+ g/ L        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
$ \' s: j* x( [4 u# P5 A4 V        EDMA3_DRV_Handle hEdma;/ ^/ ~6 z( w1 [8 Z" S& H1 D% G
    uint32_t chId   = 0;
; i: K4 }  F5 _* ^    uint32_t tcc    = 0;
* A3 E3 F/ C( k, |$ M! W: s1 ?
0 @8 M* O& r/ F    print2arm("edma3 driver init...",0);
: ?8 ^; a# d  @0 u- I2 c
% U- p0 ^# S2 ]! _9 N+ d, r  C        hEdma = edma3init(0,&result);: s7 o9 ^) z5 U
        if(hEdma)
# v4 _( v5 H+ J5 z        {
% n/ z8 c# V. P# f6 \( B% u) r/ N- k                print2arm("edma3init() Passed.",0);
# W+ @6 g4 h5 F, w        }
2 o% \  u, ~  _- C  V$ Q4 L% G6 K        else
4 ?6 }( ]$ [+ V6 y# S3 V        {  `3 V% V5 c  e9 ?
                print2arm("edma3init() Failed.",0);0 J9 c/ I9 D/ J/ K9 t- ^* B- l
        }
  c5 \( C1 E7 g) U$ D, ?; e. `2 H       
2 L8 N1 {+ v$ W0 D, q        if (result == EDMA3_DRV_SOK)
; A2 k: @( [' K* I    {* L2 q4 K4 _1 d" j9 C( C& V
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
- o6 N+ L5 S9 w) {0 u                                                       (EDMA3_RM_EventQueue)0,( o" X1 ^2 o" V' c# M
                                                            &edma3_isr, NULL);
2 A. H$ @0 T) ]) [* Z) M( A    }
/ r0 \& n( r2 s7 l( r       
3 `+ R: j$ t. c* n4 A, l        if(result == EDMA3_DRV_SOK)- Q4 m, P6 W" `
        {4 w/ L4 P! v; s. C5 x# |. C
                paramSet.srcBIdx    = 0;( V; e1 C$ N+ q, M0 N
                paramSet.destBIdx   = 1;; s5 W% `0 u7 e8 Z: h
                paramSet.srcCIdx    = 0;( A2 e6 P2 n( i( L0 j( l7 b
                paramSet.destCIdx   = 0;
, O! l$ ?7 d% P8 i! ^' V  Y                paramSet.aCnt       = PING_PONG_ACNT;
# ~) b5 ]6 h7 A( {! c! {                paramSet.bCnt       = PING_PONG_BCNT;# f$ M# B, O6 ?- O
                paramSet.cCnt       = PING_PONG_CCNT;
* K2 s) b$ Q( z2 j# d7 P7 X2 V+ k               
& V7 v2 M& N, l0 [. W                /* For AB-synchronized transfers, BCNTRLD is not used. */  S, s* ]/ l3 A7 g1 q- p
                paramSet.bCntReload = PING_PONG_BCNT;& c! F* ]. F3 H

  _! }0 z0 ?  E, A" P* y- }                /* Src in constant mode Dest in INCR modes */
1 V/ h9 }7 |! Z* a+ b                paramSet.opt &= 0xFFFFFFFDu;
% ^. b3 O- c" i" |# _1 D                //paramSet.opt &= 0xFFFFFFFCu;, l. V' B" r2 O
                6 J9 X4 U  K- L9 o$ f, Z
                /* Program the TCC */
, G, A4 A6 A$ h/ h7 s" X                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);' y: \" U! a9 l1 {0 E

* G  x7 A+ z3 @+ M$ O5 W/ w" C                /* Enable Intermediate & Final transfer completion interrupt */; |- r/ P7 i# z
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);4 [! Q% ^5 t- M+ T" t% J
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
& ^: C2 h# m# h4 o" U* V, H  Q2 P0 e+ Q  j9 C, G: A3 B
                /* AB Sync Transfer Mode */
, f; R( T9 q1 v# }4 L* {; Z, x4 n                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
9 O4 J, A4 T% Q/ l               
7 _& u' y8 [. n* [5 {                /* Program the source and dest addresses for master DMA channel */
4 E3 W5 q( ?, Y- C3 e- t; `6 r                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);% y' |% D; D3 j: I1 r# ^
                paramSet.destAddr   = (uint32_t)(ping_buffer);
7 x  {) y2 C; J3 r: ~
. h' \: M4 a/ L                /* Write to the master DMA channel first. */* D1 }7 r; v  O# U1 c6 T
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);, W$ R4 w- v# b( e, Z% @  m
    }       ( F" J$ P: a1 d. Z

5 ?8 u. R  ^+ d" H2 T        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
  q- C" Q$ a% @" j! _% A        ; r+ l; M6 I5 e2 P- L- u7 @9 a
    if(result == EDMA3_DRV_SOK) * L' m; [, `& x5 t
    {" m% j, U4 {; H2 X; B
            print2arm("edma3 driver init success.",0);9 w% {: \/ f# T0 o4 k+ q! w
    }
& V; `# Q+ Y* m. n9 m: Q) ?( {}
7 a1 `# Z! c; u$ B1 e; A# J+ B4 ]! z+ I. L) ?
2 P! w  u5 D* p/ [" [, {9 g. X
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。7 a7 t$ R, i3 Q, N' t

5 r$ g, C* P& g/ Q% R3 _
  ~# t2 k& D1 I
分享到:  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:473 M7 T, M( Z4 `& j0 L
每次DMA传输完成后都要再次使能传输
( g  [+ d4 w! t4 y$ u
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-19 12:37 , Processed in 0.040905 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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