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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:7 L% p) q. H. R/ J0 k% Q4 v, S
#define  PING_PONG_ACNT          1
" \4 X: p: m, \#define  PING_PONG_BCNT          8*32*40 . \' I/ G, U7 I4 a) t* {/ k9 S
//#define  PING_PONG_BCNT       1
6 p3 C" f& V; f3 N. [3 @#define  PING_PONG_CCNT          1, \: H* B% x7 c; n
#define  MCASP_BASEADDR          0x01D00000
& M# B! d* `4 c% b#define  Mcasp_RXEVENTQUE        (0u)
/ b& }' [) }) F* y  z# ?9 W( W
* G- j) T6 M) ~) a% G  n/* OPT Field specific defines */  K; g9 Z* N/ q1 L: ?& N
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
2 |6 k2 h( Z5 [0 y' v5 A5 H#define OPT_TCC_MASK                        (0x0003F000u)
  _6 J5 y& I8 C9 ?#define OPT_TCC_SHIFT                       (0x0000000Cu)% |" f7 B+ t- ^+ W, t  X* \
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)' w$ l" `' V) Q% q: W0 U2 j
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
( l: a) d  A0 ~2 \; T# Y2 k* s' ]% Z7 q* A; D& [0 _6 s
char ping_buffer[PING_PONG_BCNT];7 ?- ^" p! f1 m. y* v8 g3 O
char pong_buffer[PING_PONG_BCNT];
  H; c! P0 r. M1 Y- Q9 \- {/ B! \% X: G3 p! f, I5 y3 U
# K1 S( ^- P* X& p, @( \5 ~5 M0 B
% [, p2 s" j1 y
* C3 K5 X) M6 i
static void ys_edma3_init()2 g6 A+ ~  K6 T  x0 Y& L. u
{( p! X8 O: s5 m% c, w
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};0 v! g; n6 K6 a' v* Y
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;5 x9 j# D2 I* M. G% J3 G  J# w
        EDMA3_DRV_Handle hEdma;
$ v% t- j9 v$ s6 m    uint32_t chId   = 0;
6 w! v/ {* ]+ y8 n    uint32_t tcc    = 0;; V0 p, Z4 v" S3 r9 V! ^

$ _' h8 x) ?3 s( c# h    print2arm("edma3 driver init...",0);
& {" [( p1 g; S9 K1 b' _) ]5 x& l( N7 ~+ G7 p
        hEdma = edma3init(0,&result);
1 o9 z, r0 i6 `% J. b* ^        if(hEdma); P9 Q8 Q. u+ i
        {
! Y: O; x' W: x% o  H                print2arm("edma3init() Passed.",0);
1 d* M# k4 S- D' C& m' i7 G6 E        }
/ G9 i+ K4 Z* J5 n- \+ e) l$ Z! {        else7 Q: X4 o& _8 j; S7 F. N
        {! X6 @  G+ W$ e6 A. Q! ^
                print2arm("edma3init() Failed.",0);
* t( {! W; \# V5 ^! o  B        }
6 e) M/ Y! |# G; D$ K& u4 n. U1 Y       
& w' q8 j; G- B$ r* [" m        if (result == EDMA3_DRV_SOK)
. ^8 x3 |' T( e. n& Y3 ?0 j  L& B. g' G# \    {8 S7 Y/ Q; W7 n. A
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,0 L+ E# w  n$ J- ^
                                                       (EDMA3_RM_EventQueue)0,# C, |! @: V3 V; U5 F* c
                                                            &edma3_isr, NULL);$ @& r$ [1 z# u2 Y6 ]! ^
    }
7 E& w" A+ c- _* x- W# M        " D) z2 S/ ^. B9 a8 h1 ]9 C8 z
        if(result == EDMA3_DRV_SOK)" d% i! \5 ~2 O+ A  ?
        {
* b- N7 T: i' [. e# R4 n                paramSet.srcBIdx    = 0;
( l1 ?& q! K2 N( v                paramSet.destBIdx   = 1;1 Q9 g4 Q$ o0 o' S9 G
                paramSet.srcCIdx    = 0;4 H# a  x, A# W0 @
                paramSet.destCIdx   = 0;" I! {% D% }) U1 v* s
                paramSet.aCnt       = PING_PONG_ACNT;
$ k8 Y" D7 x. B+ E1 ]: P$ c                paramSet.bCnt       = PING_PONG_BCNT;  H7 y4 W* Q' b
                paramSet.cCnt       = PING_PONG_CCNT;( S6 o/ m- O0 u9 q5 j9 X+ J
               
9 h" m6 b, a  P( K. s! t                /* For AB-synchronized transfers, BCNTRLD is not used. */' D) t$ g- y' z4 x+ u
                paramSet.bCntReload = PING_PONG_BCNT;
5 M* I+ I; v2 q) A5 k/ ~
& o( N2 a) T8 |! _                /* Src in constant mode Dest in INCR modes */
7 v( A0 ]: B/ P5 h+ l                paramSet.opt &= 0xFFFFFFFDu;
# T5 {& y! B4 y, G; ?  o( L( a                //paramSet.opt &= 0xFFFFFFFCu;
  ~  O/ d7 f% l2 g; T  u               
" l. ]% ^5 w' Y4 z# o# N                /* Program the TCC */& c6 v% f. {2 @: m& Q- K  S$ c2 G
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
# Y, `& G3 `+ ^: i% b- F2 b8 }" m! }
                /* Enable Intermediate & Final transfer completion interrupt */8 [! P, w( l1 y3 F9 w6 J! f
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);0 v2 D9 N9 x" ~2 m+ O4 |& c1 ^
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);5 P1 X8 X! U& {) a& p& |. K6 E

+ |; q2 Q3 `0 X' R                /* AB Sync Transfer Mode */
$ A6 n4 r! F$ t5 S1 y                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
0 s, F& r) g" I0 H& r                . B: o- g" I4 T+ A( K( r# [
                /* Program the source and dest addresses for master DMA channel */
" i' J2 F! _. v. q, ]0 q                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
: C9 }! d' B' [1 S                paramSet.destAddr   = (uint32_t)(ping_buffer);3 \" }3 X; }  Y: T5 ^: `0 J& p
9 g+ ^9 D# o9 t" k1 j7 v, |
                /* Write to the master DMA channel first. */3 J( v. b5 @* G+ {4 H4 V
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
4 T" l# s  w. }% y- e! _4 t    }      
* [$ ]4 ^: [5 _1 f( [, j! v! x  C, ?9 B) B3 ?) T( M& _' Y' L& x
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);! s: D7 J9 C" M
       
, |2 B/ o7 \- }    if(result == EDMA3_DRV_SOK)
) z5 [" L3 a5 z! @. m    {
8 D$ r& H6 n2 P, s# J/ f            print2arm("edma3 driver init success.",0);
/ ~% [0 |; k5 _# l    }
+ i: p' M% g2 W( i}
& C( o' B9 w! b4 e! Y! I9 p3 w4 I
1 h# }+ v& _5 J+ m. J0 _* d
+ N  {, V- }- B/ jEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
7 S+ ]7 e0 Q9 T# U+ _" L0 Y4 f0 V( ?  y1 e

% \+ h9 J4 W* G/ J3 I$ d! z$ X, U, Z+ v
分享到:  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  U/ g+ b/ a; j# Z1 X5 a: H9 K7 u$ n  ^6 x
每次DMA传输完成后都要再次使能传输
3 L8 ^( l- u/ s3 b, r& N" G
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-18 03:04 , Processed in 0.038638 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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