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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:, i& e8 T( w5 |: [- z( o! p% `
#define  PING_PONG_ACNT          1# a" h, n3 x/ R$ m8 f
#define  PING_PONG_BCNT          8*32*40 . [1 q4 X( H  \% Z( V
//#define  PING_PONG_BCNT       1
+ u" v6 Z* _- c& O9 ~2 P#define  PING_PONG_CCNT          1
4 @0 d+ G7 b2 C6 I2 y  u/ c# ?#define  MCASP_BASEADDR          0x01D00000. E! n' w6 q6 V' b! T7 A+ W) l  K
#define  Mcasp_RXEVENTQUE        (0u)
7 M2 z- f. g. ]4 `
7 ]( \2 b  i8 c$ R3 |" N/* OPT Field specific defines */
2 g1 e2 K- V* L3 y#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
: ^9 _; k5 ?8 r, K! B. m% }#define OPT_TCC_MASK                        (0x0003F000u)5 p" i2 Z( e, Y- a6 P. K
#define OPT_TCC_SHIFT                       (0x0000000Cu)) D" A- ^; `8 _0 d$ }: i
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
; t! ]! e% |8 S* i: y/ y#define OPT_TCINTEN_SHIFT                   (0x00000014u)+ w; S* R7 q! R9 j% q! g
2 j+ |3 Z1 c0 D1 J5 ^
char ping_buffer[PING_PONG_BCNT];
- ]* @( p: H4 @- O  M2 n# ~char pong_buffer[PING_PONG_BCNT];
5 Z2 S$ {$ _- b4 G; O8 F
# N% U9 N) A& P6 o0 W$ O3 Y$ C" b8 N8 l+ x
% D" V  o" o( m& P) r8 ~1 j
2 g5 Z, |6 i& ]2 T4 `
static void ys_edma3_init()$ F1 r$ ]  p3 i1 A: `
{
( ?9 q  R5 q+ m# z- ?9 R2 h        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
6 s, Q; o" H2 @! d        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
, q7 p2 }/ P( f+ r" {( b* y        EDMA3_DRV_Handle hEdma;
- |  g# Q6 L9 f0 X    uint32_t chId   = 0;3 K9 P8 L4 G4 M" x
    uint32_t tcc    = 0;3 k& v  W  v8 u0 _0 r

& i+ ]& g9 W. b0 }, X    print2arm("edma3 driver init...",0);
1 u+ {$ a5 A% b
- p6 J4 m3 d* `0 H3 I$ j, O        hEdma = edma3init(0,&result);3 V" X* o- M2 F$ j
        if(hEdma)+ b' R! ?% ?# k$ S! o
        {8 `' v% i; I" T- \! j5 L+ e
                print2arm("edma3init() Passed.",0);2 i0 D! C0 U& ~) C! o6 t. V
        }8 ^( t' \4 }5 U5 f) R
        else' [( R$ a5 T+ z6 q1 n  G5 X
        {
% f# L+ ]( D3 G- N( n                print2arm("edma3init() Failed.",0);
& x, C1 s; v) ^0 B8 p5 \        }
% H& P) e0 a4 }6 m: W# W       
5 G( R* u, p7 s7 {8 h        if (result == EDMA3_DRV_SOK)
# ^: U; T* L0 h) g+ P- |. c0 t    {; n- L5 Z* y( ^/ X: x) u
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,  K7 R' Q3 k) ^& h. H- @) k
                                                       (EDMA3_RM_EventQueue)0,
5 y& N& N0 X8 z5 g8 A5 t                                                            &edma3_isr, NULL);/ |; k8 i9 \8 m; C
    }
4 |( a. ^$ t3 T" R! c0 Y. ]        : i% J2 u5 w" D4 [% Q4 ~. v
        if(result == EDMA3_DRV_SOK)) G  O0 K4 ]. D
        {
2 F' D. Y- h6 |2 Y1 t                paramSet.srcBIdx    = 0;
" ^7 G( X4 W/ T9 K- w" `                paramSet.destBIdx   = 1;
$ x! E# a; _, O* F5 u                paramSet.srcCIdx    = 0;
+ o$ a8 R4 w% G( u0 N                paramSet.destCIdx   = 0;- l( l9 R  r& ~( B
                paramSet.aCnt       = PING_PONG_ACNT;$ ~) H. f5 q- x& F  o+ d6 F
                paramSet.bCnt       = PING_PONG_BCNT;  q7 j6 L& {* s# {4 I
                paramSet.cCnt       = PING_PONG_CCNT;& C0 z( z% V, D4 t$ }4 L# F
               
- S/ Y% y' B  F" c                /* For AB-synchronized transfers, BCNTRLD is not used. */
8 |  g$ e* S. v# D. B                paramSet.bCntReload = PING_PONG_BCNT;
% |) v9 @4 M+ j6 q3 Q  R: _* z6 d+ C- ]( |& R, u
                /* Src in constant mode Dest in INCR modes */: R, [( e4 J7 k# C. Q
                paramSet.opt &= 0xFFFFFFFDu;, C8 f9 \" s  I1 [# r# \
                //paramSet.opt &= 0xFFFFFFFCu;
0 E  d1 j( F+ z               
% a, h5 }8 W0 d5 A/ U                /* Program the TCC */. f, O2 ~7 n7 K$ S
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);3 q2 K) \3 d0 w  z
/ t& H) X4 \4 W1 [8 g3 J
                /* Enable Intermediate & Final transfer completion interrupt */9 J* B% S( F2 Q3 s+ N$ S: X$ B  J
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);) D  c& ^* x! W1 }- B7 e
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);8 _" o3 W) A3 l4 d: h  y& s) p* l* q0 P
4 }6 c/ U& k+ B5 ?
                /* AB Sync Transfer Mode */9 S+ D8 y( x- z; ?* v! u
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
& c" ~; Y6 u! n( {& \                7 _) \; @" H% ]  C
                /* Program the source and dest addresses for master DMA channel */! Q, b3 [: q' ~+ w$ a1 C7 T
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
3 q1 v3 g3 E5 g" x                paramSet.destAddr   = (uint32_t)(ping_buffer);
6 C4 ~9 E& t: b
: K) _  E, _6 i% ~) V- [9 A                /* Write to the master DMA channel first. */
4 {- Y7 H4 ]9 ?& ?% |; U- v                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
  X- ^, j: L: Q; X9 e- \3 U    }       4 L; l, z, p. z- c1 h7 `
- E* O5 x/ a: r
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
3 E5 E+ L, Z- `! O       
, P% V* z5 i. ~. o    if(result == EDMA3_DRV_SOK)
2 y0 C; J; V7 u( y    {# _* q0 y/ T6 C2 l- @- C
            print2arm("edma3 driver init success.",0);) X! H" N) b% i) I' T8 c
    }
4 s/ Q7 `$ D( v( G  I}
, y( S8 U* ?5 U7 C, q' F& c
: o# ?" b  p' ^& z7 S; {' ]/ S! c) d, k* g
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
4 B, i- h6 K; `- g, K( Q5 O: \2 x: L2 p6 S0 j7 d; R
4 @+ H7 d& h6 t. b* ~
分享到:  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:471 g- l( h, D+ L! N0 L& d  V- E
每次DMA传输完成后都要再次使能传输
0 z: t' ^$ A9 |
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-26 17:10 , Processed in 0.040513 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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