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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:  j* z8 `' d' a# ^9 |
#define  PING_PONG_ACNT          19 J. o, M1 x8 J, Y& }% ]- z
#define  PING_PONG_BCNT          8*32*40
# k: O5 _8 T- w$ J2 f//#define  PING_PONG_BCNT       1
2 Y, w: e5 m- x0 i#define  PING_PONG_CCNT          1
1 q% Q) x$ ~  y, i) l* \$ t# Z#define  MCASP_BASEADDR          0x01D00000$ ~, M. _, }) s0 r
#define  Mcasp_RXEVENTQUE        (0u)
6 v! W8 m2 J# r
5 Z7 b* v6 Q5 Z, D: I. Y/* OPT Field specific defines */
( ]- o2 A- I7 }4 F9 I" Q8 V/ [#define OPT_SYNCDIM_SHIFT                   (0x00000002u)" R% t8 C- x* q% t1 A
#define OPT_TCC_MASK                        (0x0003F000u)5 C- H, F; o& E! u6 {
#define OPT_TCC_SHIFT                       (0x0000000Cu)
" R( v5 ]' K1 t* J" H2 t#define OPT_ITCINTEN_SHIFT                  (0x00000015u)! n3 @, ?3 c3 _' E' M& [  |( K
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
- t& U; |0 K! a# i* r" l' Q9 ]+ P+ Z+ A5 |6 Q( }# r" U( `/ X
char ping_buffer[PING_PONG_BCNT];
& d* s( Y2 \9 _4 rchar pong_buffer[PING_PONG_BCNT];( U8 }* e$ {" j# n$ k% r0 M

9 f4 `. F, Y/ V
0 _: `3 U+ _# F# C2 N* `. Z6 M$ X
/ n% c9 A1 Z3 O5 m% o: i6 C5 E; m+ m. D
static void ys_edma3_init()5 {/ |& k. o4 J
{
# z$ a9 F7 b) ]1 h0 B" ?        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};0 Q/ b8 q) d  u
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;2 |% V4 i  V+ d1 M1 @4 e, r# [
        EDMA3_DRV_Handle hEdma;" r- Y/ P2 L) V
    uint32_t chId   = 0;: l, J2 A7 G/ Y* {* h; }& H
    uint32_t tcc    = 0;! a+ b) n! ?: l/ x

- K, v. _6 b' |/ s0 r5 C4 j    print2arm("edma3 driver init...",0);3 w5 Q" u9 `1 H2 E* Z) c

" X' m! c, g, W4 c0 B8 |9 Z+ u        hEdma = edma3init(0,&result);9 \: m- L- `5 S0 a3 e- I' X
        if(hEdma)
; Z+ p: V1 q7 i3 Q        {* w/ }. ~, K- a
                print2arm("edma3init() Passed.",0);
* q/ X. l* u& F        }" \0 L' d: e1 j1 d7 A" B# z
        else
4 s# B0 R  }0 Z        {8 j* g. o: F( }' H! m5 ^
                print2arm("edma3init() Failed.",0);
9 }5 t) ~+ h" f" h$ `2 U1 l        }1 x" K- i# h* @, Y' u' T  K$ x7 C7 b: T  U
        4 ?! _. F. \: |& s$ P% Z
        if (result == EDMA3_DRV_SOK)
: n8 D7 ^; E+ V' V    {! F: [; ?( z/ @* l) M+ N! G5 m
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
* `$ M6 h, g9 t& p8 d. k                                                       (EDMA3_RM_EventQueue)0,
2 K4 |( @: ^: R8 |                                                            &edma3_isr, NULL);
; l  S* ^& @& {    }/ S8 ^. T9 D6 X' \0 ~
       
1 R5 F; e% [7 M        if(result == EDMA3_DRV_SOK)
) s1 v" Q) y0 w# i1 W* C        {
7 y- N1 ]! ]5 }2 z1 |7 P+ v                paramSet.srcBIdx    = 0;9 F/ i+ W7 \1 O) f" w
                paramSet.destBIdx   = 1;
