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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:' v$ N; g0 k6 e* T! l- w4 e! N' x$ g7 r0 s
#define  PING_PONG_ACNT          1
& V$ Z6 T6 e/ ~' E4 A$ G& p+ S* _; R#define  PING_PONG_BCNT          8*32*40 ( ]4 h/ h$ K  F
//#define  PING_PONG_BCNT       1 6 o0 [( V( X% W) X, i3 y- d2 @5 t# O/ B
#define  PING_PONG_CCNT          1
  p5 M& r6 u5 U3 r: G+ o#define  MCASP_BASEADDR          0x01D000009 f: \7 W( w* Z6 a4 ^  A
#define  Mcasp_RXEVENTQUE        (0u)
/ j+ q: u' e: f1 d# g3 k% e* s3 i9 t" |, `
/* OPT Field specific defines */
7 ~. F" x1 z/ e+ O1 W! _' S' s/ m#define OPT_SYNCDIM_SHIFT                   (0x00000002u). o7 b  ^& n& s7 @( C: n/ p& r
#define OPT_TCC_MASK                        (0x0003F000u), g1 s/ J) a/ ~7 t# P! U% P
#define OPT_TCC_SHIFT                       (0x0000000Cu)3 m( j3 ?0 U$ g9 h! \" e( Y
#define OPT_ITCINTEN_SHIFT                  (0x00000015u), H" u4 b4 b8 S- L
#define OPT_TCINTEN_SHIFT                   (0x00000014u)" q/ Y( N3 s' M4 d* u
) r2 Q$ ]$ W# m, E4 G0 l1 x
char ping_buffer[PING_PONG_BCNT];
* E7 O+ G! Z' w3 {5 I4 _/ A6 Achar pong_buffer[PING_PONG_BCNT];
# A& B& H5 y( Q8 x& d1 q
* S; B# V! n! p1 b; P
% M2 b4 L6 [1 c. P& e* ?' X' J& a% L) t
& C6 ^' z) W0 B
static void ys_edma3_init()
) A2 |, H4 f/ ^" ?7 d{
# S+ \7 G8 k* ~1 M        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};% n  c8 D: S* b% ^! H/ _& H% v
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;/ `+ ?' J4 Q' o7 R2 y6 ~
        EDMA3_DRV_Handle hEdma;
+ J& s2 B3 w% i2 h, J    uint32_t chId   = 0;% q- M8 |' J3 G1 j+ [9 k8 Z
    uint32_t tcc    = 0;6 R. h9 J# ?- G' \/ Z
3 g' Q+ L; ~' w8 Q4 T
    print2arm("edma3 driver init...",0);+ a; ~& V' T6 X7 l6 j  Z( Y( L
( z! a8 y  r' Z$ ?0 X
        hEdma = edma3init(0,&result);
* J) R6 g" Y) G, L7 H: y, g: i        if(hEdma)
' l) L5 b2 {% c5 H$ w9 R        {+ Q; V8 O/ l5 t; T$ Y
                print2arm("edma3init() Passed.",0);
+ B" {4 u. K% o$ L  v" V        }/ q( C" O- J* h% {1 \1 b
        else+ v: l5 m5 y3 R
        {
3 _- V8 u/ Y2 Y* j; N- z% z: p/ ?                print2arm("edma3init() Failed.",0);/ E& H5 g' q: m5 V% ~& ^
        }
- _2 I2 @* o1 ]        * k  ~8 _, H6 L5 a
        if (result == EDMA3_DRV_SOK)1 \' w" a: I% U& w8 ^6 G; G
    {
. ^) b* c2 L& O( O                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc," N8 e- H) W: W( Y$ Y& r# M- i
                                                       (EDMA3_RM_EventQueue)0,
8 X, U. K! s7 w" V) _$ p5 G* C3 f                                                            &edma3_isr, NULL);/ Q0 q! J3 k0 f# l) t  Q
    }
8 B6 D/ C4 e5 P        # I7 S! ~  V& v0 ~* O2 h* Q
        if(result == EDMA3_DRV_SOK)# Q/ r& `- R$ ]6 j: x: I
        {! k" Y( {! q% b' n& @5 {8 n8 H
                paramSet.srcBIdx    = 0;
; c; A; o6 k$ i5 R& O  ^; S                paramSet.destBIdx   = 1;: y  L1 f0 y5 s' n
                paramSet.srcCIdx    = 0;) ?4 g6 {) _9 A
                paramSet.destCIdx   = 0;
