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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:' m2 P8 C3 q& w
#define  PING_PONG_ACNT          1
, j. B% n4 C  F# \. z+ O  {! w#define  PING_PONG_BCNT          8*32*40
2 \( C% x+ d( J  J0 P/ L9 z6 w//#define  PING_PONG_BCNT       1
8 N4 M) r3 l6 }#define  PING_PONG_CCNT          1
/ g/ g9 w/ b% S& ^, j, Z3 ^#define  MCASP_BASEADDR          0x01D00000
- O7 ]: G* N7 v8 [4 j/ J: C6 v#define  Mcasp_RXEVENTQUE        (0u)0 ]5 O$ M7 H1 P$ W4 Q" z- f7 Z
0 G4 y: H* q1 l2 u' j7 S! D
/* OPT Field specific defines */
' D$ P+ @4 W# \& x& @& G#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
4 Z& @6 Z+ p# a. c, [0 T2 M3 ]( W9 ?#define OPT_TCC_MASK                        (0x0003F000u)! q  o! G1 _3 p% v1 ~
#define OPT_TCC_SHIFT                       (0x0000000Cu)
+ u1 b. ^8 r/ I6 K#define OPT_ITCINTEN_SHIFT                  (0x00000015u)1 x0 F% k7 L- c3 g( w0 E5 ?( z5 v
#define OPT_TCINTEN_SHIFT                   (0x00000014u)) i* ?+ g$ q( d/ l- ~# A
! y& h. `, Z6 B! l/ ~4 x8 W1 F
char ping_buffer[PING_PONG_BCNT];$ B. @* M4 n0 N2 ~  }  Z2 l
char pong_buffer[PING_PONG_BCNT];
) x- n! \* L# _6 z' D, \
! ?. a+ r' O- v0 S! _* [2 g5 ~0 U
5 Y) W+ K- Q8 h
) u5 j3 X3 P) {$ a- W3 T/ f4 T  P6 d9 h+ k2 M' h
static void ys_edma3_init()5 |- u3 u& x/ F+ {5 L5 f
{1 m  }# t- w: r
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};$ W# S. g9 H/ f( D1 s
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;; ?0 d7 I8 i1 e+ R7 _9 {0 D
        EDMA3_DRV_Handle hEdma;$ _5 k$ y  w% W) B5 J) X6 p
    uint32_t chId   = 0;6 ]. d  }2 o) U
    uint32_t tcc    = 0;6 @. t! ~- d$ c" i
! f  ~  s! M3 w- i* \! \
    print2arm("edma3 driver init...",0);
1 F0 i( T: ^0 v8 u% A3 H9 N1 v1 b+ I) `' c
        hEdma = edma3init(0,&result);% {% v" s  P9 K2 ^
        if(hEdma)
; F0 u5 p+ H6 f6 O  R3 q# b; A        {" @+ l# f* U+ d7 b+ ]
                print2arm("edma3init() Passed.",0);! u1 P8 p/ N# ?! R/ T
        }2 G# @# K- f/ ^# W3 d0 |3 L
        else! q+ b, m; i& Y3 N3 @! g
        {& f4 `$ W/ \4 A/ e+ d- V% Z  v
                print2arm("edma3init() Failed.",0);/ L: h$ m. ?* A
        }
* e1 }; y0 J# l& {( D0 ?       
7 n$ y* r' l* U0 X& ~' `        if (result == EDMA3_DRV_SOK)
! a1 O# {) }1 N  C% ]7 z- Y5 F  T* W4 q    {
6 ]( ?1 s' e* v$ N' G" d! d% V9 u1 G                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,8 t; e+ ?! s$ l" k; m4 a
                                                       (EDMA3_RM_EventQueue)0,4 X0 }3 d% y5 s' B/ y. O
                                                            &edma3_isr, NULL);
# K# G) R$ D# ~! `7 |9 n    }. B& i# S' \% @" z- P4 F
       