- Z$ o7 X4 I, }. }0 e                paramSet.srcCIdx    = 0;
, Z# P  @6 {6 L9 |" U% J4 \" P9 h" v                paramSet.destCIdx   = 0;# P3 D  o8 q' {. X& c1 t
                paramSet.aCnt       = PING_PONG_ACNT;
1 ]# f* B0 G7 E- K3 o9 P& g                paramSet.bCnt       = PING_PONG_BCNT;) v. @$ z' F* T  {
                paramSet.cCnt       = PING_PONG_CCNT;& C4 y# E! `1 X" O" M
                1 Z- M5 B- O3 b$ s7 c
                /* For AB-synchronized transfers, BCNTRLD is not used. */3 S, {8 }+ x& k) X4 y) J
                paramSet.bCntReload = PING_PONG_BCNT;( ~' f2 a$ U0 a* q' S/ N
( ]0 d6 M+ Q1 k! M7 l
                /* Src in constant mode Dest in INCR modes */
# k  B( r! ~8 W1 W% S. I$ ^                paramSet.opt &= 0xFFFFFFFDu;2 o0 D3 H2 o5 L% h6 ^# D
                //paramSet.opt &= 0xFFFFFFFCu;
, T  e  x3 X' l3 e$ L                . W4 |2 D7 h; B/ `3 U- ~7 g, G
                /* Program the TCC */! ^& e+ p& \3 u. E4 @) `: F3 i
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);! Z, @  ^2 s" f: |

+ E) G" V' M: y+ b2 g! y                /* Enable Intermediate & Final transfer completion interrupt */9 Z( L% J! H9 Y7 h- V
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
6 }4 F# G; A" g                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);! y/ W$ [1 A0 @

8 _( ^5 v/ W) c6 m; \) h                /* AB Sync Transfer Mode */1 U, Z2 i5 b# L+ K5 f) v) B
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
6 o# v! Q5 c4 \  S; a) q                0 [& h' E8 |: d
                /* Program the source and dest addresses for master DMA channel */: G# m& X* n( L* F7 ~8 L5 b$ h3 c: l) b
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
, p: _8 I2 w" d0 h                paramSet.destAddr   = (uint32_t)(ping_buffer);
! u& W- ?& x! t/ Z4 V: l8 O$ D# o- t, z* K2 F/ T1 c
                /* Write to the master DMA channel first. */. i( N  z+ F! p) w: b1 S1 j
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
( h2 W" B! |) n. z' E/ s  O7 s    }      
" v! ^' V) F2 J3 v- a) A& H9 {( y, I; [2 e
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);9 b/ @+ N# x8 P) b$ S
        4 ^" R0 d, k+ U& F. k' c
    if(result == EDMA3_DRV_SOK)
! {+ s% Y6 `6 r9 `) D    {' r! }7 R' s7 ^) W  @3 M* k9 Z3 E
            print2arm("edma3 driver init success.",0);& U" ?5 Q3 _( x  q, t9 L: J
    }
3 S1 r3 t" P% o  C1 P: `}& y3 X: D$ T7 K' g4 p
/ P- g: g6 w; \% w0 @. C+ i
. u' ]1 w0 n4 P9 {3 f  Y3 p8 l
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
# Z& \6 M) \* |$ x- o9 _
9 `5 _9 i) B) d* G5 V/ m
: z+ p! R2 z' P5 }0 J' E
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
板凳
 楼主| 发表于 2015-4-29 23:25:56 | 只看该作者
Lewis 发表于 2015-4-24 10:47; l. O1 s$ i- Q4 ?
每次DMA传输完成后都要再次使能传输
( m; e0 A) l- Z
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2015-4-24 10:47:00 | 只看该作者
每次DMA传输完成后都要再次使能传输
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-20 14:33 , Processed in 0.042404 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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