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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:* z1 [5 i1 i$ ]
#define  PING_PONG_ACNT          1
& c0 O; N3 j* X2 z/ ~#define  PING_PONG_BCNT          8*32*40
- j8 F+ B* p2 ~/ A* C3 G- U' d//#define  PING_PONG_BCNT       1
" [3 o5 g& y$ C5 F: N9 D#define  PING_PONG_CCNT          1- `9 J! z! F/ P8 w7 n2 g
#define  MCASP_BASEADDR          0x01D00000
! x% {9 s- @7 ~( a4 ?" J4 N#define  Mcasp_RXEVENTQUE        (0u)& p8 m. N  D- Q% A: W3 N

1 S# ~: Y4 U0 p$ r0 o7 s% s/* OPT Field specific defines */% m8 N7 D# I1 Y
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)" |0 @3 K$ [% X: o$ A5 c5 Z
#define OPT_TCC_MASK                        (0x0003F000u)
( i3 g/ P. z, N0 Y" g5 w/ w#define OPT_TCC_SHIFT                       (0x0000000Cu)$ L! ^" A, D- l; O: F
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
# }& Y/ h+ H  Q- _  Y- P#define OPT_TCINTEN_SHIFT                   (0x00000014u)
! i* A. }; }  X1 M( i& w
- G! C0 y# D6 T* U: x0 u, S6 _' ochar ping_buffer[PING_PONG_BCNT];
7 O6 U3 ^( a1 z3 `( d- nchar pong_buffer[PING_PONG_BCNT];
( V- c! M) h3 p8 _& P* R8 |9 K; c# W  z
9 f' t- ^" Y: E/ u5 r! r

; y7 U7 h5 T$ ]# v, V6 G& T) w) p+ t) d& T3 q* K' i
static void ys_edma3_init()
; u' e3 |5 x" c; z& j{
6 N' x3 p* Q# C9 H- \. Y) r4 l) T, k        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};1 }9 N- K% @7 |* _, C; F
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;0 m# u3 K4 H( ^* x! @' e
        EDMA3_DRV_Handle hEdma;
5 @/ R# J! K2 J3 q4 l: o0 c    uint32_t chId   = 0;
+ W# T" K- v* C  h; G    uint32_t tcc    = 0;4 i. \. [7 I% b8 e

  {* u3 R! F* b: A    print2arm("edma3 driver init...",0);
  a" c' \( {0 K) R" F( ~7 ]! z4 h  a4 v
        hEdma = edma3init(0,&result);) [9 \& c$ G$ g' ~' n' Q. h
        if(hEdma)
0 S6 J5 z$ l6 J$ |% n: D% M        {; [2 e9 ^( |( n- Y* a. X, Q
                print2arm("edma3init() Passed.",0);; O, Z& X1 x" @- n' I% P1 w% h
        }
5 ^4 g" S8 v% s" v4 O        else
& `2 w+ S5 ^4 Z6 r9 A        {
* A' i9 V1 b( z. Z  X                print2arm("edma3init() Failed.",0);
5 h- |" N; A- N8 ?, ?        }4 q) V4 \1 g7 }/ ^6 j! q, H
        ; t# v" j7 Q2 _3 C
        if (result == EDMA3_DRV_SOK). G) ~+ U1 y; `! P: f' e7 U
    {
& o0 Q( [+ z4 s0 ?( h                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
3 l3 Q/ [6 s" J5 t) a/ [                                                       (EDMA3_RM_EventQueue)0,0 O5 {1 r, v. o* `( P. q
                                                            &edma3_isr, NULL);
1 K; v+ k6 Y# o4 c. p. L9 a# n) E2 G    }
! J; C2 h' q: z8 ^1 z' X$ H        , w+ u3 P; \- S8 d% i
        if(result == EDMA3_DRV_SOK)
- f* s1 ]$ u3 D3 V        {
! ]! n, s' X+ ?1 a& D% E* `                paramSet.srcBIdx    = 0;0 P9 D5 M) z2 Y7 z1 ^3 n
                paramSet.destBIdx   = 1;
# h& b- _0 D6 U                paramSet.srcCIdx    = 0;4 E, ?5 u7 n  o4 Y  i! j
                paramSet.destCIdx   = 0;
. W9 t8 ?, h+ x. w                paramSet.aCnt       = PING_PONG_ACNT;
; h1 a) H% s9 ]- I                paramSet.bCnt       = PING_PONG_BCNT;
; j2 l+ {3 G3 ~& }9 X: ~                paramSet.cCnt       = PING_PONG_CCNT;. t6 p; A8 Q# P2 I  V; ~
                3 w1 u% D' D) D" z0 N
                /* For AB-synchronized transfers, BCNTRLD is not used. */: o, X3 j' t8 [8 A. u
                paramSet.bCntReload = PING_PONG_BCNT;
, b( F( G6 l  E6 n. `" H3 `- @9 H2 H
                /* Src in constant mode Dest in INCR modes */3 c1 ~8 u# P# O$ E4 v& H( _
                paramSet.opt &= 0xFFFFFFFDu;' F  s) H1 v( J4 f5 Q
                //paramSet.opt &= 0xFFFFFFFCu;+ t( u5 ^* {. x( E5 k* i
               
% J$ _0 J* J0 w# V+ Z6 D                /* Program the TCC */
0 R$ x% _+ [/ c2 v                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
+ l) ?" E9 `( J. G' F" Z2 I% X+ y* j7 }3 K
                /* Enable Intermediate & Final transfer completion interrupt */
) T0 |( z. _) J( n' e3 ?+ F4 k" f                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);% B7 r+ ?' o& ^) g$ d* N9 j
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);- Q" ]$ ~5 W: D% d
5 k" X' h* ^3 C* E
                /* AB Sync Transfer Mode */
# k  a% a- ^& V" l  E                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);) ]3 T5 \+ B* z+ `. E( U, P  ^
                # k- e# P, a# `3 _
                /* Program the source and dest addresses for master DMA channel */
& a$ O; a! T+ [# H/ G4 b                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
$ `' p; s, y* v: d  ^, c& C5 N                paramSet.destAddr   = (uint32_t)(ping_buffer);
. ^8 T3 q+ x+ n
! }3 B: }) g: G1 [  c4 ^7 }9 O                /* Write to the master DMA channel first. */; l8 @! b# L3 M& O
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);0 D: i4 V8 r3 ], }" A' O
    }      
* Z% |" j( g% z' z+ t$ x1 E; L  ]0 M
/ |6 M4 u2 [7 C        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
/ `! ^) G& q% W       
3 D  h/ m3 l' c( e. ~- f9 F3 C    if(result == EDMA3_DRV_SOK) # n9 a0 l7 C7 t: \- O3 i- d7 {
    {( B6 h) e/ j3 _) m- B
            print2arm("edma3 driver init success.",0);1 d3 h$ z* h( e
    }
; W. p* V6 ?: r}5 H( \- q. Z. ?/ r" k6 D# h
+ s5 x2 C- W8 Q& o: @

/ Z( K: d' [0 e: Z/ ?! CEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
+ s* q3 i. ?/ m! y6 m6 j3 a6 y/ @6 d% r7 S+ l  ^
" D7 s: p6 k) O# H( [4 Q$ a
分享到:  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
! M* u, e- T" }& J每次DMA传输完成后都要再次使能传输
. h) v+ A: w4 Q) K" b, X7 I- c* v
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-19 18:29 , Processed in 0.046616 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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