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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:+ s# j! {7 g9 m
#define  PING_PONG_ACNT          1
/ v. h6 t" v1 }( M' s6 v! C2 ~3 U9 M#define  PING_PONG_BCNT          8*32*40
3 I! I$ S4 l0 J7 ?: G//#define  PING_PONG_BCNT       1 % h4 U0 I3 h  ]1 F' [: f- W: \
#define  PING_PONG_CCNT          1
9 b! G& V' K4 L#define  MCASP_BASEADDR          0x01D000001 W8 J) V) a; J+ M" B
#define  Mcasp_RXEVENTQUE        (0u)
  B% T# @( P9 \& A, D, z& d1 ~
4 E. r) H- L' ?3 z) a- O8 J7 X/* OPT Field specific defines */( V+ r! W8 Q7 J$ h/ k- C
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)3 Z9 U2 ~; }& H' B" T
#define OPT_TCC_MASK                        (0x0003F000u)$ `, m2 d) B7 f7 R7 d1 M9 y- A
#define OPT_TCC_SHIFT                       (0x0000000Cu)1 z1 j$ @  M( _. {9 q
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
: Z: K4 K9 h8 g1 X. c6 n& w2 L8 P#define OPT_TCINTEN_SHIFT                   (0x00000014u)
* k9 k' o* X8 l5 C  \& b. L
" {5 v. w2 ], c, ]5 jchar ping_buffer[PING_PONG_BCNT];7 @/ m: h7 t5 a- b
char pong_buffer[PING_PONG_BCNT];
, L- \& J& L# g1 X" {8 ^: ^# f& V* x/ l' R6 e! t* ?
) _* D8 j% B/ c
# W# i) W0 O0 U8 Z4 Y: g/ H2 y
% g: j& B  Q" @0 J8 o8 F( b
static void ys_edma3_init()
0 t2 A- u8 A0 j$ _{3 r. s1 y# H+ O/ i  n" b
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};2 D" \) r9 N0 K0 x8 l$ l% z2 K
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;5 l' Z5 f% Q5 `
        EDMA3_DRV_Handle hEdma;% f. a- m. ?& K, |: {3 C
    uint32_t chId   = 0;
# c/ z% V) X* d8 q  Z- _3 S    uint32_t tcc    = 0;
: d" b4 f7 m; ^- ^6 b1 a# `- Y# n2 P7 Z- a9 x) D
    print2arm("edma3 driver init...",0);( ]2 y! Z  f& o& X! |' P

' k7 r% ?9 O, v) n0 m, N+ N; c        hEdma = edma3init(0,&result);3 y2 F- s) u% \, w5 K9 S1 \
        if(hEdma)
5 T% B( ~7 A9 G* q# Q2 v5 K        {
7 ?9 P& I5 m* g- Z$ O+ W0 d                print2arm("edma3init() Passed.",0);0 d" p4 @( J5 m3 ^9 n$ I0 R
        }1 z1 u+ ]" w/ I
        else1 ?) |9 ]  P! z8 w9 Y
        {8 W# k' Q& |! x, m* b
                print2arm("edma3init() Failed.",0);% d. P5 A" ~) a* z- A
        }7 E8 d* _2 S' n
        * D% Q- `2 h% @9 V
        if (result == EDMA3_DRV_SOK)  D. l# F! Y1 }2 q6 M
    {7 @5 X) T  O& T
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,# z8 r, @% r/ F1 K* r2 F+ G+ y
                                                       (EDMA3_RM_EventQueue)0,
. ?  A4 t2 {5 U4 {                                                            &edma3_isr, NULL);4 @* n4 Z' d' b. `2 ]
    }
' F' p; \# f/ \9 h6 i- _5 T       
1 D7 \) J0 e) a& H6 y- @        if(result == EDMA3_DRV_SOK)- a2 b1 ~( @  B5 M
        {
3 R7 I% a. ~$ I                paramSet.srcBIdx    = 0;
9 Z# A6 N! L8 s! O  a3 r9 E% m                paramSet.destBIdx   = 1;! m8 `# K+ w' v. i3 X! F8 k
                paramSet.srcCIdx    = 0;3 X8 F8 w( k4 p. E: P3 L
                paramSet.destCIdx   = 0;
1 ^, \2 e- U9 W' {) O$ X                paramSet.aCnt       = PING_PONG_ACNT;
% x5 ?$ [: m  C, @( k9 c7 a0 ^: N                paramSet.bCnt       = PING_PONG_BCNT;. x4 S1 B- o3 M3 y  S) _2 K( |
                paramSet.cCnt       = PING_PONG_CCNT;3 B/ F' X" X. [, T+ v- r
               
. g/ D2 ~. P7 F, g                /* For AB-synchronized transfers, BCNTRLD is not used. */5 a8 g3 k1 }/ V: x: Q1 {
                paramSet.bCntReload = PING_PONG_BCNT;
, n9 _/ ~6 L, b: [+ j  ?+ v" q  j* A, M! w
                /* Src in constant mode Dest in INCR modes */  A; z: P- `$ A) {. r& x
                paramSet.opt &= 0xFFFFFFFDu;
! W/ ^8 N; `! \                //paramSet.opt &= 0xFFFFFFFCu;' d. o( H. \) b
               
2 D7 {' I/ U$ y% V4 b" M                /* Program the TCC */
) w/ c, q6 R( S; {                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
: S7 o; v+ x$ W2 i- D  N- O; p) h5 U% n. Z' M# |; R% v
                /* Enable Intermediate & Final transfer completion interrupt */
  N/ r1 o: q% @2 o                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);: i' u9 P1 f- d
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);' S1 f/ D5 ?2 L: H$ g9 R& W
; ^4 t% j" F& ?. S9 N' \6 n. v
                /* AB Sync Transfer Mode */
: c: H) z6 b4 y3 n                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);* `, ^1 s8 r- J* o
                + e1 O% a: q& L  ?& ^$ _% j2 g
                /* Program the source and dest addresses for master DMA channel */
+ h# o2 j7 m1 k. e                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
2 `% l# G/ [! @                paramSet.destAddr   = (uint32_t)(ping_buffer);
# q4 c; j. ^% u9 R4 {* `# m. i: k8 \: _6 ~, B" T/ y/ n
                /* Write to the master DMA channel first. */8 k+ y) Z- J' Q
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
1 y) c$ S% G9 A2 \    }      
3 z9 B. O# o/ f2 r: v
. c7 Z4 O! U. U7 C+ S        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
. r. X! l' V2 C" [* O: @0 b4 D        9 t. L& E1 z2 v
    if(result == EDMA3_DRV_SOK)
8 k# N& t$ p, Z! `3 ?. w    {
6 Z( w+ W, A5 Z0 H            print2arm("edma3 driver init success.",0);1 n7 a# _9 I+ d2 T1 F/ U- I3 o) B+ ^
    }
* W6 n8 q' ~  P" {}
0 s0 j1 q6 v3 @/ b* `! [8 I' Q7 E3 A+ `* g( |) Q
1 |: s! e+ o2 {  G
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
7 r4 z0 c" B9 H/ e
+ b% }. g1 J& L  N, }7 ?" E1 @. A2 B0 ]2 ^8 o7 T
分享到:  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
* }$ `- h: e, s: L每次DMA传输完成后都要再次使能传输

: W8 v. [$ n5 J0 t$ B1 a; `8 r原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-1 06:50 , Processed in 0.038346 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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