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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:' H  a# B# c! G; [# I  U$ m' f0 _1 a4 `
#define  PING_PONG_ACNT          1
7 t; ?7 ^7 K6 k3 `- K#define  PING_PONG_BCNT          8*32*40 3 v- P  S. `* k7 ~  ~
//#define  PING_PONG_BCNT       1 7 F& H9 ^! A) O+ D' D
#define  PING_PONG_CCNT          1
1 ]7 a% ~; n( |0 [- S" F) A% k/ l#define  MCASP_BASEADDR          0x01D000007 Y# O: ~; J; H" E/ w
#define  Mcasp_RXEVENTQUE        (0u)( Z0 G! ]) ?3 b) A8 X- B$ y5 x) S

0 B5 i7 z& P$ }7 \1 P3 Y& m/* OPT Field specific defines */
( n) I$ g+ S' a% h9 Q- Y#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
  J1 o& g) R( l/ B#define OPT_TCC_MASK                        (0x0003F000u)% B1 P# Z1 \& A* @
#define OPT_TCC_SHIFT                       (0x0000000Cu)
( [3 f% Z; [9 Y  Z' C' s0 T#define OPT_ITCINTEN_SHIFT                  (0x00000015u); Z' N1 V3 I: o+ R. O
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
. r) k6 g) k# d6 o/ j2 `
  u  m% A2 J/ Z7 P' r: |0 e8 wchar ping_buffer[PING_PONG_BCNT];9 s6 H1 o, D* K: s7 ~6 ]! `6 D
char pong_buffer[PING_PONG_BCNT];4 B: G9 m# t" i$ V) K0 n$ D% x

0 E- S0 ~/ {% ~$ Q. q* r3 O
5 y! R  m. p( ]) e" o( y) _
$ C7 I9 o. M  S8 N5 K  x' |
9 a3 k/ G! |/ d# x1 Mstatic void ys_edma3_init()
* _' m! \% u+ x$ u& B{, v# j0 c! c4 P5 V# |3 }
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
& F: S" G  f  e' O        EDMA3_DRV_Result result = EDMA3_DRV_SOK;) A' H# a4 L. N- a  e, e7 v
        EDMA3_DRV_Handle hEdma;
; a0 @2 M( s- x3 G. q# q    uint32_t chId   = 0;. |4 z! [/ h9 V
    uint32_t tcc    = 0;
. q& {$ r9 b$ }0 Q; V4 O9 u
0 v7 m  e; h% k2 ^: [/ R    print2arm("edma3 driver init...",0);
( }% Y5 B5 [# y3 a+ r1 q4 Z2 T: D) n3 k* l* L' j
        hEdma = edma3init(0,&result);
3 f6 a- b) m0 N3 b( c  O, J        if(hEdma)
# X8 a$ T0 G4 Z" m/ b4 c. t        {$ J, n4 H( m- a7 e
                print2arm("edma3init() Passed.",0);
" }* l( N! x  q$ c+ E7 h0 _0 s' P+ o        }4 X' T$ D6 ~; z4 I4 h/ g) d; b9 j
        else# ?+ i' A0 r9 y9 _* i
        {
/ p$ V! L) E, q$ E5 b& R* t                print2arm("edma3init() Failed.",0);8 ]8 w9 G8 W# W8 J2 Q
        }( E; d/ B1 Z4 u- _# J
        1 J2 }8 k, R$ x5 d1 M( r. s# u5 {
        if (result == EDMA3_DRV_SOK)
4 W! M" M; P1 l. O# Q    {
6 d" K/ @3 U) A, T* _, ~1 u5 f                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
4 b5 |# b' t  i                                                       (EDMA3_RM_EventQueue)0,
3 u! o' @9 m" J% a/ v- R                                                            &edma3_isr, NULL);
& E2 N7 H; V& g, B) s( U    }8 `8 t4 Y" p0 O  U2 W6 j1 |; j+ B
       
/ X1 i/ S* O* \& y0 F        if(result == EDMA3_DRV_SOK)" e/ ?2 N. l  I. E( y+ v! B
        {
( u1 D- |. d+ \# C$ O5 M1 h% D                paramSet.srcBIdx    = 0;
# i' G2 x! e$ _                paramSet.destBIdx   = 1;
+ \: U8 v( N% m/ ^& v1 i                paramSet.srcCIdx    = 0;- S4 L. H* D8 I8 n' i
                paramSet.destCIdx   = 0;3 \' L* s9 T8 {, m
                paramSet.aCnt       = PING_PONG_ACNT;
! V6 ]. c1 q8 u' F                paramSet.bCnt       = PING_PONG_BCNT;1 b9 E8 m  ?8 q$ v" ?. h% t  A: ~
                paramSet.cCnt       = PING_PONG_CCNT;4 I% k7 V' I/ v) B  \
                & r! P2 N. s& H0 a* q
                /* For AB-synchronized transfers, BCNTRLD is not used. */
; ?( C+ c4 R7 F- h& z# N2 @& y                paramSet.bCntReload = PING_PONG_BCNT;4 H* R: |, J# T9 g/ i

9 k( H9 F2 P6 k4 t. \" T                /* Src in constant mode Dest in INCR modes */
- E* a1 f7 d0 K7 y( V                paramSet.opt &= 0xFFFFFFFDu;2 l1 `' S, Q! I/ P; |
                //paramSet.opt &= 0xFFFFFFFCu;( h& K6 i, P' p; E* m, q$ [
                ' a3 |6 v7 d* F1 i; K! Q
                /* Program the TCC */" \8 T# s9 l' ~5 F" @8 v2 X
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
% m0 X/ Q: u& ?6 ^4 b' }  ]3 z
- q1 V' F) x) @% D/ R                /* Enable Intermediate & Final transfer completion interrupt */
' t3 Y3 r" [( U! Y/ p+ H4 j7 V                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
" t9 G4 W* }6 c5 o5 j                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
3 i$ k# R6 E( ]$ F) G9 ?2 y9 O" b$ h4 i6 N( x5 X  Q
                /* AB Sync Transfer Mode */1 I1 @5 R4 b" T& U+ q% P
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
8 @) E% Y* P" l               
* [5 L7 `  {6 P5 t! V                /* Program the source and dest addresses for master DMA channel */
5 s# s* F7 h$ |- R" J  Y0 X                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);/ F# b+ k- I8 b: H. z* k6 d
                paramSet.destAddr   = (uint32_t)(ping_buffer);; @8 N" u$ X- B  F
; y5 o* z) z/ h+ ^4 Z% a
                /* Write to the master DMA channel first. */) O* M" b, d% u) L. K* f' B
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
" R5 J! q9 b/ E1 ~# H    }       1 e( M1 q. Z, m: t" S& H

1 x+ `. {; {& l: o0 d) {; U        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
% \' |6 b. i& I- W        ' p" f: ?- E$ `3 V/ {  m
    if(result == EDMA3_DRV_SOK) 8 v" |* b1 w- u  j9 G, V  a
    {7 `' `" G9 p! f- e+ z9 p, D
            print2arm("edma3 driver init success.",0);6 \' D' o6 G' R  a
    }
9 C: T8 s  k  g0 E7 |8 w' H}
* O4 n0 L5 n5 ?, X  P
+ r$ v# d0 L  ^5 j1 z7 F/ h
, g8 \: N: f: _9 A2 YEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。( |7 ~0 N6 p8 O& F9 T
9 C* K5 u2 t% S* Z$ }9 l  Q

4 \7 G/ t) \% k7 c) 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
- H1 c0 h' L1 P' k每次DMA传输完成后都要再次使能传输

- }' n$ f7 E( K* `原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-13 11:28 , Processed in 0.043156 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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