$ O* F3 u3 x; N9 M% V                paramSet.aCnt       = PING_PONG_ACNT;: i& V2 X" Y" {( p0 i% B' x( G
                paramSet.bCnt       = PING_PONG_BCNT;
" {  @* \; Y8 ^% K! y                paramSet.cCnt       = PING_PONG_CCNT;
2 [8 ?" Y- ^! ~) y                * O8 G0 R) Z  F! {
                /* For AB-synchronized transfers, BCNTRLD is not used. */
, f+ e! b) Q. b                paramSet.bCntReload = PING_PONG_BCNT;  _: i  l6 y2 j
+ _; o3 a7 p; @% _* y4 m# ^/ Y
                /* Src in constant mode Dest in INCR modes */
/ {; }6 V9 ]% M' H" f3 r# ~                paramSet.opt &= 0xFFFFFFFDu;
& u( L3 u8 d4 n6 S( i' P3 c                //paramSet.opt &= 0xFFFFFFFCu;/ [' |/ O& l; v
               
" @6 c0 F7 `1 @) S. Y. R2 k                /* Program the TCC */
; ^5 _2 `8 l4 K6 n$ x, Y                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);: y, t/ p8 \; ^2 v) ]7 L
% [# W+ F# s& L; w+ k" q3 J1 j0 c
                /* Enable Intermediate & Final transfer completion interrupt */# a2 W, O1 q+ ?" v8 L6 u$ I, W5 D
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
! {! D% z5 h5 _; b# R" u, R                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
( c' [" C- R' Y" t$ m- F, [) |( {+ L% j* `
                /* AB Sync Transfer Mode */
3 s" K# F' N& `! M& [8 Z" d                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);5 W4 ?( r0 `9 H% J
                " E( V7 ?7 j8 M
                /* Program the source and dest addresses for master DMA channel */  w$ K. v5 P4 n8 G$ A6 E0 [7 J
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);8 R% w4 N) O+ F. {. A( H/ ?6 Y
                paramSet.destAddr   = (uint32_t)(ping_buffer);3 f" n1 g5 V/ p4 y

5 |3 `$ ~/ o( ~1 J7 |  z: V9 \) @1 i                /* Write to the master DMA channel first. */  }3 _" B5 ~2 V$ c; S
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);" h. {* y. p& W4 u
    }      
9 d4 e# P! B  C; D% d) g$ ~% i! h, N$ o. e
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
: q! v; i! w. M       
9 M( g6 z  L% K, _% a3 Q0 A    if(result == EDMA3_DRV_SOK) 2 [  x1 H" O" \$ Z+ p0 \2 F7 V
    {
/ L3 M/ o. g9 l  G$ o            print2arm("edma3 driver init success.",0);; K5 w3 A# r. Y6 [  p+ Y
    } ' v+ l3 z' S8 w/ R: m' a$ ^
}% k/ A( Z7 f; K

% n! G' n- Q$ h# x& Y
: y% m7 ~3 @0 c6 c3 `7 U3 UEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
  {4 Z- h& ], m- k# A9 |/ ?# ]' E

% W7 r) G. [- ?3 ^
分享到:  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
5 ?. t% n5 V, }0 A0 J每次DMA传输完成后都要再次使能传输
: M, b0 L6 ~4 ^! x8 S% l
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-6 16:40 , Processed in 0.040871 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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