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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:- Q% z# e/ ~" `
#define  PING_PONG_ACNT          1: Z" y) P, e6 n4 ~( |( t
#define  PING_PONG_BCNT          8*32*40
' ]& o/ U6 c8 l! t  ~9 p/ r//#define  PING_PONG_BCNT       1 + Z1 R' i2 j  ?5 j0 z6 |5 V. C4 l$ d
#define  PING_PONG_CCNT          1
  s/ g. t5 O2 j. h% D#define  MCASP_BASEADDR          0x01D00000: z! K& _7 T4 k; _0 @4 _
#define  Mcasp_RXEVENTQUE        (0u)& n$ A' |5 E( o; E: c
' t  D9 J4 n; o& j& e: }0 v
/* OPT Field specific defines */
* ^/ ?, E0 t- n6 H5 f- }#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
7 A# s, q# v0 f+ B#define OPT_TCC_MASK                        (0x0003F000u)& r3 z0 ~7 i4 J$ t' h& ^/ B
#define OPT_TCC_SHIFT                       (0x0000000Cu)
7 p* S. {/ o7 a#define OPT_ITCINTEN_SHIFT                  (0x00000015u)7 J: r1 m% L8 `3 U3 i7 T
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
; {8 X+ O8 K, T8 f+ E8 J; H' t; u  x$ x* j( z. N
char ping_buffer[PING_PONG_BCNT];/ ?& l9 F1 ~. K$ e7 s. x6 t; [
char pong_buffer[PING_PONG_BCNT];
2 Y) N' w3 M4 U- |8 d7 {8 G% ^+ R8 N" p" h9 h* q# {7 p0 Z4 Q

5 ], a. F0 ?1 l0 H5 }
8 T; n# \: J3 c3 @
( g; P' W$ i; U8 w/ n) fstatic void ys_edma3_init()$ L* Q" H5 O7 Z' L: x# }
{( z& w: ^; J6 F1 R$ N9 M
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};3 H- S8 c$ s0 \3 q" u2 t+ C* H4 k) g
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;% E- z1 ~; t8 Z/ ]! N; j3 v+ d8 W, k# K
        EDMA3_DRV_Handle hEdma;
. f% ]1 d/ c2 _0 o' ^    uint32_t chId   = 0;
2 [8 j: Q( k/ g* u    uint32_t tcc    = 0;0 I+ g. ~- E" l" \

, ?$ E/ I! d! t* i: O- H    print2arm("edma3 driver init...",0);5 l/ ~: @# Z0 `! e$ Y
& ?) b( Y% d: Q
        hEdma = edma3init(0,&result);
; M& v  Z3 B) |. H  \7 S# d: |        if(hEdma)
& {8 i; p+ `0 x; @0 w* H" c        {
$ c; v* h' M- a; @, F; W- s8 V                print2arm("edma3init() Passed.",0);% k2 L  A8 [3 u/ P
        }# B9 v, T; w8 `( f. r6 a5 E
        else
% g% }+ v% U8 e. z        {
- W) {4 I( L7 E6 `                print2arm("edma3init() Failed.",0);* P- U* o1 m# I5 U; u/ f% R0 f
        }
  C9 J5 |. n) _: V       
8 l, T( b$ X7 N+ o$ g- s        if (result == EDMA3_DRV_SOK)5 N0 v; x/ B2 k
    {
  o: d- P) ]4 k( X5 Y7 S# A                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
- K# _6 \. V7 J/ i                                                       (EDMA3_RM_EventQueue)0,) m7 m5 D2 j4 g9 o, k5 G9 D
                                                            &edma3_isr, NULL);
) @6 A+ P9 N2 ]' x: H    }& y/ z: l+ \9 }9 i$ c3 a
       
; @3 H0 m# {  [: L2 Y; y        if(result == EDMA3_DRV_SOK)
( R) s( K# }7 R9 R( t2 k$ \        {( ^2 }- U$ U7 @' C  u
                paramSet.srcBIdx    = 0;) F7 n# W* U/ _  i1 n7 ?$ |
                paramSet.destBIdx   = 1;
1 v9 E% W: `5 _0 d! q1 ]                paramSet.srcCIdx    = 0;, }; b1 S2 w+ Y- V
                paramSet.destCIdx   = 0;
8 i2 C7 t2 m+ P8 t. ]* X  `                paramSet.aCnt       = PING_PONG_ACNT;
; G4 G9 q( T  j, h6 a$ `( q                paramSet.bCnt       = PING_PONG_BCNT;) s# s0 f) c7 Q1 k
                paramSet.cCnt       = PING_PONG_CCNT;
, N5 ~5 b* c' _* G: I                " Z% J8 }( N7 Q
                /* For AB-synchronized transfers, BCNTRLD is not used. */
3 j. C6 O4 j2 P. G# R9 {0 o/ W                paramSet.bCntReload = PING_PONG_BCNT;
5 L0 h5 g# U. U1 q& ^4 O0 z6 n4 ~* x; ?7 m) i/ d; w
                /* Src in constant mode Dest in INCR modes */
4 V7 _% x7 P2 w- v0 S                paramSet.opt &= 0xFFFFFFFDu;
0 q9 a: e, X8 \( a% T3 S7 H                //paramSet.opt &= 0xFFFFFFFCu;* H8 i9 o' _8 z  k
               
% w. P+ h1 S/ W* v/ n6 \                /* Program the TCC */* p0 M" \2 e, `& e' v2 I5 L6 f0 T" I
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);  n% ]0 A0 p+ G3 c. Y: |

