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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
# k5 h7 j. e( x3 C3 l) p& W#define  PING_PONG_ACNT          1
! R( r8 X7 S5 G* q" l#define  PING_PONG_BCNT          8*32*40 : q" g7 n* ^9 m( j
//#define  PING_PONG_BCNT       1 " Y. Z5 K3 x; R% M% |5 Z
#define  PING_PONG_CCNT          17 ]3 l' \8 q5 U+ X
#define  MCASP_BASEADDR          0x01D000001 m& G. ?& p$ I# Z3 Y+ e
#define  Mcasp_RXEVENTQUE        (0u). b3 i4 S2 W8 S. S, v5 |1 Y
( b, s, ?5 q" g
/* OPT Field specific defines */. X$ F. f4 }9 A0 k* ~9 Q2 ]
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)$ t+ j5 M0 k* y) b' V8 [" [9 S
#define OPT_TCC_MASK                        (0x0003F000u)' ]: o( V. @* C: R, }
#define OPT_TCC_SHIFT                       (0x0000000Cu)7 C5 O3 d+ K* h$ Y, p& y% W
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
, c5 j( M; M1 T) N#define OPT_TCINTEN_SHIFT                   (0x00000014u)
/ r" d% {- f% _+ O: Q1 [3 Z  T2 Z) ]- g9 M3 R  v* {2 O8 o# k
char ping_buffer[PING_PONG_BCNT];( Z/ ?/ ~. C/ ^& _: B
char pong_buffer[PING_PONG_BCNT];6 o  \* Z4 V# X) g1 D
% C3 f* R( D/ Q. i3 e
! t7 [: N3 w' J4 \+ @$ Z& M

9 o! t$ u, i* `
7 w9 V; X, J$ S) R0 \( @/ tstatic void ys_edma3_init()) q" I2 u' _  F  u0 B
{
' `* c7 Z! D% O8 _! V- I        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
7 ]! n1 f$ V. N) g* Z        EDMA3_DRV_Result result = EDMA3_DRV_SOK;5 y8 ~  U8 A/ z, ?) j$ f
        EDMA3_DRV_Handle hEdma;
8 D% ^6 \4 n3 M) X1 _; F    uint32_t chId   = 0;
( a1 J8 a; e4 |3 j* z, P    uint32_t tcc    = 0;
+ q" B, Y' m) s  l9 P! i2 l# Y
2 k. M7 T- s& D) Q% Y* s5 d8 k, {    print2arm("edma3 driver init...",0);
* `; c! r' i# e; U5 ?; m/ `! N7 a4 }$ q# c% @% d
        hEdma = edma3init(0,&result);
: f' s- D; \8 D: i6 A" l        if(hEdma)1 C1 N6 f: A2 z- i+ f; g8 b! S- ?
        {
$ b$ _4 W& W$ ]                print2arm("edma3init() Passed.",0);
& d. s  E" s' d! @        }
/ j. y% ]* K( r9 F4 z( V        else) ]& f# [1 E  {+ o' D, X. C) }
        {2 }9 O) S+ P: I) |2 s$ p9 @
                print2arm("edma3init() Failed.",0);
1 C  f* _* a2 t; t# \        }
( y/ o' o; ~8 E& U4 `& m        ( n6 M3 {& a* l& ~! R, Y! ^
        if (result == EDMA3_DRV_SOK), }( ]: o1 k) }" K. t, a
    {
7 {! y/ n' @( s9 L3 }4 T                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
1 }3 E+ k9 _' K+ m; \1 ^                                                       (EDMA3_RM_EventQueue)0,
8 V; r" ]; A7 [( {- O+ o$ g                                                            &edma3_isr, NULL);% B; N/ H8 x  O- R$ i- F
    }  _& E5 y- h" Z2 _1 H2 Y
       
" W. _' ~' e- o$ M; f        if(result == EDMA3_DRV_SOK)
) y' r3 r& s/ G% Y        {" \& p# M2 }) w, k
                paramSet.srcBIdx    = 0;
9 Y" V9 Y  j9 d3 F: `1 x8 G5 n% X                paramSet.destBIdx   = 1;0 Q* R& W) I. h8 O3 n" g' }
                paramSet.srcCIdx    = 0;
/ E2 S, ^3 Z( ?( \                paramSet.destCIdx   = 0;  D2 k& b. O0 j
                paramSet.aCnt       = PING_PONG_ACNT;( w7 Y* k! ]' K! k
                paramSet.bCnt       = PING_PONG_BCNT;
9 z1 U! ?2 V; _' b8 }( }8 e+ v0 j                paramSet.cCnt       = PING_PONG_CCNT;
, t, e) r; Y. p6 q8 g; v5 k                - C; Z) y9 m& O0 [0 ]( h9 Y
                /* For AB-synchronized transfers, BCNTRLD is not used. */
/ p5 F+ \2 \. {1 t- R                paramSet.bCntReload = PING_PONG_BCNT;
& M* ]0 s9 H! V- x& ~' e( M& M$ |, L1 O
                /* Src in constant mode Dest in INCR modes */
/ @0 W( I/ V: k! a" ~3 ^: D7 [+ |                paramSet.opt &= 0xFFFFFFFDu;. c/ u2 F3 I. V6 i5 R/ i) H# h
                //paramSet.opt &= 0xFFFFFFFCu;
6 |) j: q3 ^6 W9 ?                : u+ _& G6 {/ w$ g  P
                /* Program the TCC */- X5 L! @7 {" p& z3 b
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);, J7 v& Q, a& q- ~! o
# b  `4 {/ b) F( `5 A4 ~! c
                /* Enable Intermediate & Final transfer completion interrupt */7 U: ^6 v- H: i! I
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
3 {+ L; E3 q) P8 U" _8 @" g3 n7 Q                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);% w) a3 [+ X  n* J
$ d; {9 a& |+ W
                /* AB Sync Transfer Mode */
$ j- f. p" G+ w8 f, u9 P3 X                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
+ F) O/ }" J; \0 v6 r. a                8 d3 B: g' `) i+ s
                /* Program the source and dest addresses for master DMA channel */
: v* z! P) l" N' }  @1 x                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
: K4 Y% s3 e! B9 ?) @% n6 \5 [                paramSet.destAddr   = (uint32_t)(ping_buffer);
/ Y1 ~+ L" G2 l- W* j( F/ L) b, K9 K7 R0 U
                /* Write to the master DMA channel first. */4 b4 @# c( C. {& R+ O
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
  ?5 r% Q2 v' `9 U    }      
1 F( g8 @& d6 U+ b. E
  K6 g7 G% N1 f( @# i        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
! a; }% {" y( _% e        8 j, o+ d3 a9 P
    if(result == EDMA3_DRV_SOK)
$ K/ a) K  ~: ^/ U7 R* D    {% u$ ]. c; h2 Z) z1 ^  b
            print2arm("edma3 driver init success.",0);& Y% N. Q) v7 Q0 y  H' N
    } & Q7 Q9 l, _! B4 G
}
* J8 X( |* O8 m. x6 n& P/ z
7 \" J$ V% L, I( b& w( k3 q+ [3 R& N& B3 [  A7 v
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。! j5 l6 l9 {. o7 v9 v
. {3 Y  ^. E  T, z

& `' P2 M6 G+ `2 R
分享到:  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+ J5 Y, s" J# u& K1 c9 p7 C. t
每次DMA传输完成后都要再次使能传输

9 g1 Q' K% I( c8 c2 ]原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-2 18:08 , Processed in 0.041630 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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