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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:2 `( B( S" d( k9 W  H9 @" X
#define  PING_PONG_ACNT          1
9 y1 A) N) ?! R  A) c1 L* E#define  PING_PONG_BCNT          8*32*40
' h" w' E; S' m/ ~9 y# u//#define  PING_PONG_BCNT       1 9 D0 B$ G6 C7 Y' J8 q4 P
#define  PING_PONG_CCNT          1
5 [$ U: b3 i) m$ m8 ~+ H#define  MCASP_BASEADDR          0x01D00000$ |" V% P0 e2 E) C) w5 W+ ]& {1 k
#define  Mcasp_RXEVENTQUE        (0u)' q. {6 f( u: r! x+ E/ i

( L- O! l" x0 ~) b6 x/ h: H/* OPT Field specific defines */
; g. l) `9 c9 k* [& g#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
2 n. k% H. V. `* r  y#define OPT_TCC_MASK                        (0x0003F000u)3 o* g; R5 X. X  F
#define OPT_TCC_SHIFT                       (0x0000000Cu)' t' ]5 s* t7 x* z
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
+ t# w* n8 N" |3 J5 L% U8 a; O#define OPT_TCINTEN_SHIFT                   (0x00000014u)
" v8 ], B* Q' R2 t% q! e
3 i6 P6 E# @) I+ n5 Ochar ping_buffer[PING_PONG_BCNT];- q7 z& k' {( i" p) w+ z1 v& Z. v' c4 N
char pong_buffer[PING_PONG_BCNT];8 ?! S& l) U# K
% X1 c2 ^. c; S9 s" c4 {' j; E

& d  a) ]2 C# n: O' R
  _! m& W* k! O3 g$ t$ x- S/ l% E# n: F; F. l
static void ys_edma3_init()" u3 z  q! c3 Z# O3 {" x/ x
{* Q) R+ \2 b- n- I
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
7 \; [1 H( @! Z) v( f" F% d  M        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
+ ?0 r! @2 K. {5 q        EDMA3_DRV_Handle hEdma;$ F3 i. {( N4 `6 |  P3 M
    uint32_t chId   = 0;. R( y: s( C0 |+ i
    uint32_t tcc    = 0;
  r; Q' v/ B! W: ^7 w1 r( a& {, J: C; X. }$ ?3 f( [$ t; T/ H
    print2arm("edma3 driver init...",0);1 ]4 _7 J3 z; y* q, t( Z# A
/ j: G+ `3 H% ~7 e9 Y
        hEdma = edma3init(0,&result);
- x! Q4 j/ ]7 V* M+ ?7 d        if(hEdma)+ l% t& ]5 e2 k0 c1 L
        {
! R7 b3 ?& C; o! C, S                print2arm("edma3init() Passed.",0);
5 h- |) P& V& l4 A1 W        }! `  {7 [/ ~  H4 b+ b8 T* }/ s
        else
" r6 j) r. m; h5 x2 x/ ~        {8 N0 K/ q# ~& K& g4 ], ?+ q
                print2arm("edma3init() Failed.",0);* ^- d9 Q0 R$ H+ M& d1 o, ]& N
        }  C* E$ ?7 V/ N8 F3 m
        8 I) W% g( p, x
        if (result == EDMA3_DRV_SOK)8 C; p% y) E2 W3 [  ]
    {
( o0 I4 Y( `" X                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
" Q& Q/ l7 q- s+ c* n' j. K1 L                                                       (EDMA3_RM_EventQueue)0,0 W+ w7 a# z# q" ?7 W: `9 Q
                                                            &edma3_isr, NULL);
1 B9 G" z/ x3 Q$ z( U5 W    }
+ R0 v  a) `6 A+ o- _$ @3 F        ! i0 m- N% c: e; Q& g1 H
        if(result == EDMA3_DRV_SOK)- r/ S; [4 R! d' d# x2 y
        {
, R2 _8 z& h0 d* x! ?                paramSet.srcBIdx    = 0;" R% v; H; O- k6 J
                paramSet.destBIdx   = 1;
- j7 H% b3 g% D2 y& t! `( X, p                paramSet.srcCIdx    = 0;! ?' O7 ~- H' G9 n$ a. |
                paramSet.destCIdx   = 0;
* G- m& g( n( F7 S0 b6 B& {                paramSet.aCnt       = PING_PONG_ACNT;( Z8 h0 V% E: S4 @( c
                paramSet.bCnt       = PING_PONG_BCNT;( O! r5 @# U& i$ O
                paramSet.cCnt       = PING_PONG_CCNT;5 H! s' N- J8 y; c- i
               
/ y7 V2 g1 J" u8 H* o0 r                /* For AB-synchronized transfers, BCNTRLD is not used. */
* n% }( Z( _6 |( Q                paramSet.bCntReload = PING_PONG_BCNT;
' Q( t  s2 k. ]) s1 I& q: e9 H
7 i2 _! r% A2 ~% x3 x                /* Src in constant mode Dest in INCR modes */
* I! @$ m1 b9 R# e) s: w                paramSet.opt &= 0xFFFFFFFDu;2 H% {, b3 y6 C+ r. j- P1 F
                //paramSet.opt &= 0xFFFFFFFCu;, y& F0 T# m( |* a
                1 U" k, l& x+ a3 d
                /* Program the TCC */# r; E) j% Q0 U0 a6 J$ @* Y
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);2 E7 ?, q( b% t& q# G

' e2 t$ r9 F- y8 }* B                /* Enable Intermediate & Final transfer completion interrupt */$ n9 k% G" E! p, D! k+ |0 f' J
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
5 u( @7 J4 m" V; }1 @' o                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
# F0 O, [, x6 x8 n1 N; D9 ?& x
/ @8 \3 E! D/ A' ?. R* j% M$ j                /* AB Sync Transfer Mode *// Q, x: w) q. C
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
( E( Y& S, l- Z8 M( [& j2 U                ; w$ q: |# S/ l) }# |7 o* m
                /* Program the source and dest addresses for master DMA channel */
, I  q5 M$ a1 {3 i% k7 M                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
) [& ~0 q, G- u! F; v/ Z0 i                paramSet.destAddr   = (uint32_t)(ping_buffer);
+ |7 W7 B# x: h
  G2 S1 {% u: Z$ e2 }+ X4 T, _* [                /* Write to the master DMA channel first. */
: D( V% j* P4 C6 x5 u* R                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
* }% X+ S; k8 u. l/ _: Y    }      
( M: N' }8 G' ?1 V3 R
* a" [& ]  D3 d; A/ N" @  m4 E        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);' m6 L3 x' E% {
        , o! ?$ ?! q2 X
    if(result == EDMA3_DRV_SOK) 7 x  V* T0 P, ]
    {
5 G2 ]7 c* M/ Q! _# E) ^) Y            print2arm("edma3 driver init success.",0);5 x" C$ G* O8 x. K$ M
    } : P6 M" t# }, L4 F
}) _; L) {0 j& _
2 n$ s+ ?* @5 s2 p2 U& [. E( \" ]
) u# {+ S# X. l) |
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。! Z5 q  S% W4 g8 ^1 X, [4 d

; e8 U5 ~( F* ~. s. C+ m! f
: g: V+ ~* l8 C
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
板凳
 楼主| 发表于 2015-4-29 23:25:56 | 只看该作者
Lewis 发表于 2015-4-24 10:47
1 @( A+ k. O( l$ Z" ~8 _0 {7 l每次DMA传输完成后都要再次使能传输
- P! e" L, j) h0 s$ n: e- x
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-6 18:00 , Processed in 0.044115 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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