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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
1 n1 H0 q) a: ]8 q: B#define  PING_PONG_ACNT          1
: G, _& `, U4 D  Y#define  PING_PONG_BCNT          8*32*40
3 V  c, i3 n; t9 x* ]3 D2 z& D//#define  PING_PONG_BCNT       1
8 [9 f; G5 i4 r" O5 {  K#define  PING_PONG_CCNT          1/ c  C7 V" L+ A8 P/ W$ u, _( g: I
#define  MCASP_BASEADDR          0x01D00000
# D, j9 c5 F7 ^& `% q- o! X: f#define  Mcasp_RXEVENTQUE        (0u)
. _( T: [2 `* R( O& Q* _6 L- D( ^8 D
/* OPT Field specific defines */
$ S8 S# e. x/ n  c# A#define OPT_SYNCDIM_SHIFT                   (0x00000002u), X8 z' G% U6 v/ u
#define OPT_TCC_MASK                        (0x0003F000u)
+ @2 ^$ i  }2 U, v#define OPT_TCC_SHIFT                       (0x0000000Cu)4 C- H. q3 b1 l$ U4 u$ t( p
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)1 U9 p3 C+ ?/ q# O% _0 L
#define OPT_TCINTEN_SHIFT                   (0x00000014u)' W/ R0 r* s- t# t' R" x

& @3 W9 }: @. P9 z2 Wchar ping_buffer[PING_PONG_BCNT];4 @* l" z) P. |9 w2 Y
char pong_buffer[PING_PONG_BCNT];/ }! F, y" F6 O/ A* d
! t3 _  J& W# {& x' V. V

* w3 G$ n. V: q
8 k6 T. }7 z) q' ~  H9 c: C4 `  x4 i  {) @* K
static void ys_edma3_init()
* P& x  K! M# ~0 S  A{
: R0 J0 @( Q4 I6 B3 h  W        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};% r* B/ d- f% W
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
' s  k, ]4 J3 g+ k        EDMA3_DRV_Handle hEdma;, m. C0 d* t" G' x$ v* h6 _/ J4 l3 Y
    uint32_t chId   = 0;
3 B1 g' s3 z' }; ~$ V) r2 G# E3 ^    uint32_t tcc    = 0;0 Q1 I, E. p; h! x

0 L: a7 c9 m3 t( v: f+ [  w# n    print2arm("edma3 driver init...",0);* ?# D) p0 X) l* V4 j# r

8 f+ Q( F, n0 S" b4 d6 g! v        hEdma = edma3init(0,&result);9 ^% c7 E' N9 L& X
        if(hEdma)
0 _- \, T8 v) x+ j) l/ q        {  D+ J8 Z& O/ F8 [
                print2arm("edma3init() Passed.",0);
* z& g# g( O- b' S        }
9 w9 j) J2 H# O( i) W  F  Z* o        else6 Y( Z, m1 `+ C
        {- t1 P- z" n0 }% r& a* Q4 u% R! v1 X
                print2arm("edma3init() Failed.",0);8 Z* L6 m. r7 J/ |3 n$ p/ _
        }# p' y) p# A1 G/ i- f! I
        8 @7 _5 `; ]8 J3 Z4 A! d3 Z
        if (result == EDMA3_DRV_SOK)
" `/ l" m, d8 r2 ~+ r    {
# s7 I1 ^' s# q2 o1 q! p9 k                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,( \$ a( X! V2 t. b" a
                                                       (EDMA3_RM_EventQueue)0,  W" [6 [# X& L1 q+ g' P0 P' T  l) S
                                                            &edma3_isr, NULL);* o* G" Z0 }2 D6 [3 r
    }& W4 O, R1 a7 u( m
        ' @1 z/ k6 U+ C) N! d0 h5 b
        if(result == EDMA3_DRV_SOK)! q  @2 i% [! g1 k5 y+ W
        {7 b# F' \  S. ]% D8 s) _
                paramSet.srcBIdx    = 0;
! k5 Y9 @* |* S; j$ G                paramSet.destBIdx   = 1;( Z/ g; [- g" t: C1 |/ b
                paramSet.srcCIdx    = 0;
# h( T' [# O) r  R6 o, _                paramSet.destCIdx   = 0;9 x  H* T# G: k+ V% r
                paramSet.aCnt       = PING_PONG_ACNT;
* J) g+ g* i6 A, V/ T  Y                paramSet.bCnt       = PING_PONG_BCNT;
  I, b, G/ {4 c$ X/ d                paramSet.cCnt       = PING_PONG_CCNT;
2 M, H* c" f! Y" Q               
( X4 ?4 j/ k7 w5 W# Y                /* For AB-synchronized transfers, BCNTRLD is not used. */
* G- z" y. W$ r# Y$ o                paramSet.bCntReload = PING_PONG_BCNT;2 b' m& _9 l- K. T& S" h
7 c0 ~7 \9 k* s* e0 j
                /* Src in constant mode Dest in INCR modes */
! p0 [$ _1 k' L6 p                paramSet.opt &= 0xFFFFFFFDu;. D4 W2 ?/ F* o
                //paramSet.opt &= 0xFFFFFFFCu;
* L& q9 Z- U/ M, N' ~4 N) f$ p- K               
' I# {- `& ]! I" j1 G                /* Program the TCC */
! `8 T" D& H2 X  F$ L                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);) H' r2 o7 g+ W) M/ }9 u, f
+ `  {$ m+ N" O
                /* Enable Intermediate & Final transfer completion interrupt */" j4 v5 D1 [! [' Y
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);1 a1 S- t8 ?& F' C9 \' Z$ ^
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);$ ]2 B% |+ k, l/ x( Y1 m" G

6 `9 k( t! m2 R) s                /* AB Sync Transfer Mode */, H3 X) T$ F0 R0 @+ F  q3 _
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);% Z$ F9 \; j) @" E1 z
               
% |. d0 J7 ]% U8 j& l, k                /* Program the source and dest addresses for master DMA channel */1 j* t8 A- j8 u0 h7 O
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
# E5 O& @  O9 y8 W4 J                paramSet.destAddr   = (uint32_t)(ping_buffer);7 h' p0 v5 R7 I7 U( i) K% y
/ p$ y- ]! F9 l' p
                /* Write to the master DMA channel first. */
' p. ^5 C# \% n. a4 R                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);" S4 R' Y. k5 c5 z3 P% ^
    }      
5 T8 }) e: s0 s/ T- D
: Z  C' u. c+ t3 \8 a: d  {        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
8 F& Y- V# m( O/ H- O7 C4 m        7 p8 y2 u5 w6 L. c  ?
    if(result == EDMA3_DRV_SOK) ' q: U! ~0 B9 H
    {
: I+ t, l( J; X2 Q6 g, `1 q/ c            print2arm("edma3 driver init success.",0);
0 d3 [0 s. o6 r0 P  |, a3 e$ A+ {. Z    }
$ @0 k2 {! H/ O* B: E7 s9 L6 D}. E5 N" v( }7 h

0 Q3 E1 p& P4 J5 {3 N9 z$ l+ m, C! f! J! `3 ~8 z* X
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。7 T' O: i6 E0 ^
7 m6 h8 Q8 J7 [+ G  z5 Q

- ~  n' X. }/ q4 m! h# m
分享到:  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
% C8 \7 w  B3 G  u2 _, o0 u& @每次DMA传输完成后都要再次使能传输
7 `/ K3 f9 H* ^0 m8 W: R; }1 k
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-10 02:29 , Processed in 0.042383 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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