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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
+ P* {1 e% y' B; L, f* t# ?#define  PING_PONG_ACNT          1
! x, K7 \/ d; P* s. u  k#define  PING_PONG_BCNT          8*32*40 1 ~1 O+ G7 l( F3 L" X: m* M/ y' h
//#define  PING_PONG_BCNT       1
, ^: J" o, v6 Q7 _* K* a#define  PING_PONG_CCNT          18 K5 l' {, b  W, b4 q" v; Q5 M
#define  MCASP_BASEADDR          0x01D00000
$ K& o3 P( P; q! @#define  Mcasp_RXEVENTQUE        (0u)
' D7 z! R; D. g: O
/ n% E$ \! w7 z6 E! x7 E# g/* OPT Field specific defines */
8 c; n* b' Y1 \. Q7 p  f+ i, u% v( D#define OPT_SYNCDIM_SHIFT                   (0x00000002u)  }# I; F1 J' H
#define OPT_TCC_MASK                        (0x0003F000u)
: ]7 Z/ C: b) M' t1 S+ N9 S#define OPT_TCC_SHIFT                       (0x0000000Cu)& ~) }+ f% n8 D6 o
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
# x$ v; e) Q0 K0 R* ^* w$ A#define OPT_TCINTEN_SHIFT                   (0x00000014u)+ F2 Y' @9 _5 N; W6 `( v, ^/ C. k* N

