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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:% t! z' m( I8 L5 |
#define  PING_PONG_ACNT          1& c- L5 K, T6 n3 V: `# O9 g% K
#define  PING_PONG_BCNT          8*32*40
: Z  E- e% T$ H$ p0 B//#define  PING_PONG_BCNT       1
# r/ ^5 i5 u7 V6 U. V#define  PING_PONG_CCNT          1
3 z+ ?5 D0 m7 c& \1 k- G#define  MCASP_BASEADDR          0x01D00000
3 y+ I9 A9 E! s0 D1 g6 w8 ^#define  Mcasp_RXEVENTQUE        (0u)) A$ O; ~+ [9 P: _" W. _

9 _5 h, ~6 p6 }* f/* OPT Field specific defines */
! X5 B  `5 I& a, ~0 C5 h#define OPT_SYNCDIM_SHIFT                   (0x00000002u). r' P% l3 C4 r  z; F
#define OPT_TCC_MASK                        (0x0003F000u)
* H# R; ~# k/ @1 X. B#define OPT_TCC_SHIFT                       (0x0000000Cu)" J2 S( O# U! K9 ]% J$ E
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
6 j* S! ~/ l$ V# E7 C2 m#define OPT_TCINTEN_SHIFT                   (0x00000014u)) _+ W7 m! F0 V9 F
# ^& g) U8 G* b, b
char ping_buffer[PING_PONG_BCNT];
" u0 R% K( c. N( M3 ^0 d0 zchar pong_buffer[PING_PONG_BCNT];" _/ x3 J; N4 |" X% N- x1 G
8 o( d/ L( U; ~, {2 A8 u' _
. s1 \% s3 Y# T3 M- t( h

/ S: p4 ^) d4 T5 [5 C
' d9 V5 \; a% W( p$ \; estatic void ys_edma3_init()
9 U8 T( d1 \* T% o# J  @, m) T{
8 u3 u# a! v+ C1 i4 y        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};6 G' C. c. ^: C8 E( s
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
0 d- M- m7 h1 O( ^! O7 B3 s, q        EDMA3_DRV_Handle hEdma;  e* }3 j5 D9 A4 l
    uint32_t chId   = 0;
( f* d9 Q0 Q& c. Y1 n0 O) o    uint32_t tcc    = 0;
+ _& _, R2 i9 u1 ?$ `2 [9 B
% A1 H" C7 o: ?7 N# S    print2arm("edma3 driver init...",0);+ Y' x& s. Z( n% m1 z" f  M* q

. B; D5 ?! S. i8 C        hEdma = edma3init(0,&result);' }. k5 Y9 m- m8 J2 Z) j. E
        if(hEdma)
* [. K- E5 H+ R        {
3 A. d# `2 R8 x4 [9 w* G                print2arm("edma3init() Passed.",0);6 I( K% n' p# n: p" U9 {# }
        }
" Q" F  J/ {  {! [9 F        else
' Z& s  }7 c( w4 o; k8 H; \        {
. N9 G/ i0 I0 c/ b9 `                print2arm("edma3init() Failed.",0);
3 [2 J5 r% M+ v# ?$ y4 c        }9 D& E8 ?3 A. P, P4 |
       
2 N# g( Y& X3 i# t' n        if (result == EDMA3_DRV_SOK)+ N2 ?/ O3 ^* x; u6 \9 y
    {2 m8 H% U8 j+ Z: |# u
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
6 J* C! G- D  i                                                       (EDMA3_RM_EventQueue)0,
, s% {0 K6 \- O                                                            &edma3_isr, NULL);% d0 x9 |- J( E- u: b! L1 q
    }
) {2 e* G5 t! I5 ^' E2 |" T$ _. W        : }( P1 e; U" V" u
        if(result == EDMA3_DRV_SOK)
# C8 I# m" }3 c: z( h        {3 p% o0 x. G6 P
                paramSet.srcBIdx    = 0;
- \8 |2 K' t. c+ g$ A                paramSet.destBIdx   = 1;
6 a, J2 l& t' d" s6 l" h                paramSet.srcCIdx    = 0;# f0 m' |2 Q/ |1 c3 B8 F& M3 I
                paramSet.destCIdx   = 0;
5 z$ {6 t- h) v6 D8 }                paramSet.aCnt       = PING_PONG_ACNT;) S) x9 @) B8 }4 K, L! z
                paramSet.bCnt       = PING_PONG_BCNT;. @0 W, X* R& G9 N
                paramSet.cCnt       = PING_PONG_CCNT;2 \( z+ O4 `/ M2 S( K% @. p5 i+ G
               
+ S8 @) `2 n9 K" N; P- e. u                /* For AB-synchronized transfers, BCNTRLD is not used. */
6 K; x) W* T; g4 Y+ n                paramSet.bCntReload = PING_PONG_BCNT;( o% F5 B& s3 [" `; F& N; s& i
$ L1 s, E' Z7 i' Z4 o- M, d; M
                /* Src in constant mode Dest in INCR modes */
1 k% i: @; C7 {1 B& Z                paramSet.opt &= 0xFFFFFFFDu;
  C+ O8 H: B" N                //paramSet.opt &= 0xFFFFFFFCu;: d. d  a( D  s& f( f6 y4 l
               
: D9 f3 w! z/ W6 J/ ]" p. f. o                /* Program the TCC */
6 v3 u8 f; {$ S# Z) W4 N                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
3 Z  T6 X' u4 d3 v% H: z( M
' A3 n0 [5 T. P# u3 w- T5 m7 \                /* Enable Intermediate & Final transfer completion interrupt *// ~2 k: A8 M, a1 z# J) r" r
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);9 s( s) A, \# p( @9 X; d$ _
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
& \) ~2 P1 ]% p4 ^+ _; g
' q2 ^) C. O; l# ^2 r                /* AB Sync Transfer Mode */
7 y9 b8 ^7 B1 n8 u6 U9 e( N% |: Y2 z                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);" m. A9 @6 Q7 J5 M' t
                % i7 h5 V- P- ]+ E' k4 J
                /* Program the source and dest addresses for master DMA channel */
: G7 {1 {0 l. z* `8 S0 e; p( s2 G                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
5 w* y9 |& [  l4 q; e1 R                paramSet.destAddr   = (uint32_t)(ping_buffer);& \3 Q: r' O' c4 c. x9 ~
* J* Q" L8 G& }8 D' q" _1 \% |
                /* Write to the master DMA channel first. */
" A! D: ~$ M& m* f/ J+ w0 W                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);  S7 g- W5 u3 B- B0 l8 V
    }       4 s3 {; z$ N6 o+ x7 ~. w
5 X1 a  g- w7 o. h2 \: X: a4 A4 B# ^
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);. ~" ~* C0 F) c
       
7 ~" ^; W1 R# `6 a9 K$ H    if(result == EDMA3_DRV_SOK)
( E- n8 P; Q- _4 H5 T    {- `1 J! n, i) y) |6 V4 ~/ l
            print2arm("edma3 driver init success.",0);5 S, D. v& A7 X5 K! t& P
    } % r% A; ^) Q. o0 Q: h" s
}
) z/ W* ^5 C1 ?. g* |, i5 m8 q7 E* R6 D

$ c' Q' E4 C: E1 TEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
& P* w' W4 W. L! i: P* U# b* }( v& P3 A# L& ?3 v7 ^7 `

. K, K! ?1 t$ l$ |, m
分享到:  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
8 l$ l) Q0 W( N( ?2 D0 W; t8 x每次DMA传输完成后都要再次使能传输

6 e* P3 o9 H* [8 \原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-24 00:32 , Processed in 0.039993 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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