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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
8 _8 W- A9 a; \. E#define  PING_PONG_ACNT          1, D5 \, D. O/ e0 h( S# A
#define  PING_PONG_BCNT          8*32*40 & V  o0 |6 d; H' d% ~
//#define  PING_PONG_BCNT       1
* _- K2 G( ~5 {3 W$ Q4 w4 ?: \#define  PING_PONG_CCNT          19 j( K) s$ v9 N* T) Q' {
#define  MCASP_BASEADDR          0x01D00000
/ x, N& U9 `- }' _# Z3 O! j0 k#define  Mcasp_RXEVENTQUE        (0u)
6 Q* [6 }, I7 {% v( e- r) X
& O  V7 ~. R0 Y6 W$ D/* OPT Field specific defines *// K1 D6 l3 Z8 P7 x* I% e' q
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)! C# L4 a, F/ b' a% |
#define OPT_TCC_MASK                        (0x0003F000u)
* c6 u0 a1 ]3 _! w  z#define OPT_TCC_SHIFT                       (0x0000000Cu)2 y' Y; u% k) C' M' o) h
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)4 z" a  D9 {: R& a
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
+ Z3 F* l$ F' j& J6 P) m# G& ~% b" T* Y
char ping_buffer[PING_PONG_BCNT];9 S* e4 ]# H. ]0 c4 O6 K
char pong_buffer[PING_PONG_BCNT];) t' k. y( x. m$ V/ ~

5 D+ C- t( W. i6 h
% x& \3 G' \& E6 M6 s0 z3 x, `* K. e9 K& h' i4 W

# v, w9 H8 M% u1 Q8 _# T, rstatic void ys_edma3_init(): o/ y9 E/ a7 ^# q" Y* j
{
- o+ d( @# ]( a        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};: y1 K$ i8 g6 s1 t+ Q# X
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
9 I( E: _. ^" n        EDMA3_DRV_Handle hEdma;
, Y9 F; z) D; b2 ^* }* }    uint32_t chId   = 0;
: e+ C( r2 z% z1 q6 u3 A    uint32_t tcc    = 0;* C# ~' M2 v( y
/ W9 l' W5 X; N9 L
    print2arm("edma3 driver init...",0);
9 o, P" g& @* D
9 {6 t; t4 J  y% [# k2 u) V        hEdma = edma3init(0,&result);, S8 H( B4 }% G
        if(hEdma)& J& {# l4 H, c: p( `
        {. ?; L" h  {7 _$ Q$ M
                print2arm("edma3init() Passed.",0);  d/ H& b( t: l0 k
        }, j7 r1 D3 p0 T$ z, v& [6 U
        else
5 ]$ A( i! {, O# J        {
& L( [0 [* l' T                print2arm("edma3init() Failed.",0);
8 f% B, b! c, F9 w/ e- g        }
2 V. ?0 C, ^3 n0 s$ b1 q# G2 r       
$ u+ G: j1 I9 G8 N8 [' b        if (result == EDMA3_DRV_SOK)
5 `! g  |  Q0 n3 K& u    {4 B! a) `8 L& W6 I* }$ c6 E
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
; C8 b6 K4 j' B5 a5 n* d' k                                                       (EDMA3_RM_EventQueue)0,7 f8 i  P1 {6 z: \  ?, N
                                                            &edma3_isr, NULL);! _0 A4 R  P: F, V$ A( G# ]
    }
* S: D1 d% M" u# v9 |, p: v- K       
0 l5 Y: j- ?4 J) L  N        if(result == EDMA3_DRV_SOK)& d& S0 r4 e- m) r% P$ a
        {
! T1 C" H& s( G                paramSet.srcBIdx    = 0;
( k6 Z/ X. u9 ?. [0 \# L                paramSet.destBIdx   = 1;
  w5 M$ S& w, f* x$ C" o8 d                paramSet.srcCIdx    = 0;
4 \1 b6 S; Z3 y4 h, N% A                paramSet.destCIdx   = 0;8 U) I3 v/ Z; Y$ Q2 U: _7 O4 u( g; m
                paramSet.aCnt       = PING_PONG_ACNT;
+ N9 f8 k# z& n1 @                paramSet.bCnt       = PING_PONG_BCNT;4 b1 w  S% A* B' G
                paramSet.cCnt       = PING_PONG_CCNT;* n/ H( ]- I& ^( O
                2 f) J" ], S; E: V
                /* For AB-synchronized transfers, BCNTRLD is not used. */
$ v' F% K$ `/ l5 j' K& f                paramSet.bCntReload = PING_PONG_BCNT;- Y9 W# r3 Z0 l1 N1 I; J0 u$ I

, j1 `# t; F) q& |* `: e) K                /* Src in constant mode Dest in INCR modes */
7 t8 X! s: \: g6 _& v3 x                paramSet.opt &= 0xFFFFFFFDu;5 X6 p5 g, d  S4 o' P! ]+ M
                //paramSet.opt &= 0xFFFFFFFCu;
6 ?/ j0 B8 N0 \* v9 L                # C$ q% ?2 d1 L7 y7 u
                /* Program the TCC */3 U* m9 q: q; z# C" D: ], p
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
/ S: J- ?8 j% `& s/ F$ m& N& S* ?, O& K/ P
                /* Enable Intermediate & Final transfer completion interrupt */& l4 q8 p% q  j5 b
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);8 D6 x2 D' m+ Q$ B( H: _3 ?
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);/ f; Q, U% l* N6 a+ i6 V

3 V- d" b- m- A+ {- O+ A                /* AB Sync Transfer Mode */6 K0 Y3 l- x' {+ H0 T+ B
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
9 v7 P  k8 K! V               
0 z3 E/ q9 ^" [/ R! f                /* Program the source and dest addresses for master DMA channel */
/ N" E6 D  s$ v. V                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
' n6 W4 t8 u* X  [6 t- x                paramSet.destAddr   = (uint32_t)(ping_buffer);
. y; k" m/ n2 w8 T7 v2 T" E7 C
: V  e6 x, @' V  \                /* Write to the master DMA channel first. */# ^/ w# a7 S& J5 M( ]' j
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
  G0 R4 i  }( v/ C: X  X6 _/ A    }       * f. c  C- G6 _/ d1 F/ _3 ^* @7 X& h8 B

5 V* f' ?$ j' p" j7 ^5 V        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
/ I* [5 h  E0 ^6 e  M% S- k8 @       
7 m4 a# N9 r7 G  l% z- e+ y- [    if(result == EDMA3_DRV_SOK)
* j8 ?" B6 t/ \5 r' P% i    {9 t4 N) s1 U4 v% @9 S0 q
            print2arm("edma3 driver init success.",0);
* V0 z5 _/ B, }& C    } / R# d2 y6 O3 Q4 a( |) W
}8 q% @0 K2 O# g, f# t. Y

6 s2 r+ P/ W0 C4 V' w+ y- H2 Z& ^; B! w' {/ }; X2 o9 a' o& z
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。+ V5 {( m3 e% c! @3 O$ b
+ |. \8 N1 ^6 C( M9 O$ d
- m6 q; g- r- U& ^7 r  \4 t# W
分享到:  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- [: s& h! q( `/ W0 v* T* J每次DMA传输完成后都要再次使能传输

) r) V( e1 |9 U0 J/ m原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-27 02:23 , Processed in 0.040416 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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