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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:$ T( c+ Y* C+ l: T" `  P8 R% k3 f9 ~9 X
#define  PING_PONG_ACNT          1
& U, J5 M  \' l3 R5 y3 @! p#define  PING_PONG_BCNT          8*32*40   p" ?! `+ a2 ^' [9 y8 \# @* h* k
//#define  PING_PONG_BCNT       1
5 T! W6 T1 E* V& h5 H#define  PING_PONG_CCNT          1
6 o9 x" {3 z" A6 s1 Z2 Y#define  MCASP_BASEADDR          0x01D00000
! g  ~( Z7 T$ `. A6 H$ D#define  Mcasp_RXEVENTQUE        (0u)$ Y, H5 s7 g; M% S' ?

) x. [) p# ^+ A5 E% R$ z* J/* OPT Field specific defines */
1 Q% F& ^! n- N7 I5 |#define OPT_SYNCDIM_SHIFT                   (0x00000002u)( P( W  |: t$ X, a9 e1 W9 i
#define OPT_TCC_MASK                        (0x0003F000u)4 _' N2 `+ ?% `' @
#define OPT_TCC_SHIFT                       (0x0000000Cu)  Y6 q1 d9 P! M
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)- r8 C! ~- |7 S& y
#define OPT_TCINTEN_SHIFT                   (0x00000014u). s8 R: e8 ]. d1 E$ R  O

$ N- B' _0 j% U1 rchar ping_buffer[PING_PONG_BCNT];
7 G; h0 ^" e' h1 K+ q0 j( |char pong_buffer[PING_PONG_BCNT];7 b" k' K+ m+ j. m- E
- H+ u6 }& |% h: y$ U
* _4 w9 g4 f8 G, @

0 l$ A, y0 y) q1 \5 E- v; w- M( ~* |2 |" A  o% g" j" L* x  d4 r9 S
static void ys_edma3_init()
8 e6 y+ w, j2 x  E: N{
9 @8 y. n- j- m+ @! \0 }2 G' v8 C        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
! {2 v5 C" E; ]* N: h# t3 c6 t        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
0 D" }' W- K' V; _$ @+ ?$ Y+ N: o        EDMA3_DRV_Handle hEdma;
% i# i$ o5 U" q. v9 u    uint32_t chId   = 0;) T5 ?. u! K5 U! T: L% a
    uint32_t tcc    = 0;. R- }2 y3 ]* H( s, T

4 u9 @) m6 f2 q% I' R" q/ Q    print2arm("edma3 driver init...",0);
* T7 j7 G" v7 j
1 p* t) I2 Y5 g9 F) j4 g        hEdma = edma3init(0,&result);+ T. S6 ~  o0 V2 m, ^
        if(hEdma)& z4 t! e* A; Q' N2 Y. Z. S
        {
6 d6 o5 {( i! V; m6 ^1 i                print2arm("edma3init() Passed.",0);* {& M  w  r9 Q  T
        }  I( ^. E/ j* B2 }( d
        else
' E- C4 a% H& P        {( S+ ^0 t- Y, D9 D
                print2arm("edma3init() Failed.",0);
9 v/ w* \; g2 v% U8 {9 u        }) F. Q" n% _5 j$ m6 M1 N9 Y
       
8 y+ e4 C/ [) _! e& J$ h6 z( i5 P        if (result == EDMA3_DRV_SOK)
( y% K$ ^3 A1 z: D    {
) ^" B4 L4 ^0 S1 s8 W, D# I                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
$ t! q* g# X. F1 A; ~) X2 R6 }9 c0 @                                                       (EDMA3_RM_EventQueue)0,
5 \0 ^( t: s: d, W                                                            &edma3_isr, NULL);6 H9 h& y! {1 d5 L7 H# Z, r, Q# S
    }# _+ F9 S* S. ?6 z7 q# h
        / e7 f1 l! v+ k( f+ |
        if(result == EDMA3_DRV_SOK)
8 |) ^; Q- I' R; d* W        {
$ A0 ^1 W* j7 a0 U) m                paramSet.srcBIdx    = 0;' T* }" f7 T" y2 t) w* {: [' m9 G
                paramSet.destBIdx   = 1;
/ H3 W& l+ `3 r* \                paramSet.srcCIdx    = 0;
; f' ?. i) G( q' T! ^; R                paramSet.destCIdx   = 0;
: y6 X3 f) @! E, O+ b                paramSet.aCnt       = PING_PONG_ACNT;
2 {* [" a% U% d/ r, _! c                paramSet.bCnt       = PING_PONG_BCNT;
# Z; t2 t4 v* I" c) I; }0 n                paramSet.cCnt       = PING_PONG_CCNT;) g  D2 K& k9 l* r" W; O: m$ q
               
: v1 m" x0 `+ ]) _) s2 r0 _                /* For AB-synchronized transfers, BCNTRLD is not used. */( C- B- ]0 n: e  ~/ f
                paramSet.bCntReload = PING_PONG_BCNT;& b% X3 d% e5 N- H

6 s1 ]3 t0 f2 ~% L5 `2 J                /* Src in constant mode Dest in INCR modes */
8 z; I- m2 I4 o. p0 p. g                paramSet.opt &= 0xFFFFFFFDu;
# G5 [, y4 W% D' h9 }9 F. w                //paramSet.opt &= 0xFFFFFFFCu;0 ^- l% u3 S0 `: v
                , o$ C+ A* @' W- ]
                /* Program the TCC */5 N% c* a- G  |
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
- b! q2 C" r9 T- S2 N* P! _7 [2 j8 L$ H  g1 ?
                /* Enable Intermediate & Final transfer completion interrupt */
' A/ o/ n! b9 W0 k3 |" r                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);$ j. r# J; a! Q
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
) y9 B3 |8 e% e7 V2 O$ a! w7 y# Z* z+ u+ T& Y
                /* AB Sync Transfer Mode */
! O" F4 u. b2 i                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
# T3 K% ?) b1 q5 ]' S- }6 ^0 O               
: H* Y4 b; K/ N; z# v) f                /* Program the source and dest addresses for master DMA channel */) O8 N, V2 Y2 _% }8 l
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);5 ?/ h4 X7 W3 o! ]
                paramSet.destAddr   = (uint32_t)(ping_buffer);/ P0 J/ o5 \$ p

( c% s; `" o( P                /* Write to the master DMA channel first. */  G& H6 Y6 d- ~; L: g
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);9 U4 s% Z! K) Z) z6 x7 }7 ]- w
    }         y8 r1 h- M, S4 ?# B! h0 j

7 u  A8 s4 F5 w1 T$ \        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);. Z9 E+ m* z, w) |& j9 _
       
( |) p% l; o( \' X( {! X. y    if(result == EDMA3_DRV_SOK)
" q! S- F6 J3 a9 M2 u! @% v    {
' E4 j. q3 P! T8 X3 E            print2arm("edma3 driver init success.",0);9 {( n& |  J- I0 U9 e5 G# b
    } * Q0 W$ R. }: b5 u$ \' S9 N
}6 ?) H+ b+ z4 d" D0 g4 E

! w$ `* U( q3 S7 t3 U  s0 l7 E
/ e5 r* `5 L# S  ]( S. tEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
2 J, J$ A; ]# _: v; S8 X* y/ J( G8 n; |

/ X) a% V( _5 {4 O  p
分享到:  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
" Y% i; ?' o" {/ |+ Y$ t. d& \7 z" J每次DMA传输完成后都要再次使能传输
9 ^; f: X* V" [& D( Q. A. D2 ^/ G
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-2 16:47 , Processed in 0.044600 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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