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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
/ V- d7 ]+ m1 d% h9 W. ~3 G#define  PING_PONG_ACNT          18 X/ f# f, W  F! y; H% b  M7 S
#define  PING_PONG_BCNT          8*32*40 + O" H) w- X0 z
//#define  PING_PONG_BCNT       1 " T  ]0 ]# t4 z
#define  PING_PONG_CCNT          1! }$ N: r, R% n, H2 \
#define  MCASP_BASEADDR          0x01D00000/ A8 `1 l& z9 W1 m
#define  Mcasp_RXEVENTQUE        (0u)- t; E- y8 a5 }% I7 C

9 f/ k+ u) O6 [; @- a; U$ G/* OPT Field specific defines */
8 o, A, n& z; _! Z7 q  N8 h' e#define OPT_SYNCDIM_SHIFT                   (0x00000002u)1 ~+ I3 l4 x% j4 f  ^  \! {
#define OPT_TCC_MASK                        (0x0003F000u)
! p- f7 q' ~' s% ~% t: X#define OPT_TCC_SHIFT                       (0x0000000Cu)& ^9 C4 Z& w" f  }1 `
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
# n4 N( s: c  Q6 [9 d% d" h#define OPT_TCINTEN_SHIFT                   (0x00000014u)
  l6 I# q* o3 m8 [
* m1 @; q. ^$ mchar ping_buffer[PING_PONG_BCNT];  v- q6 t5 {: y1 I8 `
char pong_buffer[PING_PONG_BCNT];
' t- B- V1 M8 ?. s7 Z; }( a3 n: T6 l$ P. c; i

3 a$ {' u9 v$ W0 ~7 q0 c
  L: T( A- q/ j3 R4 f1 l* R
+ j4 _1 |: V3 P1 G8 nstatic void ys_edma3_init()
) J8 {6 q' ^( H% |; w* e9 d5 h4 D{- b! m( t/ [( ?/ X# a1 G* q; D+ }
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
! T) z0 L4 |; Y% q8 t        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
9 {. b# X! ~: ^$ O; [        EDMA3_DRV_Handle hEdma;
$ O0 A4 Q+ e, X7 G$ u    uint32_t chId   = 0;
# R6 C8 J# S7 _% H. p6 i    uint32_t tcc    = 0;8 h/ V- T4 O2 @* z+ n, O3 G
- W) _- K! [! z5 V, k1 K
    print2arm("edma3 driver init...",0);- @" S* Q% ?/ X& {% [( |% i) ?

+ n, X( v7 i* X% T% x! I3 z+ L        hEdma = edma3init(0,&result);' T" n! ]& i, q( j5 k6 R3 Q) P
        if(hEdma)) v; v5 _/ o  `2 i
        {
6 z/ {6 O9 Q: P. |: X) B                print2arm("edma3init() Passed.",0);9 P9 t+ B0 ]9 ?. r8 V7 [- ^9 ?
        }) k9 s: P6 p5 K0 k  ^( w, i
        else
( \# Q; r4 N9 u- p( c( |        {2 @* P5 S" ?8 E% s
                print2arm("edma3init() Failed.",0);  k3 L3 M' L& A$ H1 {8 s
        }3 @5 L* G" P$ z
       
: v  h0 {% T2 u5 u" U        if (result == EDMA3_DRV_SOK)
0 u$ s6 j) x& V  A    {
1 K4 I- X  `6 H3 H, B                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
/ k% V  z5 ^/ p0 U4 `                                                       (EDMA3_RM_EventQueue)0,4 G% {9 i2 r- W2 c' S( U
                                                            &edma3_isr, NULL);" j& S' d- }) o2 b- p9 |
    }
' i. t7 P5 {7 I       
9 g, A. d6 j! j# Z% l( ^        if(result == EDMA3_DRV_SOK)
4 [2 {& e2 }. V: k  D- [2 l2 L+ [        {1 Q; V% p2 U3 a1 ]7 p
                paramSet.srcBIdx    = 0;' W7 o/ V8 X2 A5 P8 C
                paramSet.destBIdx   = 1;7 P  U4 D% f9 Z* B5 G5 o
                paramSet.srcCIdx    = 0;1 b7 V6 w% z" C6 C$ U( j# ^
                paramSet.destCIdx   = 0;# X0 K, j, m: o! G5 y
                paramSet.aCnt       = PING_PONG_ACNT;8 q" r2 P. o6 M, Y6 {8 ~* Z
                paramSet.bCnt       = PING_PONG_BCNT;
* z+ B# A3 D/ E2 R                paramSet.cCnt       = PING_PONG_CCNT;1 E, `' ~+ c# s
                4 V$ N- |/ ~- X2 u, @8 m
                /* For AB-synchronized transfers, BCNTRLD is not used. */" S- F6 D$ C7 m! ]+ l
                paramSet.bCntReload = PING_PONG_BCNT;3 B0 F0 h' O/ C: H, V3 e% ~

3 K1 p% C3 b0 l8 |- _. D                /* Src in constant mode Dest in INCR modes */
) e$ b1 G* }7 c! t/ k                paramSet.opt &= 0xFFFFFFFDu;
: u7 _3 k9 y8 O                //paramSet.opt &= 0xFFFFFFFCu;
8 f7 i# X/ n* F( c5 b5 P               
: F# }& f! F/ H9 X8 f  z$ Z6 Z/ W2 @                /* Program the TCC */* Y- Q: o" k! P5 _
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);7 m$ s% U  X/ b. V" k) }
9 `. z' h9 X0 }5 g( j) k* b  I
                /* Enable Intermediate & Final transfer completion interrupt */! n+ B, }5 V' C# F6 d
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
+ z7 X4 E$ k, m8 ]                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);  e" Z  h9 t, R0 Y
' l# M8 P. q  M5 [# B
                /* AB Sync Transfer Mode */
8 o/ |7 Z7 q8 W, V9 z& C% k                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
% Y& r+ u5 o! L+ G+ _               
" h  I- y* t9 z1 f3 m. M                /* Program the source and dest addresses for master DMA channel */& T! l2 i. D& O& m! w! z
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);, _- `' g: z- `4 O5 E
                paramSet.destAddr   = (uint32_t)(ping_buffer);
1 s) G  e  x! W/ ]4 R# O; E1 A" F/ A& b% |
                /* Write to the master DMA channel first. */
1 ?# }, P6 M0 H2 R+ o$ Z- A$ D                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
" S5 x) [2 \3 o' \6 C  F7 r5 @    }       # g# x, |3 ~$ c) Z

5 {. p$ u. z1 e6 r6 z& }        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
9 Z4 s% R5 n9 g5 c3 [  y( Q       
' x4 {5 g, X9 K7 e9 G; @$ C    if(result == EDMA3_DRV_SOK) 2 q. z$ N- C3 A3 w/ |! V
    {1 k7 l; Q4 k) t( V- t  A. K
            print2arm("edma3 driver init success.",0);, O5 q- o/ G' S( s$ F2 _& V: j
    }
6 Z. K6 a* S: d}! E7 i2 M. w) H/ s* E* l( [& F! ^

4 h% q1 p8 m$ T  l# R3 d
# I. q0 V7 V7 _* A: `EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。" T' ?, U6 l- N& p
5 X) K! x0 t3 k* H+ s
8 K! @+ a* V( h# r% Q
分享到:  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* `, T  f/ B5 s! p1 f& F7 c0 F
每次DMA传输完成后都要再次使能传输

2 P% K% @! m& b) |' }: m9 X原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-20 23:18 , Processed in 0.085181 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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