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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
/ C; B' d$ o: e6 @4 h( L  d#define  PING_PONG_ACNT          14 V$ n9 o/ \% K8 W7 S
#define  PING_PONG_BCNT          8*32*40 / I; v6 b$ ^% b+ _. G) u
//#define  PING_PONG_BCNT       1
2 M7 J0 q$ N( ?7 C9 S1 x7 ~#define  PING_PONG_CCNT          1  C& }5 H0 h3 u/ _2 V& m' n
#define  MCASP_BASEADDR          0x01D00000
, h1 F# z( B6 \& T0 p#define  Mcasp_RXEVENTQUE        (0u)
7 T& u; v, |) {) `9 s; y4 N$ @4 k
/* OPT Field specific defines */# T" k" A8 S' w
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
% V/ F5 n# t8 g9 m#define OPT_TCC_MASK                        (0x0003F000u)2 d+ v3 s9 g' G. }2 B* v
#define OPT_TCC_SHIFT                       (0x0000000Cu)
, U8 _# S! ]0 `8 N" K7 E#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
5 ~& x% C# ]* e1 V#define OPT_TCINTEN_SHIFT                   (0x00000014u)
2 [3 N" `# k% o2 |: @8 U+ o- q- X/ m
char ping_buffer[PING_PONG_BCNT];
' j: d3 E% m; B! P2 E# schar pong_buffer[PING_PONG_BCNT];
0 Y1 v8 x7 z+ C- e$ W4 i$ t
5 Q$ K& ^- Z/ x$ Z4 z3 w- U6 c7 s8 a- r, k2 ^
/ E. o! u! a: D/ s5 Q
5 @9 y; k2 M2 ?2 {! v% i
static void ys_edma3_init()
# t" E4 b% m) z' g" Y2 `4 j{' `/ c, Z- S* Z1 ]1 u* V
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};7 ^( c! d; O$ u6 D
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
! B8 A  i2 h2 p8 s/ C+ H  _        EDMA3_DRV_Handle hEdma;
0 r. o' x: A9 S* ~/ f) L    uint32_t chId   = 0;5 i' P9 d* Y; ^; |) m( l8 u8 C
    uint32_t tcc    = 0;/ f, G9 q# `$ ]0 }* H6 ]; V0 S

* T2 d4 y& Q) C8 u, T    print2arm("edma3 driver init...",0);, r5 u) A% }- J) }  F: {7 z
3 W7 t1 s9 V/ i! r
        hEdma = edma3init(0,&result);$ Z' |* d$ m& Z& J+ |+ L' T/ F
        if(hEdma)
. i, P, o" q0 e4 c7 I) \- J        {
  q* D) I1 {1 D& j, @                print2arm("edma3init() Passed.",0);5 t, d; P# _9 m5 f( v* x
        }1 s9 K' U/ l5 W# K0 [/ i
        else/ f: Y3 f- W* L$ M1 N8 A' C( G
        {
3 M2 F+ D8 h  c8 e( i, G                print2arm("edma3init() Failed.",0);
# L; r  M/ t+ J) c& V        }
4 }" [- u1 ~0 r8 s       
8 @" G* Z  F: \- |4 ]5 y& k# K( s        if (result == EDMA3_DRV_SOK)0 W5 _. X$ x, x. K# o4 r! k3 v* G
    {" ^; d; V7 W7 G/ a1 E
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,/ }4 {0 B* q) C1 X) m
                                                       (EDMA3_RM_EventQueue)0," D/ d7 z  E! b8 W$ X- H, f. o5 Z
                                                            &edma3_isr, NULL);! E, z) M+ r9 i/ r6 p
    }
0 D2 z2 c! A) e& N; y$ K        : ~- L) ], w+ ^: P* p# J
        if(result == EDMA3_DRV_SOK)5 G, `& U" ?# V+ [2 s% D$ c
        {* G% `5 G# A, F3 S
                paramSet.srcBIdx    = 0;
2 t+ ]  A% I* f$ m# C( |                paramSet.destBIdx   = 1;0 n" m  s2 o: X6 B* w
                paramSet.srcCIdx    = 0;
5 p. [& X6 |5 d                paramSet.destCIdx   = 0;3 F7 e6 Q' C3 m, f3 h8 |. u8 B" ]
                paramSet.aCnt       = PING_PONG_ACNT;  r+ O3 |; y3 F0 V. t
                paramSet.bCnt       = PING_PONG_BCNT;
- [* H1 c, ~' M                paramSet.cCnt       = PING_PONG_CCNT;+ U* `' M2 a  a% h) |$ U! j
               
/ k& _) E) O/ N4 v. V                /* For AB-synchronized transfers, BCNTRLD is not used. */
- S2 ]4 [3 E4 B, [7 H7 U                paramSet.bCntReload = PING_PONG_BCNT;+ U5 |/ _" m& T7 `; r4 J

" n& n* R; O- x4 P# W$ X" H% i9 F2 b                /* Src in constant mode Dest in INCR modes */; ^" A7 K) |- ]: g8 @3 a/ M
                paramSet.opt &= 0xFFFFFFFDu;* d7 O% `# F1 o/ I6 e" Q) J. O1 O
                //paramSet.opt &= 0xFFFFFFFCu;
) C6 j4 I) X% w& o. v$ c- O' [                  x- Q1 h  ~7 D( O. Z; r
                /* Program the TCC */8 J5 [7 Y) \3 @
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
- `8 k# W" e/ N' P9 N
6 o1 I1 v& x, r& \& R" d* @( H                /* Enable Intermediate & Final transfer completion interrupt */
) F* P3 G0 c9 g1 W. M- }4 _                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);: b4 r( |: E: g2 Y) C' J
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
. n' u& t" _$ y1 n; H
+ z# l. K2 C: H7 @- x. I3 u                /* AB Sync Transfer Mode */
3 [/ U9 }0 l) s+ ?7 M0 ?: w                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
& i$ `& v" w5 g+ m$ k                & p6 j% O) y& Q. b' [5 V0 Z
                /* Program the source and dest addresses for master DMA channel */
( G9 w! V( h; E! N& K' P                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);- p6 L0 N  H3 P1 o" @- }
                paramSet.destAddr   = (uint32_t)(ping_buffer);- x# G% C0 \4 a3 _7 @; m# K. A
# t1 T) m, v5 q. N4 i
                /* Write to the master DMA channel first. */' N5 {% W' X& B! p; @
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
0 l( R# q+ M3 ]/ w* u9 t    }       / N+ C# o3 y! L" g& ]3 L; x

1 Z; x  n7 T1 m# `* \% n+ M/ C        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);) ?2 v# h9 g- N; |  [
       
  f* }$ N+ w) Y    if(result == EDMA3_DRV_SOK) $ Q; X- G: V! {2 A7 T# q
    {: |) c) _  m# O! w& _0 }! J
            print2arm("edma3 driver init success.",0);
# s0 s, n3 h1 u, W; B* R3 c9 U    }
5 C4 R' Z* [  I: b& h, U3 Q}; e# W& ?5 u( m' n  T( D+ r

8 p2 k$ y6 r2 q7 z9 P1 S, S& M" V" I$ p
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
  t6 E4 t7 i9 W7 _7 O0 y: {' o8 `$ l. F+ E  t
9 M4 X( A4 F  I
分享到:  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
, h9 s. k+ Y9 e' F: @每次DMA传输完成后都要再次使能传输
9 U' c- ^- h0 X7 C; Q, U
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-4 20:05 , Processed in 0.040690 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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