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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
1 l$ V' k1 B% N" }& d" P# |1 G* W#define  PING_PONG_ACNT          1& ?2 H% y( X2 z& i- R! n# r0 d& ^6 V
#define  PING_PONG_BCNT          8*32*40
3 c8 Q6 _) F. a8 F  E) y//#define  PING_PONG_BCNT       1 " E- h% G( r! }/ f" X9 Q
#define  PING_PONG_CCNT          1  n/ s8 r: o4 q( Z- O$ ^; \
#define  MCASP_BASEADDR          0x01D00000
! T6 c# N* O6 L0 A#define  Mcasp_RXEVENTQUE        (0u)) N7 ?  M, e- }$ _" Z

" k/ b' Q% t5 K/* OPT Field specific defines */
( j7 U) V( M  r" c9 |* {#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
) |: J$ l: B- @8 X( O#define OPT_TCC_MASK                        (0x0003F000u)
' W7 S. f( h3 b9 @) ^" i( c#define OPT_TCC_SHIFT                       (0x0000000Cu). _! m/ ~' s( O1 A# l) i
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
* Z# y9 J/ Q; ?$ F4 J9 L2 |1 M#define OPT_TCINTEN_SHIFT                   (0x00000014u)" B7 ]# @4 |# U, P3 T
' Y; V9 r. J; z. ?, J" A
char ping_buffer[PING_PONG_BCNT];
8 b) G6 F( @9 l6 z+ lchar pong_buffer[PING_PONG_BCNT];! ]# f# s* B1 g8 w8 H7 }% w) S

% w% I, c/ }  N; K6 W/ `1 i. S6 t4 Z6 J

) o/ r9 p4 }1 R8 r+ l! v
: M: m6 n5 w; E/ ~" o6 F3 H: \$ qstatic void ys_edma3_init()
2 w% x/ v- k# u; j) ^{' n" a1 I  e$ t& a5 Z4 h. B
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};# ~* k8 e4 V0 n1 Y  |
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;+ \4 V9 i2 T/ Z+ N3 g; b
        EDMA3_DRV_Handle hEdma;" r$ y" o  M- n4 F2 w
    uint32_t chId   = 0;. a0 \  p: `& i" F" C+ n
    uint32_t tcc    = 0;8 [+ [. b3 k$ {' n: E9 p5 u# d

5 O  m# Y, ]$ r& H  B; A# L    print2arm("edma3 driver init...",0);
# M, r7 W! a8 o' k' L% C; g2 k5 T, w& J4 g, e
        hEdma = edma3init(0,&result);
& `/ P/ a5 x& T* S. ]* H        if(hEdma)
% M# ~" l3 w7 _1 I. l* D6 o        {9 Z! K& l  Z: u
                print2arm("edma3init() Passed.",0);5 h4 U9 s! ^' N
        }
' u' k7 W. A" l4 O) t" m        else
9 P4 [9 C2 u8 s7 k/ j: N- _7 ]9 i        {
- }4 R) l3 f" I5 ^3 z& w6 U                print2arm("edma3init() Failed.",0);
8 r7 P# I! k: u& \8 a+ `        }& R4 z4 ], @- E/ `/ v7 g
       
. p, i6 K4 e% k        if (result == EDMA3_DRV_SOK)
* v2 @; [. L7 ?  A+ `4 _( G$ P    {' e  h1 U* a  \4 K6 o6 @
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,1 S; G; C7 p9 J
                                                       (EDMA3_RM_EventQueue)0,
# B; `; c4 ^5 O! U4 q2 l                                                            &edma3_isr, NULL);5 X4 v& p+ E- i" R
    }
3 J9 Q& K$ Z% @" J! C9 N        % p* F, P* x! {' |; m
        if(result == EDMA3_DRV_SOK)7 u2 P" M0 j  Z, M' v* n& a4 t
        {
3 r0 l* p2 S1 O) T- `' b: X' }( H                paramSet.srcBIdx    = 0;
+ C5 w0 Q: n8 h! U+ j1 ^                paramSet.destBIdx   = 1;
# A5 Y5 {( s4 R! Y                paramSet.srcCIdx    = 0;8 z# w' O" M% i+ ?! o
                paramSet.destCIdx   = 0;
& a" ~# x7 I: j+ s6 H+ t7 ]                paramSet.aCnt       = PING_PONG_ACNT;
' L) j+ ]* U0 L5 z7 O                paramSet.bCnt       = PING_PONG_BCNT;
  p/ F3 j" x" e  I; `. W! f                paramSet.cCnt       = PING_PONG_CCNT;/ C8 M% B  B1 }2 p' I# f( a# R7 X
               
; I/ ?, K" C" `& J                /* For AB-synchronized transfers, BCNTRLD is not used. */# o3 M2 H" n6 u  p6 B$ b/ Y
                paramSet.bCntReload = PING_PONG_BCNT;
$ P& D. ^* Z  f6 u) h$ r8 W7 u4 R% R* K; F5 t/ f
                /* Src in constant mode Dest in INCR modes */7 C: w5 D( H4 i8 j2 `, W5 V
                paramSet.opt &= 0xFFFFFFFDu;
( }6 g9 n( h/ M3 ?                //paramSet.opt &= 0xFFFFFFFCu;" t4 _7 Z8 N- I
                : ~5 h2 {* q# ]. `5 b3 x
                /* Program the TCC */
2 w3 z5 e$ Y7 g                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
' q5 S0 f8 Y0 r2 D! W! x, ~4 \
2 G" {$ T9 b" M* u) H0 h' }! P                /* Enable Intermediate & Final transfer completion interrupt */# \# D" l9 u1 p* Z' u
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
3 A$ x1 l2 }* X# b0 e7 N" U* {                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
, n5 F+ g  O6 R2 E7 U( j6 W& z- e
8 O" f& K8 U: `  C  G                /* AB Sync Transfer Mode */
9 B' Z: @. A4 Y1 h, u. I                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
& }4 G. R# Y1 F$ g9 S                ! F6 P; s" N" Q; S
                /* Program the source and dest addresses for master DMA channel */) e: K( s" ?( B6 D% u/ `7 c
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);6 B3 B3 ?- R' x. ]) L( X+ s7 }
                paramSet.destAddr   = (uint32_t)(ping_buffer);
6 J+ E; {1 z0 c) W. ~( M3 r6 j6 b( T& p/ C
                /* Write to the master DMA channel first. */
5 V' X& D9 O! E( I                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);7 V3 y& ^2 K* z1 I+ m
    }      
) H, G. ]/ K! K! A) g: n, L3 G% \1 l  f
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);( l% I" O: J. I- {# D
        $ N, `5 j* \" O. X- B. ?
    if(result == EDMA3_DRV_SOK) 9 Z0 K) a) Z6 c. i9 y1 ?
    {
9 {2 m( {$ d2 ?, y; z4 s2 \' M            print2arm("edma3 driver init success.",0);' M; ^! D7 z" _' T3 j
    }
8 o0 P1 [' T* N8 U; o. Q}
- I& z. p# C5 d: O) D" i0 }/ @7 ]) H

, V0 j' P! E; h1 x6 vEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
- n. E) \8 s9 {- G/ f7 }& `4 V2 m# P
7 M% b* p" H1 \2 f
, N, B! u: i! N
分享到:  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, s4 e+ d) }  V9 v
每次DMA传输完成后都要再次使能传输

* w0 T2 E9 w5 x; N- l# z/ w6 W1 F原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-21 12:41 , Processed in 0.047630 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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