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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
. @- U8 ~3 P9 i( d#define  PING_PONG_ACNT          12 w( P, i6 \: {7 D8 T
#define  PING_PONG_BCNT          8*32*40 2 Q( O* R. C& r; f& Y1 ]4 @$ c
//#define  PING_PONG_BCNT       1 ! _- e; g) G. v! F6 B  r
#define  PING_PONG_CCNT          1
' ]. h, n# P3 I3 k6 _( z* h#define  MCASP_BASEADDR          0x01D00000  u* X' p" g$ Q+ U
#define  Mcasp_RXEVENTQUE        (0u)& u' q' m) W1 I' @5 O" |: |" ]

. Z' k# x* y( k' t) [5 A8 \/* OPT Field specific defines */1 E! S6 t* D5 a0 j/ J. Y$ k
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)8 X5 R+ A/ p2 f0 K. T. i
#define OPT_TCC_MASK                        (0x0003F000u)
- J$ X! _2 U& L& j7 n#define OPT_TCC_SHIFT                       (0x0000000Cu)
; ]  q8 S4 b5 G7 ^/ a#define OPT_ITCINTEN_SHIFT                  (0x00000015u)5 G/ H  E. R1 U7 g& ]- E6 O/ K
#define OPT_TCINTEN_SHIFT                   (0x00000014u)) v0 Z. t4 E& w: }$ E
/ o6 p* E  S) F0 L& b
char ping_buffer[PING_PONG_BCNT];1 R3 m. P6 V! Z5 S* F0 ]3 Q& n
char pong_buffer[PING_PONG_BCNT];
! g' ?7 l$ @( k% k" H5 @3 A0 x! ?, y+ T) w! }2 m3 w
4 c9 v6 G9 j: \" L5 }% k+ `# T
. e1 f' x1 p& |% E& b' f
' d; b; _* y& g! n$ P+ o: G
static void ys_edma3_init()
7 q. q' S! P+ Z& E* c{$ U# t8 }. `! l# S- x7 G3 d
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};0 a3 k1 X3 w% g
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
  ^4 p, _9 S6 n) t+ D4 a        EDMA3_DRV_Handle hEdma;) P. ]' j) L! O6 {* q0 L4 ~
    uint32_t chId   = 0;8 @4 S# n% y0 G
    uint32_t tcc    = 0;
' X  ]1 L& {  |+ s$ Y
. ~" L8 c- u8 W* U+ U: Q) U    print2arm("edma3 driver init...",0);5 F: g7 r8 s5 {) p, ^0 O: K, R# z

! |, k$ m. k7 k3 K7 R* V: ~6 c        hEdma = edma3init(0,&result);
1 k* @: W# R: c  O. n  e2 \) ~        if(hEdma)4 v! t3 u7 U  Q9 K4 ~5 Y" R
        {  x5 g! ?9 _3 n5 y3 F2 K3 e
                print2arm("edma3init() Passed.",0);
% D2 b/ b4 K- \4 Z        }0 V- _: \  e% b
        else
0 w' M; i  p" Q5 o" N        {
: `7 v! E. v: e$ ]. {                print2arm("edma3init() Failed.",0);" r; u2 P4 ^! K8 t* W+ s, _  p
        }- ^. [5 K0 N' e
       
# {5 y3 A( z& a# h/ Y6 W" K4 I        if (result == EDMA3_DRV_SOK)8 z' f4 r& ^5 E- ]" O/ j. O
    {5 n2 `- h5 n. P; Q
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,7 f+ H& R# L$ F
                                                       (EDMA3_RM_EventQueue)0,$ ~$ w! Y' m# k- I
                                                            &edma3_isr, NULL);
, U$ [6 f/ q; E$ y( }& b    }
6 D; w% x, x4 L5 [6 w% _       
1 j  q1 b2 J$ S, ~) G        if(result == EDMA3_DRV_SOK). g& W0 k9 p+ \4 I! d7 B
        {+ f9 X3 @: Z1 l7 L, I6 |( v1 j! D
                paramSet.srcBIdx    = 0;
# X$ b- H9 J5 A* A8 G                paramSet.destBIdx   = 1;
1 Q/ M$ {& s0 J3 F                paramSet.srcCIdx    = 0;
* a5 h0 E3 y* P6 N" M& ?                paramSet.destCIdx   = 0;: \: B, e9 f) H3 Z: l' p
                paramSet.aCnt       = PING_PONG_ACNT;
' x1 d3 }6 i/ V) _. U2 v. g                paramSet.bCnt       = PING_PONG_BCNT;
; @+ {7 g7 d' y4 i1 |                paramSet.cCnt       = PING_PONG_CCNT;
4 _3 x7 v/ |4 L% j, j               
1 Q7 F2 R* W7 `# I' b                /* For AB-synchronized transfers, BCNTRLD is not used. */2 E, Z" Q* p+ E& P) O" \# i( ?, c: O+ P
                paramSet.bCntReload = PING_PONG_BCNT;
, Y$ _3 v8 v  y2 l  j( J5 f0 F, T# C# W$ l/ U# `9 z
                /* Src in constant mode Dest in INCR modes */
% ?* v% Q7 l, q1 O( o" d                paramSet.opt &= 0xFFFFFFFDu;+ {& h, _6 N) ~$ l* u
                //paramSet.opt &= 0xFFFFFFFCu;
- {: ]6 F6 X% y               
$ G1 Q& R( {$ E                /* Program the TCC */! k6 D. O. K* r2 [
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);3 Q' i6 ^0 w0 w
( P0 Q& L- l+ Z6 U) h2 r
                /* Enable Intermediate & Final transfer completion interrupt */
, o4 S2 M+ F! s! i5 i2 h                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
3 Y" i. X- k' r9 [" R/ G) b. ~                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);3 @  R  ~+ h" v# I
% T* N3 j  J5 Z: R
                /* AB Sync Transfer Mode */) g  [. s4 @: l+ S% E; u( j
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);+ F4 W: J" V2 E; {9 e3 C
               
: B: B( s$ ], L                /* Program the source and dest addresses for master DMA channel */
( P8 W9 ~, C3 \& S# H# M0 p                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
" E2 b: p9 s3 A! m6 ^2 s                paramSet.destAddr   = (uint32_t)(ping_buffer);/ V" e. h" U9 W

5 T, j9 n2 b- y, a                /* Write to the master DMA channel first. */1 n* S  B" J0 G" n9 w, ~
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);  H1 @) v* i. g1 K4 j
    }       , O& q; ^- N) Y
6 t# g& ]7 ]; {% l; ^) m
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
$ F5 n- [1 j$ U# Y* L       
! [. d& _9 {, y: J( L% s2 @' ]2 k    if(result == EDMA3_DRV_SOK)
' h6 t2 q* Y' \  N  U    {9 ]8 E) L6 Y9 C" K
            print2arm("edma3 driver init success.",0);
3 F; N- g  _) w! A( q! V2 g- z    }
  f+ `3 `8 ]6 Z* s% G}! A$ c* r: u# a) k& J8 F' L  w

7 j3 E5 G% h; A; Y' d1 L* F9 X! g/ K% b
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。3 w3 U% B2 K; @) @8 n

, J6 c# J" b4 |' d& e) _5 M( K0 v7 d
分享到:  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:474 c* W: |* c  |4 z9 n* W
每次DMA传输完成后都要再次使能传输
1 @1 ~' w  s8 E# C1 B9 o# l
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 16:09 , Processed in 0.042254 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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