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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:) r* r( Y% {* g$ s
#define  PING_PONG_ACNT          11 o* @4 M* a% @# Q; t+ e
#define  PING_PONG_BCNT          8*32*40
$ P4 u# f% B* z3 L0 q+ d//#define  PING_PONG_BCNT       1
/ u% v6 g1 U+ y, A0 ^( B#define  PING_PONG_CCNT          1
  B- K4 R% c( N0 v& R#define  MCASP_BASEADDR          0x01D00000
# z& \8 D( L+ K5 @$ w! v  f#define  Mcasp_RXEVENTQUE        (0u)8 X( {6 |1 H/ i* b7 C0 U7 Q0 z
  d. I) n# ~+ F; G
/* OPT Field specific defines */0 p5 R) J* M$ j# d* _, x
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
  v. w/ O: T2 p  q0 |( E2 d#define OPT_TCC_MASK                        (0x0003F000u)3 e+ h9 c3 H4 E- w
#define OPT_TCC_SHIFT                       (0x0000000Cu)
6 D6 ^3 g. @( R; c, y- M#define OPT_ITCINTEN_SHIFT                  (0x00000015u)0 s/ X4 T% I2 \. b4 ]7 ?
#define OPT_TCINTEN_SHIFT                   (0x00000014u)# Q* z, x. y; `$ S8 r& p
7 D1 Y+ U& b  L: _; h1 b" q$ k
char ping_buffer[PING_PONG_BCNT];
5 i  f: g: `$ _char pong_buffer[PING_PONG_BCNT];
8 ?  Y$ V) \  _: a! {1 v% W6 Y- T( A" |4 l$ w5 f
) h' y2 e* G: y. {6 t
. V- A( N1 r1 x" o

/ B; f( B2 I3 a) V/ ostatic void ys_edma3_init()
$ O% `! \  Z) e{: a! Y$ a) X4 H) W2 Z& p  Y
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
/ N3 f/ v% W& g/ h1 Q( c        EDMA3_DRV_Result result = EDMA3_DRV_SOK;* D( w- t1 E3 {4 j; ~/ ^2 ]9 z4 C
        EDMA3_DRV_Handle hEdma;8 z. J/ [' L* V* L
    uint32_t chId   = 0;
7 r4 ~* S5 Y" p    uint32_t tcc    = 0;3 g- i( |. h* Q$ ]; b

  e  o2 d: U! z% f    print2arm("edma3 driver init...",0);
6 {0 O. {1 c* e0 J( \( D# I1 \4 ?
; D" J' l( w. e  g        hEdma = edma3init(0,&result);9 m! \5 [2 `6 L: [3 \
        if(hEdma)
, ]! q# q, j# D2 E. o        {
3 _: n: N  L% O                print2arm("edma3init() Passed.",0);
. |9 ]2 m; G0 x7 t        }
" r- }  Y. E) j2 E3 g; ?0 Y        else
2 K1 L8 s. b# V! s, a- ~2 s. |        {
' D* E$ y: N2 R5 J. }                print2arm("edma3init() Failed.",0);9 O, V! {! i! V
        }; b7 R7 L: P, q* ^
       
: |' b& u  F1 I' P- N8 [, F( v- j; F        if (result == EDMA3_DRV_SOK)
8 r( v$ ]8 v6 O, r, }    {& S  w  _" q3 j5 j
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,. @% x3 d: r# V9 O
                                                       (EDMA3_RM_EventQueue)0,2 y5 v( c% E- C( t
                                                            &edma3_isr, NULL);
+ B' b1 @, \  g8 S3 z1 D+ @7 C    }: W- O1 m& W! i' \0 C$ w
       
" j* B8 B4 ]8 ~  _! s2 y: z' {        if(result == EDMA3_DRV_SOK)
4 A2 x1 }! D* r        {! ^2 G/ @/ E+ c# f) h; T2 W; W
                paramSet.srcBIdx    = 0;- L& m/ K3 _) k* K1 Z
                paramSet.destBIdx   = 1;
+ |  X$ b) f$ n4 [$ d0 S$ t4 Z0 u* y                paramSet.srcCIdx    = 0;0 p" a* ~8 j9 V1 P+ {  u, ^  Z
                paramSet.destCIdx   = 0;0 x7 X, M' u. O
                paramSet.aCnt       = PING_PONG_ACNT;
. m7 y' f( J' _$ s0 l                paramSet.bCnt       = PING_PONG_BCNT;
2 A4 J: e! q6 k$ }2 P$ P                paramSet.cCnt       = PING_PONG_CCNT;
- Q- K8 f: }5 z) t" m; v! i                * S: a! y: V( T* y
                /* For AB-synchronized transfers, BCNTRLD is not used. */  L, C. ^2 }1 X( I
                paramSet.bCntReload = PING_PONG_BCNT;% n- _+ ]0 g! N3 ?
  J/ e; T2 E2 @5 }, j
                /* Src in constant mode Dest in INCR modes */1 E9 B$ g$ u1 T
                paramSet.opt &= 0xFFFFFFFDu;2 s& g. G& [0 E  ^8 g
                //paramSet.opt &= 0xFFFFFFFCu;
2 g$ D) d# G2 H- b3 W               
4 S3 r( b$ t( T  e8 r                /* Program the TCC */
! D/ a+ p. _0 f# L% n5 A, V                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
# z* E6 ]( S" w. Z& e, I7 X) _; ]2 @% c9 E
                /* Enable Intermediate & Final transfer completion interrupt */6 n7 L4 z! A3 q  q  |$ c2 s& ~
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
" }2 _, W/ L6 F/ C; V  o, k                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);# y* `$ e- B6 }$ M8 b, b, J0 s

, v4 p7 B2 x- Y) g                /* AB Sync Transfer Mode */
7 d; f+ x8 B+ G; x% b                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
9 X7 ]5 m! ]" W                ) z  g' s3 b: p4 d5 Z
                /* Program the source and dest addresses for master DMA channel */! ?- J0 d! a, V- U/ C* B5 Y
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);. ~: x! F5 O' P$ Z6 U8 A
                paramSet.destAddr   = (uint32_t)(ping_buffer);) K' F: x) T  v$ d7 I- u5 j
7 |; b% |, c  d5 q1 _
                /* Write to the master DMA channel first. */
  N5 u1 D1 G: c. C, A& ~& g                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);4 X" ~2 y" C, r3 F8 R
    }      
& l0 Q) P8 f2 j  ~) p$ E5 s- M8 i9 X( B# P/ M$ H
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
! c: D2 @7 S7 v; r" V3 e        9 X3 C6 J1 _  T
    if(result == EDMA3_DRV_SOK) ' g" E5 N6 Y8 q0 m
    {
/ @+ L0 [" m4 O$ `4 I& C* B            print2arm("edma3 driver init success.",0);$ x4 G! t+ p" I. t
    } * e/ E9 w0 l# u/ v' _9 h' `
}
; B2 f  @2 h* T0 C4 B( ?
( L* d& ^9 ^4 R0 h
4 G* d3 v) p; t. Y6 IEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
! J: P3 s1 a( R% U3 ?; F8 w5 m+ {& c, q- I9 _, e

, F4 g+ c' w& e( N" G2 z
分享到:  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; Z+ ?) S" e8 z/ l
每次DMA传输完成后都要再次使能传输

" @& Y% c% t2 M- `0 i! ]0 d. }原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-29 20:01 , Processed in 0.041953 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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