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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:' e! a/ D2 K3 T4 A% l6 L
#define  PING_PONG_ACNT          1/ S- Z; Y* \( ?* l' ?. C: y7 D$ b
#define  PING_PONG_BCNT          8*32*40 , g. E3 m( N3 _" v
//#define  PING_PONG_BCNT       1 1 p( M) X- O/ i  h% u
#define  PING_PONG_CCNT          1
. f% w# N+ }( B( o5 i#define  MCASP_BASEADDR          0x01D000002 H+ c! [2 K9 S! K
#define  Mcasp_RXEVENTQUE        (0u)( h0 h. ^/ o- p/ R% [

" }$ }/ R" a7 Z/* OPT Field specific defines */
8 u3 f6 o' e0 h8 I4 U/ |#define OPT_SYNCDIM_SHIFT                   (0x00000002u)+ n" \2 m. f" Q- S
#define OPT_TCC_MASK                        (0x0003F000u)" {) I* [, W3 ?0 {7 N
#define OPT_TCC_SHIFT                       (0x0000000Cu), u, w) r" ^% e
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)! ~4 h& p. c& `8 T' y% I* @
#define OPT_TCINTEN_SHIFT                   (0x00000014u), w" ^) f  d1 i

5 v& H- D) X* B( O4 W* Y  Qchar ping_buffer[PING_PONG_BCNT];
* }7 _& ]3 Z. S$ s4 V3 z+ Zchar pong_buffer[PING_PONG_BCNT];
+ f. |# I4 P6 z1 Z; Y6 w8 p) ]5 b" a9 ^( l$ k' D- p: y1 C
$ f) o: M0 H* K( q0 V4 q2 X& M
, d; V; u7 ?/ z1 S" s; C( ^& v& h3 T

* X% R2 |% N) X3 j) Wstatic void ys_edma3_init()* e# f% D+ k! _4 V" v! S
{* f% M/ t3 O7 G  t! U
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};! l) A' Y3 }7 P  _- j# c
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;# U: j: z4 S: l6 `$ M$ f
        EDMA3_DRV_Handle hEdma;
4 I) y5 c4 B6 d7 v1 h    uint32_t chId   = 0;
* r; X3 }' A9 q# r    uint32_t tcc    = 0;, u" a5 f  T$ H! u) n# h+ u

* c& j4 z( j5 s' a    print2arm("edma3 driver init...",0);- w' Z6 |- h7 Q5 l7 g( N) i4 N! a! \3 p

2 `" R) I/ g' E( _. h        hEdma = edma3init(0,&result);
7 z8 E. C8 {$ @9 G2 G        if(hEdma)
7 x  S9 D# A- H. b* Z+ W4 g        {, @8 l' b, Q& R1 \& p
                print2arm("edma3init() Passed.",0);
6 B) E# {3 `( M        }
7 h1 `9 W- X. {; ?9 Q; k! r        else/ P4 n% S# v( Y0 ?, z; h
        {
+ V; K' [: G6 @/ F                print2arm("edma3init() Failed.",0);
, ]0 R! k- ]9 |; E* m) O        }# V4 x$ E  s* ~+ z+ R
       
3 @" u' N+ w" O+ ?        if (result == EDMA3_DRV_SOK)% ^% Q6 P6 Z' s
    {
& R5 N1 h. J& y# O                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
: X2 e9 g4 M! ^' x                                                       (EDMA3_RM_EventQueue)0,
+ Y3 c; g/ `6 f0 M. O                                                            &edma3_isr, NULL);8 p' g4 M8 w$ H' \3 J9 ]- g3 D
    }7 g% n* [4 m3 q
        : [- D9 X- \  f2 C+ f3 p% N3 q5 e
        if(result == EDMA3_DRV_SOK)
% i1 I4 k7 B; I+ `8 Q/ [        {
; Y1 w5 ~* G& L+ D' Q- n                paramSet.srcBIdx    = 0;
. @8 j5 x; O1 F                paramSet.destBIdx   = 1;
( E2 @# Z& y* J                paramSet.srcCIdx    = 0;
( u' r0 V& a3 B  X4 u. y                paramSet.destCIdx   = 0;
% P. P: m$ |/ B' j1 h                paramSet.aCnt       = PING_PONG_ACNT;0 B. a  A2 Q: c/ }
                paramSet.bCnt       = PING_PONG_BCNT;
, q- [  `/ n& [                paramSet.cCnt       = PING_PONG_CCNT;( z7 d$ W2 e: f) a6 l* u5 q5 _5 x
               
' P. s6 w% y* D0 Z5 i  a' W* j                /* For AB-synchronized transfers, BCNTRLD is not used. */  l1 b2 w" ]7 J+ ]4 A; c/ S' W& H
                paramSet.bCntReload = PING_PONG_BCNT;
5 D$ z2 `$ F4 ?8 h4 V$ Z; l& G) o! [# k% |4 K
                /* Src in constant mode Dest in INCR modes */
4 k" q8 N) w* F! ~7 b. }6 D                paramSet.opt &= 0xFFFFFFFDu;0 o; B2 r9 q+ n/ w
                //paramSet.opt &= 0xFFFFFFFCu;8 H! e6 r6 I5 [, m/ A2 |! z# p
               
1 }5 x1 C1 z% k$ J& [% m                /* Program the TCC */
- i( Z; n+ G: X5 V: D) K                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);+ o. A0 P7 x3 x& ?0 |# `, E

. B! D2 u7 C- j- z4 K                /* Enable Intermediate & Final transfer completion interrupt */
/ R& Q- U: l- _3 d5 y  H7 F                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);( `6 S9 _; c4 ~2 u& X- c+ r2 r
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);; k! F' N$ X( W, m2 C
5 ^4 k* k& t, r# R0 J, g
                /* AB Sync Transfer Mode */- t# u; E4 g! I- I
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
! W0 G, t  Y' b: v" T                $ h6 @0 Z& S/ r7 x. O
                /* Program the source and dest addresses for master DMA channel */
6 u, k$ u( S+ u6 ?+ R2 z4 Q; G$ f$ d                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);- V* ^% L/ \; f7 {! e
                paramSet.destAddr   = (uint32_t)(ping_buffer);" x* s$ n/ E* O5 s* Y+ }/ I

$ ^8 u6 P* M! v/ G5 o. b8 q2 O/ @                /* Write to the master DMA channel first. */" ?( G+ n' u& N
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);' L. X/ k* @7 l) O+ `
    }      
( I" Q0 Q2 @. w5 v* \+ x9 G* p, e) U; N( U8 {* d- J
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);0 `/ b, m: z4 @* h! T2 L
       
# C& I% ]7 c, \% p    if(result == EDMA3_DRV_SOK)
' e0 m  N8 S, p; Y7 h    {& a6 M7 p9 O5 s1 {3 j1 }* H7 V
            print2arm("edma3 driver init success.",0);
! O% z1 B. ]" i$ M    } 4 ]3 q! k3 P- b6 [; g
}
7 f8 y8 `$ V: V  o! Z$ o
- G. g! l$ o4 J
4 n5 x. y" k6 T7 eEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
8 Z" K- ?: [; }4 t- h9 G9 @. W; M, p, V6 V9 l+ k

$ Y# P+ k: O$ Q* Z  i7 @* q$ U: 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
4 S1 ]4 ]9 |, n9 t/ E$ A# y每次DMA传输完成后都要再次使能传输

/ ~7 H# L1 d. m9 N/ P! ~  V1 b+ H原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-16 11:12 , Processed in 0.041171 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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