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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
* G8 `! r0 N5 O- Q( T" ^9 M#define  PING_PONG_ACNT          1
1 y0 ?( D5 N- U! t( U+ U#define  PING_PONG_BCNT          8*32*40
7 c$ j; J- i5 G//#define  PING_PONG_BCNT       1 0 k6 r4 z# Y, V# ~5 R. |4 b
#define  PING_PONG_CCNT          1
5 p2 d6 \5 h; d3 E" j8 _#define  MCASP_BASEADDR          0x01D000004 b7 h: Y( z; o# W# V# W  P
#define  Mcasp_RXEVENTQUE        (0u)
! B3 t0 u, |' F3 [) |/ ~( W& Q/ ~
7 c/ J) w" i0 H& ~/* OPT Field specific defines */
- I0 D% X& Z# Z4 h#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
( @% Y% {. w. _) M# ~7 X#define OPT_TCC_MASK                        (0x0003F000u)
" Q# i5 F! m; U* g7 [3 g#define OPT_TCC_SHIFT                       (0x0000000Cu)
( V/ k. Z, q4 `! O" `" }#define OPT_ITCINTEN_SHIFT                  (0x00000015u)0 N, s9 n* b( E
#define OPT_TCINTEN_SHIFT                   (0x00000014u)3 Y+ @% X/ e- t8 |1 _, S" g
1 j, t- M; ?! C/ ?, B, a9 o/ A
char ping_buffer[PING_PONG_BCNT];
# b, T; Z* }2 schar pong_buffer[PING_PONG_BCNT];
3 R* j& y+ }3 I$ `( p$ z7 y
: B5 i' l2 t$ l( P. C/ M6 @9 Q; I! z1 @+ D& h

' D: P7 F" w+ R2 q# M
: }5 Z- B+ o' t+ D% |static void ys_edma3_init(): e1 D  T9 a0 N; A) l; ?
{+ ^  q: ~  p5 @# e/ L  i6 p
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
; c/ @! k1 G5 T  s8 v8 c# x        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
6 y5 ?# @  _. T3 p% M        EDMA3_DRV_Handle hEdma;; G1 V' c- J9 c
    uint32_t chId   = 0;
" _6 E' r! J2 p: V# s1 x    uint32_t tcc    = 0;
' F8 v# k' u7 A8 k
( C3 e9 m) p5 q6 V8 c% B    print2arm("edma3 driver init...",0);
1 Z. @7 F, n& t, F" k2 m
- m+ Z. E7 R' ^8 M9 a        hEdma = edma3init(0,&result);$ ~! _  B  L( R2 G
        if(hEdma)
" {! g5 G3 A# B8 t        {, ~) x  a4 S, T' y
                print2arm("edma3init() Passed.",0);
6 ?' W# j4 C4 j. z- h- K% t0 p        }/ R/ c$ q, b( W( R  y
        else
2 }9 l' s% U) v3 y- p        {
* S1 ^# |6 U6 c8 O, ^7 X$ w                print2arm("edma3init() Failed.",0);
! t$ c2 v. S* i6 {$ J, r        }
" a8 m+ e* {. o9 @% H5 C6 S        + X# ]/ Z# J& I: A" p
        if (result == EDMA3_DRV_SOK)3 n4 u; M) B% r' O/ |1 V/ |- |
    {( _( {8 @9 h' q7 j0 Y% X; M1 B$ a
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,  O. v2 D( w% e" a  ~: x
                                                       (EDMA3_RM_EventQueue)0,! ~, I6 q- M. R% T
                                                            &edma3_isr, NULL);
# m* {3 }% P9 Z8 ?) ?0 h9 }; h) |    }8 w$ s" X- v3 Q' Y0 y5 J5 M8 P; S
        6 p* L3 G) l9 A7 C1 o1 Y0 P' b
        if(result == EDMA3_DRV_SOK)
, q0 n4 C" P6 G, B3 l        {! _2 U; b* x# u7 E7 ~3 _$ A% _6 d
                paramSet.srcBIdx    = 0;* _+ W$ V, ^8 w( S6 ~/ s: z& z
                paramSet.destBIdx   = 1;  T9 L9 B3 G- ~- z* e
                paramSet.srcCIdx    = 0;
' i) Q6 n: l2 g% B                paramSet.destCIdx   = 0;
" b/ i% ?7 l; P3 P                paramSet.aCnt       = PING_PONG_ACNT;
2 A# P0 J! f; M) R                paramSet.bCnt       = PING_PONG_BCNT;# i" u3 A% B9 c, `8 E  R) J
                paramSet.cCnt       = PING_PONG_CCNT;
# I8 G4 C4 n: ~  u% v7 n                . t" \; `+ g& u6 p7 e
                /* For AB-synchronized transfers, BCNTRLD is not used. */
  T& D5 V9 _# X3 G# S% c                paramSet.bCntReload = PING_PONG_BCNT;5 B3 _5 w5 w; \
% X6 S' A, ?1 i! e# I* W) U
                /* Src in constant mode Dest in INCR modes */" L. p, L# {! q
                paramSet.opt &= 0xFFFFFFFDu;
# b; b1 s: O7 ?3 ]+ m                //paramSet.opt &= 0xFFFFFFFCu;
4 _) j# ?! S- e4 @3 ?                1 n* {. }) J* s
                /* Program the TCC */
  f, \8 q+ \3 `' I                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
8 H4 C9 Q3 ?) f$ G7 `# X
& @0 j% g+ [) X                /* Enable Intermediate & Final transfer completion interrupt */
2 S! j& e7 j& p9 X9 X                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);# D3 {: Z- Q& U% i- l( U
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
' L1 k- x) D# h6 Z- a. C: u( a! u- b: \+ w: s3 D# B# ]# h0 w
                /* AB Sync Transfer Mode */
  ?, |+ J' n  z4 ^; D                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
# g* s  w% [1 g% `' e* g) [               
0 o3 p/ k4 b) m3 Z                /* Program the source and dest addresses for master DMA channel */
! ^+ P/ H6 z* r+ d1 Y# V                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
; c6 b  _! Y& V- W5 n                paramSet.destAddr   = (uint32_t)(ping_buffer);' i) s0 E, q9 i6 b3 A0 }/ T6 k/ W
, d" ^) x* r# c/ m
                /* Write to the master DMA channel first. */" o+ M7 Z& Q3 P# J, T
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
& \: q; m3 {9 {" P1 P    }      
0 V# I# y0 P; Q$ X
4 X4 a2 v$ @4 g6 K! A. S        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);7 y! J# O% s5 d8 Q
       
8 ~+ R) a2 _- O5 ?8 E% R+ T    if(result == EDMA3_DRV_SOK) 5 r4 j( Y( h1 o) ^6 [
    {  Z2 p9 I' r+ t# [
            print2arm("edma3 driver init success.",0);' L: d' F- ?- c/ y! u( r' J9 i
    }
  v, V( M/ g  R3 B0 W8 ?}  B% M3 f: m4 x- C
+ d  j, D4 f( P

: w- Z6 m1 W& |$ p/ H8 tEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。# d" Y2 H9 d6 U5 _; r
6 T# D! H5 y4 n3 Y2 h# m/ \7 I

# \5 y- e. y( y" E
分享到:  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+ }4 W- p, @% h2 Q7 G
每次DMA传输完成后都要再次使能传输

' S- E8 v! i, ^7 N原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 07:56 , Processed in 0.036930 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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