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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:2 W; C: T3 j  G" \
#define  PING_PONG_ACNT          1
! h: d% k, b5 I( l' T#define  PING_PONG_BCNT          8*32*40 7 Q4 F3 `0 Q) u
//#define  PING_PONG_BCNT       1 ; q% F6 b2 l, s* @9 @
#define  PING_PONG_CCNT          16 H( ]% f; o6 T6 {9 }9 ^
#define  MCASP_BASEADDR          0x01D00000, e; ^0 c9 C: V
#define  Mcasp_RXEVENTQUE        (0u)
/ ~( [) W4 p' B4 I
) a& \- @% R6 i9 T/* OPT Field specific defines */
; i6 T( f; i/ z5 l0 K# D( R+ g) |#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
( O4 @; W! x6 h$ s+ Y' l#define OPT_TCC_MASK                        (0x0003F000u)
5 @1 l# _+ |7 L" k#define OPT_TCC_SHIFT                       (0x0000000Cu)0 Y1 b1 L, L' e, T
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)4 k% Q! |: u, w: J# ~3 s
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
1 v( V  R/ l* Q" R$ r9 [
# Q* [% H8 a2 q2 J$ s4 k9 t2 T" rchar ping_buffer[PING_PONG_BCNT];5 m4 L+ q2 r+ _& r# f. r% w3 q% L; o, D
char pong_buffer[PING_PONG_BCNT];9 `1 e, P; `, Y8 N

; o; U9 b" M, I4 e& V# K% G
: ?1 B4 p7 p6 E$ j' r8 z3 q, U* Y! _6 Q" l8 \& U0 K; Q% k+ R
& O8 H" g- g6 V( B! n6 j
static void ys_edma3_init()9 C4 w8 }+ {6 h) i# {3 Y% V# s
{  O: j) M7 \/ d* Z5 {
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
/ `+ ^. U7 J" e/ D' p+ W        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
, Z' B: c; b$ m0 f, G        EDMA3_DRV_Handle hEdma;4 z- Q* `% o; l: o' w: o2 u
    uint32_t chId   = 0;% s2 d( O. {* [) }. N% y
    uint32_t tcc    = 0;
0 P$ |2 j6 y$ F" C8 {) E
- u0 z* L4 N' j: w: c- @0 T' D    print2arm("edma3 driver init...",0);
- A% C8 O% j) H. z, I( q" ~' x# k/ S
        hEdma = edma3init(0,&result);4 g. d* ^: E! O1 K2 ]
        if(hEdma)
: F- D3 z; t5 a1 s        {
  }7 u! |( V  S+ A1 O                print2arm("edma3init() Passed.",0);
1 I" N) y$ m* X7 K        }
# F' Q/ f; p: W, C" h' d        else
$ F% q* @; e% g# n        {; B  k: F% T" G
                print2arm("edma3init() Failed.",0);/ \# Z4 C% S( R8 g% ^
        }' H# {# h1 n% o4 y% |
        ' O* d) z# b) K8 k; T
        if (result == EDMA3_DRV_SOK)& z& Z# a  k2 `& i1 I9 g
    {( W1 ?3 m, T1 n4 y8 F
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,( v- _# I* }$ w8 w5 b; ]
                                                       (EDMA3_RM_EventQueue)0,/ \* [; G& c, x+ R
                                                            &edma3_isr, NULL);
5 Y$ G2 ^9 S) @6 y: d    }1 i( W% X( X8 B$ N
        * p, V# S7 T4 [) k
        if(result == EDMA3_DRV_SOK)
! ]) ]/ r- U6 X9 B5 t- X2 d0 y  R        {
" F  M: ~( A8 v& j                paramSet.srcBIdx    = 0;/ Q6 {7 k  s9 e
                paramSet.destBIdx   = 1;7 h& A) R. f; z& n! D3 X! e
                paramSet.srcCIdx    = 0;
% L3 v) e3 [8 ]; {3 }3 ^                paramSet.destCIdx   = 0;
; {; @/ q4 w8 e! |1 ~0 Y" [+ X                paramSet.aCnt       = PING_PONG_ACNT;4 O0 w% n- o, E' X7 m
                paramSet.bCnt       = PING_PONG_BCNT;
+ X9 ~% T  Y) ?3 o% P                paramSet.cCnt       = PING_PONG_CCNT;: t1 c" J! I3 X) f" J% Z2 K1 c
               
- S2 G7 ?8 }. y9 f" N( ]                /* For AB-synchronized transfers, BCNTRLD is not used. */8 y  m2 W& {  M7 \) b
                paramSet.bCntReload = PING_PONG_BCNT;4 Z; \2 K& f) d! d4 h+ [

4 ~. w" T" w' U# n, G                /* Src in constant mode Dest in INCR modes */! h1 |7 R, e+ Z3 M
                paramSet.opt &= 0xFFFFFFFDu;
. N4 u4 ?; ^$ Y( T                //paramSet.opt &= 0xFFFFFFFCu;$ v5 j9 I6 |) g' Y
               
4 Y4 s9 N' [( ^* @$ I                /* Program the TCC */, {# c5 N1 K# o% K$ z
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
2 }( p' `6 L$ K: o! z: w3 p, o' ?8 |( T5 [
                /* Enable Intermediate & Final transfer completion interrupt */8 \; U3 F2 o$ \
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);) X  A) P& `( R2 n6 H
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);" U9 W# z7 u& G4 Z2 g0 Q
2 b9 D6 v7 n& v
                /* AB Sync Transfer Mode */) y3 `* ~  ]& o( g# N( a/ M
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);: J$ u# G1 o+ N0 l# n7 t* v
                8 J) n7 b9 X+ v1 ]7 R" R* O5 q& _
                /* Program the source and dest addresses for master DMA channel */
6 k  j: u( I, r% g9 y                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
5 Q+ Z% O3 ?1 K: |! G                paramSet.destAddr   = (uint32_t)(ping_buffer);
" v/ [) O0 U5 r! Z$ [, B- k: E& ]& ~
                /* Write to the master DMA channel first. */
. W7 @4 p5 @( B. m: Y2 a                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
. L: W8 {" ]+ L1 M/ B7 h    }       3 r7 U3 Q  C- F/ }
" N- K- ]& \/ t
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);3 U) F/ L# L* F$ b  k; z
       
2 G) D% z3 G  w' N1 [& t9 e: J    if(result == EDMA3_DRV_SOK)
. ?& g4 Q7 v( V1 P- C! z    {& l) d) v0 [6 I7 B: U6 q/ e
            print2arm("edma3 driver init success.",0);
+ _7 n# ^+ L! z& r. Q1 ]    } $ t( C4 S+ M# B
}
% s" s) G8 X* y6 j7 _! I/ P! `+ p) r" @- j% _
2 K' G9 ]! R/ K  _
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
- w/ ~% r' R9 `1 u0 t% u3 m
& _$ [2 y( j; R5 B5 {/ s% g5 b0 _. Z, c2 b, R. r$ \
分享到:  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' O) b% J6 U( U) h
每次DMA传输完成后都要再次使能传输
) U; K$ U0 @5 I- d9 Y
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-16 19:26 , Processed in 0.041457 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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