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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:- |/ b* p) P! u0 B# w
#define  PING_PONG_ACNT          10 \5 d9 w: B4 ?& s$ ^$ c. U
#define  PING_PONG_BCNT          8*32*40 ( L7 K: i' x% s
//#define  PING_PONG_BCNT       1 : F3 L1 g- O" ^; O
#define  PING_PONG_CCNT          1
& I% ]2 U$ V' b$ n& l+ w4 _9 l. H#define  MCASP_BASEADDR          0x01D00000
0 z& z( }4 {5 f# N* j#define  Mcasp_RXEVENTQUE        (0u)9 A9 k% j% n3 X4 Z

2 N% E  Z' C8 ~- Q+ j6 Q, e/* OPT Field specific defines */- W* {3 h1 C1 O
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
. U( ~" k' `. G9 N% y! R  P7 \#define OPT_TCC_MASK                        (0x0003F000u)8 L6 Q& Q/ S  w- c. }
#define OPT_TCC_SHIFT                       (0x0000000Cu)
9 |0 J9 K) Z- M0 k) |#define OPT_ITCINTEN_SHIFT                  (0x00000015u)! Q5 h( |; S0 o7 [$ Y
#define OPT_TCINTEN_SHIFT                   (0x00000014u)1 f) W# t/ `- L! j" o, b& }& L! [5 d

, e. v* p% S: q9 d6 I2 J4 L2 Ichar ping_buffer[PING_PONG_BCNT];' l/ M% _* A+ k% ^4 z! T" w; G
char pong_buffer[PING_PONG_BCNT];
1 ~% X0 K+ ~1 r# y2 V
4 f7 H: k+ p" v/ J7 q$ Q
. X* _( Q6 @" O
# s7 T# ^0 F( J% E3 z( J) |. t4 j& q. r) o9 k+ N2 l( A' z
static void ys_edma3_init()
8 _& `+ N2 q4 ^% T" Y{
: x3 J! n, c6 _6 R* Y        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
" B4 `5 p9 G. ]5 L        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
. V/ z. l2 J. B* V: e) Y- O+ a        EDMA3_DRV_Handle hEdma;9 \( g9 z% T" O9 j  E9 i- \
    uint32_t chId   = 0;
, w. g! D$ D6 R$ Z/ g' a    uint32_t tcc    = 0;
0 D* R4 }: Y8 i  Z+ H. z$ M: x3 W/ u, d, F- N- s
    print2arm("edma3 driver init...",0);5 N5 `' y( l, c7 h' b4 G

0 m, M7 l+ ]' g& |+ D1 u        hEdma = edma3init(0,&result);7 G9 J6 e" J% R6 j% N
        if(hEdma)
% ~' c' l6 o5 n8 j/ a$ O        {8 Z( w2 i3 r5 t. E$ S
                print2arm("edma3init() Passed.",0);
, T3 w/ ~" d. U* {" I6 x- ~0 I+ B. @        }
) Z5 n2 h# V( N5 v# P        else0 J+ n  S4 E) K. r2 o' I6 `) }# q
        {# _6 p. J4 d3 E) C
                print2arm("edma3init() Failed.",0);5 B% W- T$ r  \: T9 `
        }3 x3 e! t' Z: v* Y3 C
        - d* W; q2 O8 d7 V$ k
        if (result == EDMA3_DRV_SOK)
! O6 D" {0 N' _% z    {8 V1 N) o  |. Y& j" a; i( T; ]! J
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
! Q$ Z" ]5 q3 u& W8 i2 z                                                       (EDMA3_RM_EventQueue)0,( s/ r: y' H! Y
                                                            &edma3_isr, NULL);
" r- n( `2 D$ f% o6 V    }
$ ^6 `8 J% |* v! p1 @+ E: ^, c9 K$ ~! s        ) H7 S, a5 U8 W7 W
        if(result == EDMA3_DRV_SOK)
2 U9 G( T! {8 I; K! h        {( X& t; n5 G) Q  A+ H& h
                paramSet.srcBIdx    = 0;
$ N' j# t$ t! ^0 A$ Y) i" ]                paramSet.destBIdx   = 1;3 S" |$ H8 M7 |9 }/ Z0 o
                paramSet.srcCIdx    = 0;
& M5 l+ _; [" V                paramSet.destCIdx   = 0;
1 D* f8 L7 T  U1 n9 k                paramSet.aCnt       = PING_PONG_ACNT;* L! n4 {: Q# z, }7 S
                paramSet.bCnt       = PING_PONG_BCNT;0 A; N2 r& h5 M  \1 j* s
                paramSet.cCnt       = PING_PONG_CCNT;
! N4 u) h+ }% x7 \& s: e                + {$ S7 \7 w7 K. z* s: o; T
                /* For AB-synchronized transfers, BCNTRLD is not used. */7 v9 A* a8 L2 h. }" V
                paramSet.bCntReload = PING_PONG_BCNT;
  a! ~7 I: {. G/ r0 F& K% m9 r8 V4 K7 z$ _2 ~
                /* Src in constant mode Dest in INCR modes */" a1 M5 @8 a+ _# t% [7 Z5 W
                paramSet.opt &= 0xFFFFFFFDu;/ B. t2 \4 b  X
                //paramSet.opt &= 0xFFFFFFFCu;
5 s0 h( m- v6 O: A- t' H* O                9 t# f% o% ^1 a) j
                /* Program the TCC */
4 C9 A, p) Z* U. S- m& h                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
# w4 v' R- Z0 f/ p9 h3 ^* ]
7 i1 r6 R  y7 l% P% _" y& m$ v                /* Enable Intermediate & Final transfer completion interrupt */
0 x# T  P& U7 Y2 T7 N                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
6 |% |" m0 J) j2 @4 j                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);1 N9 `# Z9 t% P- Q7 ?
: z7 O$ M( b8 F, I$ b
                /* AB Sync Transfer Mode */
: u  K6 _: z; U- c$ I6 j) i                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);: P5 s6 Z# d% G% N/ F. R& M, R( _
                / ]1 {# l# q# s3 L9 a
                /* Program the source and dest addresses for master DMA channel */
7 S; N2 `4 F6 j8 `" `% J! ]                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
  T' G2 @2 b0 }* D% \) Z* E                paramSet.destAddr   = (uint32_t)(ping_buffer);7 }4 z' B4 B0 B/ p: J1 U3 ]6 R6 G) Q
' M' h" {6 [) d& M, J8 q* o
                /* Write to the master DMA channel first. */* Q2 m% H, m. Q
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
" E/ g0 I8 {& y; l    }       5 B5 s; V5 Q4 {6 a7 U
& X" ~3 l  x% k: O+ |
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
! R" I2 K- a6 M# U$ h: _       
  c8 }+ y$ `! W. w- C( O    if(result == EDMA3_DRV_SOK) $ i4 B$ W. D- L6 ~1 ]
    {
" r7 x% k+ \* q" O* V            print2arm("edma3 driver init success.",0);
6 O2 W- `& a/ I4 I" g' [  |1 K    } # ?( o* c5 G! C% n! d2 c7 l+ X
}3 S( X( L4 E" {3 P

9 N. k! `3 H" {* c8 b- H3 k, C  a% X. w- y. q
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
6 T( ?! S& X! r
; s& w2 [# T9 @7 [& B6 N2 |6 V; m8 T3 X1 y* U' n
分享到:  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
0 s# M7 x. P1 z: w每次DMA传输完成后都要再次使能传输

" K3 n9 _1 o6 V9 Z# |原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-15 03:35 , Processed in 0.041213 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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