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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
9 }8 I. ?( H0 L( E  B#define  PING_PONG_ACNT          1( s3 Y9 A% ^. D8 S! g
#define  PING_PONG_BCNT          8*32*40 * {7 G7 K7 [9 M
//#define  PING_PONG_BCNT       1 0 |$ B3 R- P& I
#define  PING_PONG_CCNT          1! D  M6 w( J$ \3 ~% Z8 g" k' l
#define  MCASP_BASEADDR          0x01D00000
& E5 c7 o0 w) p  F#define  Mcasp_RXEVENTQUE        (0u)
7 y; C/ P3 Y+ _/ g: Y1 T; T/ S! X' r0 u/ |. ?, B( R3 \
/* OPT Field specific defines */
: {( U0 ~1 R& J8 }; q9 \: J#define OPT_SYNCDIM_SHIFT                   (0x00000002u)$ D! ]) G1 [' u8 N+ L
#define OPT_TCC_MASK                        (0x0003F000u)
! ^) U2 N( G9 x% _. @#define OPT_TCC_SHIFT                       (0x0000000Cu)- E' `- l) a7 n% P. ?3 s# V" x! E
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
* A7 g+ O9 |. t+ V5 t$ _# x#define OPT_TCINTEN_SHIFT                   (0x00000014u)
7 l; @" X! B, c: J; N
3 w$ E4 W8 P  e+ u3 ~char ping_buffer[PING_PONG_BCNT];
" k/ v- t# m0 h* Mchar pong_buffer[PING_PONG_BCNT];+ H' n; M, I# ?

: e* q1 V; [& L* h1 O5 h* [( T! G4 \1 f

3 x- I5 U- t0 P6 O. F  z/ O
# F7 }5 Q% s4 L9 Y- L5 h8 estatic void ys_edma3_init()
4 n  ^0 z6 N) j{. P) {2 c( r( `9 h
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};; ?( C4 I4 u6 g  ~+ y  s  s
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
9 ?3 u4 H3 ~: [, W+ j, F' s        EDMA3_DRV_Handle hEdma;
! n4 P* n0 P' [7 a8 @" O    uint32_t chId   = 0;7 o* S. _" V4 q3 u& j- @
    uint32_t tcc    = 0;2 ?6 V2 w. i: _; A7 A% O* A

" J! m1 c( j* ]: s4 q# ~    print2arm("edma3 driver init...",0);
* h5 l3 T7 j: B+ P$ Q! C) R
# |! ?" @9 c1 L* N, X, k' l4 E2 x. u        hEdma = edma3init(0,&result);
# r$ t" {( j# V' z- |        if(hEdma)
3 c+ B4 L- A5 F0 L        {
% `# t, y0 W9 y7 D" Z' R                print2arm("edma3init() Passed.",0);
1 {$ f; s$ D* u" p+ C) l        }" ?, U! ]+ [0 X0 g0 g) F
        else$ y# H$ N& n4 g
        {7 F+ h  L3 T5 |/ |
                print2arm("edma3init() Failed.",0);
! `8 t/ A( X# x        }
( [  R6 a& e6 L  A# p6 s* v  V3 ]4 d        # R) _* k( _  G7 [
        if (result == EDMA3_DRV_SOK)
4 `( L' P; N2 }& J/ }    {+ M3 p: C: h) s, X& W( R
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
" q3 [( B& ]# p                                                       (EDMA3_RM_EventQueue)0,
* F1 M) X' ]( A/ c3 u7 f0 s3 S& I                                                            &edma3_isr, NULL);8 V8 [4 w% n/ H& l" |; b' D  C# C) _
    }
/ Z8 g$ Z+ k% m8 L" T% K6 X) c3 R2 c        9 Y* ?) g2 }! \3 I
        if(result == EDMA3_DRV_SOK)  }: T/ o4 q5 N
        {
/ u- D( r1 i! F                paramSet.srcBIdx    = 0;
" l, G: n, B/ C+ E$ c                paramSet.destBIdx   = 1;
8 S, E, y/ Y. Q/ |( t                paramSet.srcCIdx    = 0;/ \; B! [( j) B/ F* g5 q$ O
                paramSet.destCIdx   = 0;
9 ^. P3 _3 @# R5 `                paramSet.aCnt       = PING_PONG_ACNT;, r# v7 u, p6 t6 N
                paramSet.bCnt       = PING_PONG_BCNT;, `! S, y' l4 F
                paramSet.cCnt       = PING_PONG_CCNT;9 h6 D! e( ]/ e
               
- O2 f& E' \+ c  q% |3 h: H                /* For AB-synchronized transfers, BCNTRLD is not used. */
3 ]; _# @2 A& p" l: k6 I6 F                paramSet.bCntReload = PING_PONG_BCNT;
" b: y0 H$ _% x' |0 x1 I
+ N7 b- G! X4 G                /* Src in constant mode Dest in INCR modes */
5 f% q% C4 Y6 `2 S. ]) T                paramSet.opt &= 0xFFFFFFFDu;" i  o( a$ ]% u7 F/ l3 K8 Z
                //paramSet.opt &= 0xFFFFFFFCu;3 g5 V! T" a$ u8 D% N" k5 A7 C1 J9 O0 o6 Q
                # C! X! U2 W* [; ~% Y
                /* Program the TCC */
2 y/ {" m  W) S' U1 q7 [                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);" |! r+ Y1 m' r
/ e2 F% I; y' W. z# i9 E
                /* Enable Intermediate & Final transfer completion interrupt */
0 h; e" B0 m9 s! s: _- q) L                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);% _, K) Q; I. I6 `1 c* F7 D& S
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
8 E  R8 z+ E; U- L* g5 C7 G% `* \  l, S# E
                /* AB Sync Transfer Mode */
; _3 ?' A8 G) A4 W: \                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
5 A- S! ^8 X& @$ \# s. q: y                ; v9 @9 S5 _4 }) y" W
                /* Program the source and dest addresses for master DMA channel */2 }' L$ y- j5 H. L4 j
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);3 O; a$ j- @4 F3 j5 |. C
                paramSet.destAddr   = (uint32_t)(ping_buffer);
7 ]; p6 ^/ p! Y  `6 }2 b: t
3 A  m) d9 }' V: r8 ]                /* Write to the master DMA channel first. */
3 J+ [' @5 d0 K& ]                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);0 j) I9 T  v* H% e; |
    }      
  N% b9 {6 b, {" c$ ?% c/ k  z7 z. L& Y. _. H; A
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
! b, M& [8 P' e: g       
6 c) p& ^6 o$ i- R: q. N    if(result == EDMA3_DRV_SOK)
. D/ F! \! h# c- K! n4 f+ {, J    {
$ C) a9 o& g% `            print2arm("edma3 driver init success.",0);
/ s" s0 }+ n4 r3 @7 L  P  C+ s    }
' u- k1 H8 u& N! u- c}& @5 t6 L, C; F! R& L2 U& E# e
7 O# ~3 o7 I" g) r7 V
6 _. i8 C" c4 f3 A( T, @( v% G+ `
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。: j3 V( V! E6 }; g, w
3 N, b( f3 Q! V3 P# _" z

7 h+ F0 H7 U; X  t* L* m3 L
分享到:  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
/ m/ ^. y# W8 d0 r3 u6 E! z每次DMA传输完成后都要再次使能传输
; Y% w. \( j* M: o5 W7 J
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-1 21:19 , Processed in 0.039004 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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