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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:" A5 O, U3 K# p+ j- \) H
#define  PING_PONG_ACNT          1
$ h. u: ]9 [% {4 Y" T#define  PING_PONG_BCNT          8*32*40
, i& i& q6 M) k- l//#define  PING_PONG_BCNT       1
  ?5 r/ |* y: n7 G2 d+ v#define  PING_PONG_CCNT          17 i7 j+ y; e# \" ?) Z
#define  MCASP_BASEADDR          0x01D00000
( e8 d0 O- j& R/ L" g- S: O. d#define  Mcasp_RXEVENTQUE        (0u)
% D6 J% v! l: A$ v" E
- ^" f0 H+ U! a; v7 r3 N, p/* OPT Field specific defines */- z8 C1 @2 z" v/ T: Z2 q6 e7 r
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
- x( S- t1 v* U5 h#define OPT_TCC_MASK                        (0x0003F000u)2 N1 |7 M+ O* y7 H+ p
#define OPT_TCC_SHIFT                       (0x0000000Cu)
; S; b: w% M! T; h1 x+ `#define OPT_ITCINTEN_SHIFT                  (0x00000015u)  c# u6 J2 U# s# q( g$ s3 j7 j
#define OPT_TCINTEN_SHIFT                   (0x00000014u)* b6 q6 [  l# C0 [: D6 v

' j) U# F1 H( f! l* T7 e, ichar ping_buffer[PING_PONG_BCNT];
" ~* [( H0 X$ H1 M. H" zchar pong_buffer[PING_PONG_BCNT];
+ I0 z! Y5 w, D* F
6 [6 G0 }; D2 u9 x/ t7 |( q; s; c: w2 u! w! d; Y

/ P0 S& W2 ~1 a
" ?) W" F3 S  s9 Q: V# @! Q7 hstatic void ys_edma3_init()
7 Z) y, U$ O  Z' O' [) a% D0 Z{/ K! [3 h+ d; i) \  u4 W
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
6 i) A$ T/ g4 w: N5 }# M9 [        EDMA3_DRV_Result result = EDMA3_DRV_SOK;' [4 f: Q8 O& K4 N( J
        EDMA3_DRV_Handle hEdma;
0 _6 Z5 g  v2 i( e, {: X) f    uint32_t chId   = 0;
7 l& ]" n- _* m0 }1 e    uint32_t tcc    = 0;
. o6 L; r3 `0 Y
8 z" i& y+ a5 @2 b    print2arm("edma3 driver init...",0);
5 s9 v  R$ ^& v$ [9 w# h6 q! M/ f' e
        hEdma = edma3init(0,&result);+ c6 \" ]5 S  |# ]! C
        if(hEdma)
% d# f8 c$ J8 C. S        {
. _. R& T$ b) d$ h* }, J0 H                print2arm("edma3init() Passed.",0);6 ~( I* L$ N4 `) k
        }
8 X! |: ^3 y4 B  {+ f" H        else3 o; q" M: Y, |
        {
1 Z/ a0 @0 L' d0 d9 z- v                print2arm("edma3init() Failed.",0);; G/ n7 w: N% P" p' b3 a3 i
        }
9 ^2 Y3 |* E6 C2 H2 {# ?4 w8 Y* u6 X( m        + c3 V( J2 H& ?( Z% L! ?( @
        if (result == EDMA3_DRV_SOK). O- D0 V3 ~( [7 Y# X6 `1 C
    {
0 M! k  |) ]8 h( v# D                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
3 K0 l% L$ q/ o0 }) a                                                       (EDMA3_RM_EventQueue)0,. n* Q' I. {8 q7 M! A1 `+ f
                                                            &edma3_isr, NULL);
/ o9 a, }+ I6 c: {$ J    }: J2 G; }. k6 I. f
       
4 T9 p! c+ D3 A        if(result == EDMA3_DRV_SOK)# {, X) E* D" e6 w+ g$ i" O9 {
        {9 \# [# B: L1 Y. R: Q1 ~
                paramSet.srcBIdx    = 0;
' I) r! i6 o# `- Q                paramSet.destBIdx   = 1;* c$ j& a- f: w8 j- L2 C9 ^
                paramSet.srcCIdx    = 0;
* G; m+ z4 F- x5 o" B! r                paramSet.destCIdx   = 0;
) y+ T0 H$ f$ W, z& I9 H                paramSet.aCnt       = PING_PONG_ACNT;
% [' A' @- d; S2 K6 ?" G$ M4 e. Q                paramSet.bCnt       = PING_PONG_BCNT;% n; ?% Q- m/ l
                paramSet.cCnt       = PING_PONG_CCNT;9 o. e/ g5 U& y2 q
                % r) o* U1 o+ {* I0 J
                /* For AB-synchronized transfers, BCNTRLD is not used. */
1 v  S. p( W9 ~* U( q1 R0 E+ J                paramSet.bCntReload = PING_PONG_BCNT;
6 E, Z- p8 m$ z; N; q. M3 E! g' C' L2 X# @/ y
                /* Src in constant mode Dest in INCR modes */) U) `5 g1 I& `" R2 K( b
                paramSet.opt &= 0xFFFFFFFDu;
+ d) [5 x$ ]/ Y7 Z! H                //paramSet.opt &= 0xFFFFFFFCu;
+ z& l# x* A# L3 I+ b                ) U" _! K% {0 B1 L2 _4 c2 F, p' D9 F
                /* Program the TCC */7 x/ p/ i3 W6 o
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);. A4 ~9 h/ q9 ]" q  f/ A5 C0 V* h

: o  H+ v& x' j8 m; i. i9 y                /* Enable Intermediate & Final transfer completion interrupt */
* o! k! ~& i4 w+ _# _                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
8 ?! H3 L. E" O5 d/ a% _' m# g! n                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);( O! X9 G: B5 F

9 J, u% u9 c4 M  [/ t                /* AB Sync Transfer Mode */
3 `, H9 |0 D7 s                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);- E3 C: }4 U0 P
                ; I# f5 N/ x; ]7 R
                /* Program the source and dest addresses for master DMA channel */
8 N6 z2 {; F' u; K* ?* x                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);. [- i% N% F3 t, y. @
                paramSet.destAddr   = (uint32_t)(ping_buffer);
# ^5 i1 D& o4 r0 ~) s
/ D( d8 e: X$ g* K% n                /* Write to the master DMA channel first. */" X; S! r2 S) @) j, [% _
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);  m. p1 v0 x" D
    }      
7 J7 L/ p+ [8 z
9 t' x5 V3 v" L3 T9 ^7 ?2 y        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);5 t& h! m  P+ `
       
9 g: P# R* G& t2 f7 ?* H    if(result == EDMA3_DRV_SOK) 9 w# u( C8 H, |4 h% A
    {4 ?2 D! {9 i; N% F& O
            print2arm("edma3 driver init success.",0);
1 I, f" l+ a$ {, i( B8 j- s    } & n' f7 f5 F# `' U! b" P" C+ g, b
}
1 T( K( F+ L  w7 m5 Y$ T5 w2 l0 G. q# g& S0 c. A' {% D

" {" A3 |) J- D3 @" C6 bEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
! S# }# l0 M8 i/ e
# }7 o2 f! R0 w# e" H, G9 f/ t4 R/ r
分享到:  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& N9 X5 W8 R8 U7 S5 @- j
每次DMA传输完成后都要再次使能传输
" m/ Q: v; P+ c
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-2 18:21 , Processed in 0.038443 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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