$ w( G& ]# ~  H& O" l                /* Enable Intermediate & Final transfer completion interrupt */
8 b$ ?: w( ~& G' r1 e9 N                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
' h5 i: B7 b$ g: N: L" ]' k7 ^                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
) i1 I5 f1 l+ v& t4 j) h
+ M5 E: C8 t0 I                /* AB Sync Transfer Mode */
  v7 l  u! N  g% Q& [& e                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);7 `. a$ R& ]8 t- Q1 W
               
6 r* g6 S6 Y7 Q# ~/ p# [' p                /* Program the source and dest addresses for master DMA channel */
0 U% {% g, s& d6 s" t& j* }2 U                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
1 e4 i& ^! T2 v& L# z+ m                paramSet.destAddr   = (uint32_t)(ping_buffer);
% _6 I2 O* C1 w& M( f. c/ h$ }5 i/ G4 |- o" l0 B0 z* d& z' x1 H# ]3 `
                /* Write to the master DMA channel first. */+ B, k5 U! v# ]/ j
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
: d& n; H! K, J0 s6 `    }       $ A8 |) r( {( [4 s/ ^) D3 C- I4 H

+ T* ~6 I# V& V( O! K9 A        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);+ T* f" K& U' y8 w/ v1 U1 L
       
7 j+ A( G% T. L& ?7 N0 G- K    if(result == EDMA3_DRV_SOK) & `" g$ V# }$ \
    {
! [3 g+ U& j6 Q* ~2 O            print2arm("edma3 driver init success.",0);
1 t; A% ^; E$ M3 O+ y    } 3 |  p& ?* L6 s1 c" M0 V
}, f! q! w  r; o' z

) g) e$ f7 G/ c4 u) D+ s
* h6 r; I) |$ K2 J" PEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
* A0 f* T5 k) v/ t5 p+ ^  N2 W# C* K5 }+ c9 L. _

' l; ]; `# t6 t+ W3 ^0 |) B
分享到:  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
2 i. O# C6 G; H. j: s7 M. o. M每次DMA传输完成后都要再次使能传输
" m& W6 ^5 K5 l  n& n. a8 r
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-23 02:10 , Processed in 0.043800 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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