8 T& Z6 g6 t! w) ^/ C  p( {char ping_buffer[PING_PONG_BCNT];* p9 X0 O3 ^, ^& t  \2 |
char pong_buffer[PING_PONG_BCNT];4 C1 Z& C% {7 G4 _, I' c; ?
. e3 }# j+ j3 [
8 C. }( i( P; Y8 s0 D" v

+ @1 w  P% ~8 C, B- c8 Z: _  H8 Q  h  i0 G
static void ys_edma3_init()
6 W; K9 w/ r! j{
5 _+ S3 Q! j. ]1 c: {- k6 E        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
  ]: s6 K; A+ H- A9 W        EDMA3_DRV_Result result = EDMA3_DRV_SOK;  D4 v. c. \0 ]* t  [! e
        EDMA3_DRV_Handle hEdma;
- w- w2 i+ F- v$ `    uint32_t chId   = 0;
* @6 q# N7 o3 I7 y    uint32_t tcc    = 0;& a. G$ `' x9 ^7 `; T: `% z* Z
  ~9 ^5 o' m, v9 J, V& X" R
    print2arm("edma3 driver init...",0);
4 v9 d6 l3 u  e& m+ g! W) ~
- F; I/ Y0 f! c; ~" Q        hEdma = edma3init(0,&result);
7 T1 D4 O. n7 X6 [4 D) S1 {0 \) L+ L        if(hEdma)
1 t, o, [$ @& C5 c# |5 [        {- W8 _9 N: t0 L* _
                print2arm("edma3init() Passed.",0);
5 y- y5 P0 a: W        }
% e* U0 ]0 V" \8 e, ~4 R& a. ?        else
# B/ k5 t' i( X; i        {1 W! K1 R, s2 j/ T8 V/ g
                print2arm("edma3init() Failed.",0);
- O; _' C7 P4 O0 g1 Z7 s" |6 J4 [        }/ V' A' H5 I! ~* g
        $ k) F2 g: b# Z4 Y8 e! A( U, [+ o
        if (result == EDMA3_DRV_SOK)1 }& E3 ~; q& V
    {
7 o/ c8 Q: G( ^+ z( H' Z; \, q                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc," Z9 t4 G; J6 t7 Y# y
                                                       (EDMA3_RM_EventQueue)0,( R4 I: z% a. J3 v5 S3 p: a4 M! h
                                                            &edma3_isr, NULL);; s$ G, i% E. i- ?
    }7 ^- U% ~4 E! `
       
& h! w0 x$ _8 \% h3 q& P) R- Y        if(result == EDMA3_DRV_SOK)3 K: S* r4 b, ?; M. v8 w' ~
        {3 b& o4 G- g+ ]% F: _
                paramSet.srcBIdx    = 0;) h: J2 g" Q! W
                paramSet.destBIdx   = 1;
4 D9 q# T! n1 V' h! K5 e5 W" R9 j6 ^                paramSet.srcCIdx    = 0;" y  t5 {" h, [. G' p  v
                paramSet.destCIdx   = 0;- a: g) b! _) n; [
                paramSet.aCnt       = PING_PONG_ACNT;
3 z" F4 t- J& q: W3 S, y& Y4 A                paramSet.bCnt       = PING_PONG_BCNT;) T3 y7 H+ w* u! J
                paramSet.cCnt       = PING_PONG_CCNT;
6 i' e2 \9 l0 t/ K0 M- J               
' X8 i' ~: {; G+ Q# T$ t/ ^4 b, B                /* For AB-synchronized transfers, BCNTRLD is not used. */6 x0 a/ |+ |1 m) C0 ^
                paramSet.bCntReload = PING_PONG_BCNT;
$ j; E' w( c1 ~, j# C( ?: o. R# ^# b; P3 M& Y5 ^) D9 O
                /* Src in constant mode Dest in INCR modes */
1 A+ E! a: Q7 K# R                paramSet.opt &= 0xFFFFFFFDu;
3 @3 A; V6 ^. L0 p                //paramSet.opt &= 0xFFFFFFFCu;  S/ B0 j# Q7 e' r2 l; `
               
4 s$ [( B$ b) n: H5 q' k+ X7 q                /* Program the TCC */' ^0 a3 X+ r. Y. U. w
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
/ Z3 }6 C& J' z, e5 z0 ?2 G! c2 L% [" @- n9 i% W
                /* Enable Intermediate & Final transfer completion interrupt */
. S- r" [' z: C. {2 W8 G                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
2 k' I, ^; [+ u4 s2 v                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
9 X/ W: f  r9 K7 A' f9 z* I7 b* @8 V8 ^3 l- w: @! t+ Z
                /* AB Sync Transfer Mode */
9 X& b0 |- |- T8 z                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
& r* C2 X5 C; i( T$ a+ w               
2 @! }; u! o9 \$ p( P3 n- \: X                /* Program the source and dest addresses for master DMA channel */! [: [1 ^5 J. Z0 X
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);2 g7 i1 Q1 Y: Q+ ?0 g( m5 \$ v6 f/ }
                paramSet.destAddr   = (uint32_t)(ping_buffer);# x, ]+ p, R8 r7 A: O

0 e$ H  W0 q0 j  j7 E8 l                /* Write to the master DMA channel first. */
9 a# `7 N5 f6 v/ z' L. j6 Y( }  ]                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);% z; N3 B( H4 V3 f4 h0 Z, E! {
    }       5 u1 D9 W( g$ H; k  i5 R; ?
. b! K( y9 Y: I' r) t
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
+ `& M' Z7 p8 l& l) o       
" u2 ]4 G2 D3 ]2 C" w$ ^    if(result == EDMA3_DRV_SOK) . k1 q" F& |: r5 L
    {
+ h2 Y6 f3 c0 J* n            print2arm("edma3 driver init success.",0);
0 h  @- m$ k( ^    }
  H# C5 W0 A; [& d}
6 X: q# {% ?* s, M1 G+ j; M
! F2 V! t* k/ I) s* g% L# n: {- L, h% E2 m9 C& V0 s0 A/ _
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。9 S4 L7 l8 M+ s

% g( i  ?" A/ w2 v, o$ g# c8 p; p, U4 K; V3 z3 Y$ x
分享到:  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* X" i8 m: `. w% s
每次DMA传输完成后都要再次使能传输

3 D9 s% \3 {8 K" @, o原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-12 00:07 , Processed in 0.054383 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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