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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:( u7 m, N4 f  w2 P% O
#define  PING_PONG_ACNT          1
' D+ n3 }5 O7 w4 Y, c: J& a! s#define  PING_PONG_BCNT          8*32*40 + j7 J/ ^4 [% k! O: L1 M" N
//#define  PING_PONG_BCNT       1 9 a6 H0 }8 U- _1 m, t
#define  PING_PONG_CCNT          1, R# x" [5 s: s1 K8 u8 q, r
#define  MCASP_BASEADDR          0x01D00000. z/ p) z- Z) {$ c/ A8 y! u
#define  Mcasp_RXEVENTQUE        (0u)
$ M% I! U( O$ z- i& U% h; S# S& q
# _% q& D* z8 R" `# g. i/* OPT Field specific defines */
- E/ d( o5 \8 i0 T* W, U#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
' ?2 y, p& Z# S. x#define OPT_TCC_MASK                        (0x0003F000u)
/ g2 s6 I$ _: C; ~- P#define OPT_TCC_SHIFT                       (0x0000000Cu)- d, e1 L0 N) I$ ^  o; H6 P
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)5 p% h3 O+ g/ G) y3 a" h8 ^
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
4 a1 `( }  K( D, M  f! C# }
: S- C! p% V' q8 R7 q, dchar ping_buffer[PING_PONG_BCNT];  E! w, O' s- g6 l
char pong_buffer[PING_PONG_BCNT];8 T4 n3 V; g1 p/ r* @
' ^  u7 l( H- w, \  g6 T
) D" k  s! u6 r2 A, j' q4 U$ ?: z

: C3 c  `! T. v  E7 C: u4 z0 b0 _, U6 |9 _7 z3 n  B# E8 _3 N
static void ys_edma3_init()( m0 j; N/ d( z( m# \
{1 P' }, {2 ^. G7 D( i. u
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};5 i: H+ R; s: Z0 |$ v5 e$ v2 q
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;9 i' U6 @' k7 ]% W9 K& R! }
        EDMA3_DRV_Handle hEdma;7 T! k) }1 V5 `( W  h
    uint32_t chId   = 0;
( w0 y, h5 h1 D# q, W    uint32_t tcc    = 0;
+ R9 P/ ~: D9 p1 v6 Z" ^7 {' p9 Z
: v( v2 l* F% M& n* p/ j    print2arm("edma3 driver init...",0);- n1 N% u8 f# B. L
  M3 }* r* {# d# j
        hEdma = edma3init(0,&result);
! c! o1 t0 Z* [        if(hEdma)
; d* T  ]# B) ]# r5 X' x( w( `6 _        {: m! ^! g- W4 G+ O
                print2arm("edma3init() Passed.",0);
8 z* K; {# U# s. j6 T        }
# o7 q2 M0 |6 D; A        else
  S' `5 b) _4 I5 y( m8 a& N2 U        {
  |  n5 r1 h: T. F" }" W                print2arm("edma3init() Failed.",0);
, o8 ?6 M2 N4 W4 V        }
5 y/ i& j# g1 X$ B8 C       
  }( R0 ]( n3 X7 r2 _8 y        if (result == EDMA3_DRV_SOK)
; u. v; ~0 G8 k: ~9 _  S3 o    {
4 F  j0 c: Y. E9 `2 ^, A& ]. t) @5 q                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
5 l% }- D6 Q' D" o                                                       (EDMA3_RM_EventQueue)0,
2 |) _) g, h  F, |: T; E. H6 b                                                            &edma3_isr, NULL);
, G' l" m0 r9 a, A2 `! R7 u    }
! B. e0 Z% E* S1 ~% H" t2 q. ^        9 P; a& G: L& `; j( a; s
        if(result == EDMA3_DRV_SOK)+ _+ M; [, }3 B8 |' |" J) A
        {
* ~: ]9 P* ]9 a# b% E1 U                paramSet.srcBIdx    = 0;2 F* M1 U! t/ {+ Y$ w# @/ a
                paramSet.destBIdx   = 1;$ V6 T0 \! V0 T/ W) G
                paramSet.srcCIdx    = 0;$ C1 T# Y+ t( W" w3 P
                paramSet.destCIdx   = 0;
* j7 U( q7 `. v0 _1 }( I6 a) J                paramSet.aCnt       = PING_PONG_ACNT;" j# ^4 d# f! t# P2 m
                paramSet.bCnt       = PING_PONG_BCNT;$ a/ X, l; t6 y8 T$ {6 n
                paramSet.cCnt       = PING_PONG_CCNT;
/ X' ]) I8 {. c1 ]9 x                , ]+ W, I0 Z. W4 p
                /* For AB-synchronized transfers, BCNTRLD is not used. */
; d$ t# e$ ]1 b+ ?                paramSet.bCntReload = PING_PONG_BCNT;
9 |+ C8 ^! X8 J* g- E- i' K& S4 F
                /* Src in constant mode Dest in INCR modes */5 r8 }) E5 E8 Z4 l. {' N
                paramSet.opt &= 0xFFFFFFFDu;- p5 u# f  N. I9 S+ o7 `1 _- E
                //paramSet.opt &= 0xFFFFFFFCu;
- O8 N. d; X: |4 B$ c8 M6 L' L; o                , J+ Z: V8 O% j$ X5 E: x* ?& v+ n
                /* Program the TCC */: X* S! p: Y1 T
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);; A: `; O8 V6 L+ c

! J. G9 ^6 M  H! I( ]# n7 H                /* Enable Intermediate & Final transfer completion interrupt */
8 x7 u  q' e. c! i7 Z4 Q% y6 T                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
% V0 B* ^. N/ a                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);! p, w, j# r: I- A9 {

8 D0 Q9 H/ g' `% c; ^5 r                /* AB Sync Transfer Mode */# E+ s. H1 p4 X% P2 x; _+ y
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);6 V! A% c: s7 W
               
+ E5 o+ r( `9 V2 i( J- S. \8 t  z1 E3 N                /* Program the source and dest addresses for master DMA channel */% R8 W: b$ k6 T( z. u
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
. L2 b* D0 i* n" T" D                paramSet.destAddr   = (uint32_t)(ping_buffer);
; o1 ^- V& }  h/ {$ N
9 Y2 P& c# a, f' j                /* Write to the master DMA channel first. */, l' y9 G! M' f1 d, d5 a
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
9 }; f: }4 \" w    }       " o* o& [8 ?" T. B
" A$ W4 u( u! N9 S4 \4 ]1 _
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
( Q" D6 N; G7 U; c2 x1 I0 P        . o5 D5 Q& G/ N& U/ G0 A7 ~. P9 z
    if(result == EDMA3_DRV_SOK)
1 X& X! V2 t. u2 v8 c3 s$ e    {
1 A- s5 \3 \8 V3 D6 L4 ]            print2arm("edma3 driver init success.",0);7 j( I8 a3 G( ~" ]4 ^% L
    } / B" A; S/ {9 D" b0 ~2 G
}; J- K6 D& A7 ]$ ~1 b" H/ y& M- m/ @2 k
0 N5 s& y4 R6 l$ ~, T2 b8 }

; f8 _/ v/ h& R7 IEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
' R! Z  L6 t3 H9 j. T7 R, a) C& d" R, ?) J& ~% g; u- T( Q

- g3 P% q6 P0 d3 M: h$ n+ d
分享到:  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# R7 \, c  C! O% y* E# y
每次DMA传输完成后都要再次使能传输
% v3 M& L4 J! ]/ o' N
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-10 21:18 , Processed in 0.044359 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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