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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:& M4 O$ ~% m* o& v) K8 ]* T: b+ J
#define  PING_PONG_ACNT          1& @( K4 q4 Q# V% C
#define  PING_PONG_BCNT          8*32*40 8 E( S! C4 H  `4 M% f- Z- f( f
//#define  PING_PONG_BCNT       1 8 r! H9 }+ U; K( |1 P4 N  O
#define  PING_PONG_CCNT          1) S$ P" B. {9 n2 W& h, g4 R% Y
#define  MCASP_BASEADDR          0x01D000006 e3 ?5 T) `$ k! T
#define  Mcasp_RXEVENTQUE        (0u). O6 @6 k7 d+ s0 M; n& L$ I$ t8 o
5 u" E/ q5 `+ S" d+ q" n% [
/* OPT Field specific defines */
# d0 c$ J$ E6 B# |9 B#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
4 F. Q, b# u& S" O- e8 x1 \#define OPT_TCC_MASK                        (0x0003F000u): X& I0 }5 v) d* t& c) w
#define OPT_TCC_SHIFT                       (0x0000000Cu), l# u3 r% M3 [& M8 t
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
6 h) Z# z% u9 d( z. s. @#define OPT_TCINTEN_SHIFT                   (0x00000014u), z# R' \- \# L0 _' b! {) n( y  y

( y5 c7 J* v# t# B8 ?char ping_buffer[PING_PONG_BCNT];, _1 W5 O0 P9 m2 C
char pong_buffer[PING_PONG_BCNT];- J8 E7 g9 H0 o

/ o7 G2 \7 v- K+ d* E
$ I5 M- s: {! y) D+ f1 R6 a+ T4 T0 a# U% h% _- F6 O

3 @. y& ^7 H* `  R. _static void ys_edma3_init()  t4 I4 k* i. P- E
{, r; G# B1 R1 H: R( M0 v! d
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};; d$ o, i* X* v, D
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;" v' [! ^( B9 G
        EDMA3_DRV_Handle hEdma;4 C0 i, |& E% ?' d2 S- G
    uint32_t chId   = 0;
- ~+ V) }: Y' u$ W! e- f2 `# J    uint32_t tcc    = 0;
# p1 B7 l/ }% q& q1 f# ?! C7 X! u" E& _7 L; o' _
    print2arm("edma3 driver init...",0);
2 l6 v$ J8 F& K, v0 R% s
! T# h! d- o8 V1 Q% P1 L# t        hEdma = edma3init(0,&result);8 X$ t7 ?: f9 U& S1 v
        if(hEdma)/ Y! k& ?0 O* K, J. a
        {7 M  W/ h$ P1 @' U( F0 f0 l' }
                print2arm("edma3init() Passed.",0);
  U, ^# x8 g! D" G- x$ r3 x! V7 }7 D        }
. t  K! j0 `8 Q        else( d3 ^1 J+ |. y+ q9 b5 F: T0 S
        {% @" w) Y  h) x
                print2arm("edma3init() Failed.",0);
% C' k! n, O6 g  f, I( I; ^% y        }( n5 ?+ M& r' k8 a  y" x
        " ?  x5 J( C7 e6 N  O) p
        if (result == EDMA3_DRV_SOK)
( B6 R. X2 p% ~4 |2 M# c# U" i    {
; ]4 _/ R2 O* \                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
' d6 {) }7 L) J' r- ?8 L                                                       (EDMA3_RM_EventQueue)0,
% r0 `2 s. O/ B2 O; K                                                            &edma3_isr, NULL);- B; U  U6 d  f1 c# J, n: q+ u
    }
