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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
" A$ F' h6 Z7 z; }( b9 M6 _1 {#define  PING_PONG_ACNT          18 t6 T5 k" ?% H1 H$ [! S7 p8 a
#define  PING_PONG_BCNT          8*32*40 ) [5 \  w3 m1 Y+ {# I) y( |
//#define  PING_PONG_BCNT       1 7 Q9 U" v; U, L0 Q8 i9 l% N$ H
#define  PING_PONG_CCNT          1% H( T7 t7 a/ Z; n& j
#define  MCASP_BASEADDR          0x01D00000
7 R" g3 w2 [2 b0 O2 C#define  Mcasp_RXEVENTQUE        (0u)# g  Z2 t( R* L* m! K9 F$ L! [

$ \4 I, N5 o. }, ?# H  s/* OPT Field specific defines */7 V: D1 ?: u7 m
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
. |* O( r5 e1 J% r#define OPT_TCC_MASK                        (0x0003F000u)
( X. B  g( H8 }' z/ G8 ]#define OPT_TCC_SHIFT                       (0x0000000Cu); R( L$ k5 J. f, o( ^
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
% `9 w6 w1 r4 [#define OPT_TCINTEN_SHIFT                   (0x00000014u)# }7 {, l; e) L" [
# s# o, O- F" F* O
char ping_buffer[PING_PONG_BCNT];  X$ @8 `( a2 ^3 g( U
char pong_buffer[PING_PONG_BCNT];* h0 s1 f7 n, r, \: _! e
5 Z3 s, W/ Z8 o

" I" f8 O/ i- @' V% T3 @& ^4 ^& e2 ^, U, X! g# E: N
/ y8 z' y9 r. B/ ?
static void ys_edma3_init()! [  k+ x. m, X9 Z. H3 O2 d: \0 [
{
$ ~2 V  R1 g2 O- c5 V7 w5 ^" [        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
! `) T2 {6 h4 F2 ~4 a        EDMA3_DRV_Result result = EDMA3_DRV_SOK;1 I, a2 }( G( d: I
        EDMA3_DRV_Handle hEdma;2 b# A1 W  W% a
    uint32_t chId   = 0;
1 ?, C6 D+ H. |5 F+ H    uint32_t tcc    = 0;0 Y0 E6 {/ b. J7 e8 N2 E

# \- h# @2 E& ]" i7 q& y3 o    print2arm("edma3 driver init...",0);( H& ?/ {, w4 v+ S' ~- _* T5 {

0 i9 W' c) @' p) @% j+ ~        hEdma = edma3init(0,&result);9 Z/ g$ C' d8 f1 k
        if(hEdma)' U2 }. M% z* E6 _8 N2 a- B
        {
* R+ |' t! D2 E# K0 K0 K; x                print2arm("edma3init() Passed.",0);9 g3 s4 h9 D, u+ [5 y" {0 S% X
        }* F3 s0 A# o9 }' ?  S+ d  ?
        else- m) R0 X! y5 j) L
        {
, @; J. C9 ?+ |$ v& }& t6 X6 v                print2arm("edma3init() Failed.",0);* U! y& y- L0 P3 l
        }
1 h0 i& ?" t3 _        2 v" h( `! n, p$ n& p
        if (result == EDMA3_DRV_SOK)
. A" Z: K" r0 b0 `, O# H    {( B* @$ P7 x: }+ S
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
: _( c" ]- {' L& U1 P                                                       (EDMA3_RM_EventQueue)0,& _3 u4 u0 W8 v+ Z' N$ y' r5 J- V
                                                            &edma3_isr, NULL);
; d8 a! c) F$ P" N3 D+ X# W, \3 `7 ?    }( _7 B% ^; Y5 z, y: Z2 W) m: H6 x
       
+ F- H% E" @. z        if(result == EDMA3_DRV_SOK)
# ]* D/ b3 E" S2 L+ p" ~        {8 {- x+ u8 H  x% M% A
                paramSet.srcBIdx    = 0;: y# m# J0 F7 \
                paramSet.destBIdx   = 1;
6 U% H3 h/ Q# [% e+ Y7 ~. n: }                paramSet.srcCIdx    = 0;
, P8 Q$ l1 r$ C                paramSet.destCIdx   = 0;
4 u8 T7 u; o: h; s3 \) `                paramSet.aCnt       = PING_PONG_ACNT;
6 V7 c1 V: x0 P" B0 F: b5 [9 V* O, z                paramSet.bCnt       = PING_PONG_BCNT;" Y! t5 E, z* }; J5 g* j
                paramSet.cCnt       = PING_PONG_CCNT;/ z- g# E6 `! y3 G
               
7 ~: D3 b; g1 M3 O+ v& E0 V                /* For AB-synchronized transfers, BCNTRLD is not used. */& Q8 ~6 s8 p& L$ T* r& f6 C
                paramSet.bCntReload = PING_PONG_BCNT;
* j2 Q4 m2 t0 c0 I! K5 [/ Z. [/ J' L2 Y, T
                /* Src in constant mode Dest in INCR modes */
9 I5 G' x) Z! ~                paramSet.opt &= 0xFFFFFFFDu;* Y5 y; H* g0 l& Q9 F. L# R
                //paramSet.opt &= 0xFFFFFFFCu;- v2 k" B6 _3 Y6 C9 m
                4 @3 `, Y' O' a$ q% k+ U
                /* Program the TCC */
3 q* z1 R, n0 k0 b                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
4 b# A1 l- S' l) m, s) u
/ l8 |* G! t, m8 M: I                /* Enable Intermediate & Final transfer completion interrupt */
0 X1 c' M8 [, }  L- e                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);" ^& d# ^) F1 S- [% w8 m
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
& \+ M  E2 X& [7 S, \
9 l% l; @) J2 w6 g( z                /* AB Sync Transfer Mode */+ @" d: R; g/ b' e" R# [1 ^
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);7 D# H/ W1 f! g- Y7 f& c
               
$ g+ R0 j* r/ T$ p                /* Program the source and dest addresses for master DMA channel */
* Y5 _1 {* q# V$ n8 ~& i                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);* D( Y" v- p: I- e4 F$ r8 i" a
                paramSet.destAddr   = (uint32_t)(ping_buffer);. D; l1 n# M4 x: F; r$ I

, R1 d4 C- F$ X7 ?0 @7 _                /* Write to the master DMA channel first. */
' A; T# U- P0 ]5 E0 L                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
5 @2 p) x0 U1 `/ T# Y. ^    }      
! ~+ F- k0 X$ m
5 p( ^7 z3 P6 N  ?        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);- M* E- D) E& j4 Q# r! H! B6 @
       
- a  u# t6 Y1 c1 \) W7 f8 K    if(result == EDMA3_DRV_SOK) * n& p! E! ^# `2 p; w6 m
    {$ U4 D! T2 t& j! c2 B' ~" u, V
            print2arm("edma3 driver init success.",0);
& y( S5 X1 D0 S' J: ]2 W    }
3 X2 R2 D7 f% |# C1 N4 V}
9 t5 k9 K/ g( H( b  s
5 r% F2 {. p. J, K# ~1 Y5 n9 l  C2 `# n  a, r9 t
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。# j% o: x; @* z

' B$ m+ ^: m  G7 o! v) i$ |) L( |8 l0 C$ d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
板凳
 楼主| 发表于 2015-4-29 23:25:56 | 只看该作者
Lewis 发表于 2015-4-24 10:47
/ w( W& H3 X/ w/ q( f6 A0 E每次DMA传输完成后都要再次使能传输

4 t+ p; F/ r% x& s# f: l( p原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-30 10:14 , Processed in 0.050853 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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