2 ?* \, f' w5 X2 W6 H! N        if(result == EDMA3_DRV_SOK)! a. f# A$ U6 n. G$ V
        {
0 a3 I4 B$ w- \" ^                paramSet.srcBIdx    = 0;
! P2 }" r# Q: F: c                paramSet.destBIdx   = 1;5 s7 T" q3 x8 j( N) ^  l  F  [$ \
                paramSet.srcCIdx    = 0;
$ F* `, `0 a4 ~% C, c- Y; _, M                paramSet.destCIdx   = 0;9 C" S: c2 I9 y5 ]8 @' {/ X" P/ d2 `
                paramSet.aCnt       = PING_PONG_ACNT;
6 U' \5 L6 I: z2 \& V                paramSet.bCnt       = PING_PONG_BCNT;
' N* C' o/ F; s4 p7 }" ^; g                paramSet.cCnt       = PING_PONG_CCNT;& V) E: e3 u# w# ]$ u& p! y
               
/ n) C% a. J1 [; z+ Z; d                /* For AB-synchronized transfers, BCNTRLD is not used. */! Y6 E# X# Q* v8 |' ~8 W3 ~8 f/ T6 x
                paramSet.bCntReload = PING_PONG_BCNT;
$ a! W  P- X1 X: u% Y  b  \+ A" k( {( H
                /* Src in constant mode Dest in INCR modes */1 G; W8 k5 ?2 C4 n
                paramSet.opt &= 0xFFFFFFFDu;) t0 l2 h" @( o9 g! J+ N  L
                //paramSet.opt &= 0xFFFFFFFCu;
! _. {; o( h/ q" B3 h- F6 e4 o9 J                4 |: w$ W: H5 _7 u- w" H7 Z
                /* Program the TCC */1 J5 l  D& P1 s! `3 w. j
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);: [$ \' u5 a- y5 [
$ n! q/ C& y6 ~% h
                /* Enable Intermediate & Final transfer completion interrupt */
, ]: D# N3 t8 k1 v" J                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);) r" e5 D8 O. Z! \. \8 ^/ Q
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);/ h4 Y0 v6 V  |0 u& l9 e0 Y

/ `! m# X& ]- D5 e                /* AB Sync Transfer Mode */5 c6 R/ {! L, n$ G& h, Y( T
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);; U6 i1 N8 m! ~
               
# }' n* \' y* P. v' ]1 s$ Z2 }                /* Program the source and dest addresses for master DMA channel */7 {, J5 p5 }, H1 }. N6 B0 j3 j' |
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);' X5 c" X; H( Q  _
                paramSet.destAddr   = (uint32_t)(ping_buffer);7 Z2 m8 P3 c6 Y
" q, b6 |+ [. ^/ m6 _- X% H2 ~: {
                /* Write to the master DMA channel first. */
' ^4 w# ?+ j. l4 Y8 X3 Y                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);9 q3 Y/ p3 _0 q+ C: x. P0 e
    }      
; A* g) T$ y& y* C* X2 s9 P
; z% ?- V# I/ [5 S        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
- b+ |+ R' H( v* r       
) P% m! k5 |: z4 v+ l( C    if(result == EDMA3_DRV_SOK)
0 j4 Y: p/ c1 Z+ Y7 U1 [    {
+ m! w& M' O+ H" D8 `            print2arm("edma3 driver init success.",0);
5 L2 m/ q3 U1 p) L    }
- L8 b# R) V, Z}
( o% B6 C( W: a
& X* J0 z1 t' ^: v6 d) H( {
* w% o7 [2 ^' u9 }9 E$ O! p5 U4 OEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。& ]; V6 X3 f) k0 n! J1 I7 m& `
3 V( a4 ^+ R8 g
6 S. M. Z/ s  _; F$ ^7 J) t! u5 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
7 V  H1 X- l: Z# ^- ^每次DMA传输完成后都要再次使能传输
; Z2 D7 @: d" n% n: H
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 03:57 , Processed in 0.036902 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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