% m6 m1 L1 H: r& n% v       
: E6 Y: |" M- l& c4 s) i* ^        if(result == EDMA3_DRV_SOK)
+ g# C& y4 @& U. h0 W7 L- [/ M        {
7 ?- p- b+ k# M0 _                paramSet.srcBIdx    = 0;
; F0 H3 Z$ t+ |# m                paramSet.destBIdx   = 1;
) Z( N. h* w) w2 j                paramSet.srcCIdx    = 0;) g: d/ u, g! }# ]" d% l
                paramSet.destCIdx   = 0;9 ^/ G) I7 m, m# d; ~% a
                paramSet.aCnt       = PING_PONG_ACNT;
* d: q& c) U. H# z& b                paramSet.bCnt       = PING_PONG_BCNT;* _1 e5 r, l% h
                paramSet.cCnt       = PING_PONG_CCNT;+ `2 b: N+ t0 K7 x
                6 y9 D/ D7 o* a1 J" v- x2 s
                /* For AB-synchronized transfers, BCNTRLD is not used. */  A0 P& _  n. i* q# }1 `+ h. n
                paramSet.bCntReload = PING_PONG_BCNT;. B) l( ^: ~4 p; \) s6 g% {" c
% B; K. o# L9 R, v3 G
                /* Src in constant mode Dest in INCR modes */
+ s! d! Z+ T: E9 v7 {/ M! t; X                paramSet.opt &= 0xFFFFFFFDu;
6 u! v0 {" q: D2 Q0 W' S4 P                //paramSet.opt &= 0xFFFFFFFCu;2 k% e2 a$ c0 c2 f- }7 n5 J
               
- d3 H, {( v/ i" M$ N4 J% x                /* Program the TCC */
1 F' Z: N+ i  g. A# g                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);& L5 [! l6 I. G3 I& I4 f$ B

* `1 |( {1 B' @$ B% x: s                /* Enable Intermediate & Final transfer completion interrupt */
1 \2 y& w4 @& K( C  A  L; K+ A+ A! B- d                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);- T0 u" u. M% w+ N
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);4 B* I8 G1 P# ^8 q# b
* k& q# T2 n0 Z/ ]" U$ l
                /* AB Sync Transfer Mode */
$ C4 E$ [* s2 j9 K                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);6 j) G  l2 d  f% C! A1 g
               
5 N1 i& O/ m7 d. g* L, Z                /* Program the source and dest addresses for master DMA channel */
2 ]5 c( r+ S7 B* r* i: E. L                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);; J5 u1 z" E' o% b( v
                paramSet.destAddr   = (uint32_t)(ping_buffer);
7 [, A" j$ d* l: F( ^
$ Q. x3 \1 G5 T                /* Write to the master DMA channel first. */1 d7 p$ K5 O; w6 L; H
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
9 p' R" x2 d) q& {/ l    }      
  M- O. w7 b$ l" K
' g: c8 T1 \! C8 r$ S        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);2 N0 L1 W/ r. V3 t% O$ J. N. m
       
" ]3 N$ t: F. z: L* z3 U    if(result == EDMA3_DRV_SOK) & {2 R4 n0 f: B  S
    {1 V% A0 U% H% [
            print2arm("edma3 driver init success.",0);# q  l/ h# g4 P0 ~& [) P' @
    }
9 F# |) q* L0 N% c, \! e2 q}
& x2 B1 ?- g7 y( n# D# N: u
$ N1 {* A* Y8 R6 t
, L4 R( R) r+ ^' I; @( REDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
9 X2 R! q% z% n( s/ O$ G, i7 P. [1 ~. ~* ~1 ]- `8 R- V4 s4 A" W
# ^0 `: t; m  A! |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
板凳
 楼主| 发表于 2015-4-29 23:25:56 | 只看该作者
Lewis 发表于 2015-4-24 10:47( l6 G& O7 u& Y' z) x
每次DMA传输完成后都要再次使能传输
6 Y: i% G4 u1 o2 `- }
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2015-4-24 10:47:00 | 只看该作者
每次DMA传输完成后都要再次使能传输
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-9 18:16 , Processed in 0.040309 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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