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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:: [+ e0 ]2 M6 c& o
#define  PING_PONG_ACNT          1
- j! g9 l' t2 J, l/ ~+ t* R#define  PING_PONG_BCNT          8*32*40
5 D) E1 J, ?8 z; Q* J0 g//#define  PING_PONG_BCNT       1
: k( P) ]+ Y. z$ L5 j2 ^, v2 K2 Y#define  PING_PONG_CCNT          1
7 E8 ^' O4 s6 R5 b" d- W% m+ S% E9 G#define  MCASP_BASEADDR          0x01D00000. a7 M( F+ w( j9 k9 l9 g6 Y
#define  Mcasp_RXEVENTQUE        (0u)
+ }* X! L  @4 J" ~. N4 s& |
; S) h" g) R; B/* OPT Field specific defines */
  E, a) W( i; f#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
, l) ]( O1 P( P9 y: P#define OPT_TCC_MASK                        (0x0003F000u)
* `" A- B! i( c3 D8 P( `/ ^& [#define OPT_TCC_SHIFT                       (0x0000000Cu)
/ U" E8 A( O  K  K9 U#define OPT_ITCINTEN_SHIFT                  (0x00000015u). b4 u( F- @! F# h
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
- v7 b0 ?0 q; L  f3 V$ w$ j, o/ Q% z8 y
char ping_buffer[PING_PONG_BCNT];+ ^* m1 b( ]  c8 b; N) U
char pong_buffer[PING_PONG_BCNT];; W7 u" w: Z( y) s# _$ q$ }
$ o3 A0 M; M/ X) g7 r, D: w# W

8 B8 G; D* \; {6 l' E0 a: i1 }7 w/ B% Y5 p* \8 t
  y- d$ n- @0 \  _
static void ys_edma3_init()
- s" h0 f  }% r{
" r( S& ~( W' Y5 J3 s        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
8 ]$ T" f. A3 e' c/ ]( R8 c        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
% [* W1 w1 C+ T2 h+ v, A        EDMA3_DRV_Handle hEdma;
; R, W, G: W9 J4 x% h( T0 B* W    uint32_t chId   = 0;& V( M' E& V, y) Z+ o& n
    uint32_t tcc    = 0;0 ]: I. j! N7 w  p+ n

+ ]" I9 s9 E$ f    print2arm("edma3 driver init...",0);7 U, r1 s) a. v, q2 M
8 C* z0 k# @  S; X! t: Q5 R
        hEdma = edma3init(0,&result);
. D4 |  T0 L- N: r% h8 ^        if(hEdma)4 m( n' t' u- r6 `. t+ ^5 S$ C2 p' |
        {
0 U6 `# t5 ]( F5 D( T                print2arm("edma3init() Passed.",0);
: x5 x9 {' ^. S- ]& \5 `8 x        }  W4 q1 t$ x' C; ?: \
        else
  u7 j1 U" f+ e: Y2 T: K        {9 c  c8 a9 u8 A0 _3 i
                print2arm("edma3init() Failed.",0);" [( r/ a2 R' g- a$ k
        }
; [# m& R, V$ Y' h/ [+ B4 v       
9 T$ a  G" q; A1 s        if (result == EDMA3_DRV_SOK)
3 o9 N, P% i  d# k    {8 z9 S, R) Q& s0 P+ v8 y
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
+ L/ n0 e* Z: U                                                       (EDMA3_RM_EventQueue)0,9 Y; f% g4 M0 C0 b) R
                                                            &edma3_isr, NULL);, v- s1 i+ k* O# Z5 `! C# e# j8 @
    }5 p& ^0 m. h; [) d$ G
        : f/ k, b" a6 s0 W  v
        if(result == EDMA3_DRV_SOK)
7 C6 s. Q, O  u, h! L$ h        {
4 a3 ~9 P6 I* g, i                paramSet.srcBIdx    = 0;
% P% b$ M& C2 P" z- X/ `: `                paramSet.destBIdx   = 1;& f. G& c% H' i$ V6 J" I
                paramSet.srcCIdx    = 0;4 C0 E* e2 E$ R+ _# m
                paramSet.destCIdx   = 0;8 n& ?9 T- e. \) y" m* n2 s) S
                paramSet.aCnt       = PING_PONG_ACNT;
$ P$ M2 Z$ [+ V! `: X" O( v                paramSet.bCnt       = PING_PONG_BCNT;
6 O& e4 N$ G/ N2 b                paramSet.cCnt       = PING_PONG_CCNT;
' X: }% Z$ ~3 b3 d+ v# L- s; _               
, x2 I* M8 U' }7 ^2 W                /* For AB-synchronized transfers, BCNTRLD is not used. */
6 Z; z9 e9 e. U' M5 N5 F% W                paramSet.bCntReload = PING_PONG_BCNT;3 n# N; ]+ ~4 U! Z' N, q' [( `
" V4 y, z; G& w! x; M, g
                /* Src in constant mode Dest in INCR modes */9 M+ C! d3 `' r. N8 D9 T
                paramSet.opt &= 0xFFFFFFFDu;+ o% o7 k* v! F/ R' n9 p
                //paramSet.opt &= 0xFFFFFFFCu;; W+ l- ?( g5 H4 a6 w9 Y* M4 I
               
8 v. N9 P/ z+ C/ v                /* Program the TCC */
$ E! u. v8 z; Q9 E: }9 |2 W7 S( }                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
2 z. k1 D: w' D$ g& q
& ?8 _7 Y; E4 n0 Z6 D6 O7 U. t& p                /* Enable Intermediate & Final transfer completion interrupt */
+ U6 ?' C* u7 @, G9 `                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);9 }3 r, j, t# J$ C8 L( G7 r2 X8 t  S
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);0 x- |2 }- @" n" C; u

% o; ?$ y/ W* X* u                /* AB Sync Transfer Mode */
" ]4 m+ r" t$ Z. M                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);; }$ x( C, o* T$ ~5 q* a
                / g# x) {6 l0 ?3 k- f; t
                /* Program the source and dest addresses for master DMA channel */6 a$ @6 [% L7 a+ g, _# ]
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);$ ]% n' f% C( F  @/ d5 L% [8 y
                paramSet.destAddr   = (uint32_t)(ping_buffer);" R( }% ~3 E0 G) _  P' ^! ^

9 `! i8 s, i  s' Q9 Z7 q  R                /* Write to the master DMA channel first. */
) R5 A: I. g  A' F. \                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
9 n( [) B4 R  E! k    }       ; r( {3 j* I' }# u2 e
- T4 N, Z5 M' \7 p: p, u# M$ e
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);7 S3 k0 l8 s+ U* [7 u6 A/ u
        : D# v1 V% u3 o/ s( K/ W
    if(result == EDMA3_DRV_SOK) " H6 C3 b) L% d3 Y" C( p' L
    {
) e3 i, ]/ b5 ]3 X/ f' u( Y# h& y9 f5 {            print2arm("edma3 driver init success.",0);  _+ D; a1 n- A% q6 B+ l0 o$ [# F; C
    } / T; u" z/ Y* T. t" F
}
; D8 N7 T% \) W2 j- D3 `
' v2 {6 L0 d3 [" j' H" n- L
  N1 ]0 w; k# E9 `3 dEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。' O7 ?5 e$ I; t& l& b

) ?6 K7 d/ A" C
( ^; R3 E8 z: m1 t- z: b' _( x( z( 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
. I) `# `4 P9 o2 J4 t每次DMA传输完成后都要再次使能传输
4 g/ q6 X: r4 d5 N9 p# H/ Q1 s
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-12 11:08 , Processed in 0.047111 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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