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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
6 y3 a0 E8 Q8 N2 E! K#define  PING_PONG_ACNT          16 `5 O( J$ n' i
#define  PING_PONG_BCNT          8*32*40
+ E4 l9 I2 J6 b- D  H# Z//#define  PING_PONG_BCNT       1
; w" I4 ?, k, x% g( A7 m9 i7 B# m  U#define  PING_PONG_CCNT          1( V5 N# Q4 R) w9 E* M5 b& R- y$ g
#define  MCASP_BASEADDR          0x01D000002 \9 M( p! m) ^+ `6 j  M5 A% x
#define  Mcasp_RXEVENTQUE        (0u)
& e) o2 y3 a! h9 u; Q3 B/ n9 A
% M  {. z6 w- Y* S6 C/* OPT Field specific defines */1 e" n8 u" Z7 j& [) ~  Z& m
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)" M" ]. i% ^9 _2 Z& _
#define OPT_TCC_MASK                        (0x0003F000u)
8 y0 Z6 L  q( \1 c#define OPT_TCC_SHIFT                       (0x0000000Cu)5 R3 s1 ^1 S! M" f. d- ^5 i0 H% z  j
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)' C  {3 T7 K% b' B
#define OPT_TCINTEN_SHIFT                   (0x00000014u)7 \/ r& A8 d$ |7 }3 g* q

' T' Z8 ?2 n8 K& {4 c- z2 Y6 B* u) uchar ping_buffer[PING_PONG_BCNT];8 C) A; o8 l2 M8 O- Z# d
char pong_buffer[PING_PONG_BCNT];+ S' d* `4 v1 s( |7 s2 N% s
2 P$ G" |) ^4 B0 Y; c. o3 I0 |
& _8 ^, X" q; b, w! w8 ], ^

& R* d" G' F8 J
2 g# c8 `2 S% Hstatic void ys_edma3_init()
8 j+ j! B" m4 h* F{$ X4 M  m; s+ y2 p; G4 k( x
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};4 j( F7 A  |  u5 {9 v2 [
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;2 c3 D2 |. k2 `$ ]! w7 s
        EDMA3_DRV_Handle hEdma;
  @- }3 G0 ^: Z( A; M1 t5 j' u+ [8 N    uint32_t chId   = 0;
3 U: Z& h4 J2 D( T2 v0 w    uint32_t tcc    = 0;
  U* Y& y5 e; c0 D* [  t$ |( ^5 x/ Q( ?3 M
    print2arm("edma3 driver init...",0);
6 ~" J: L" v  R4 R; I  u& K9 S( J, r* K" e% L+ B
        hEdma = edma3init(0,&result);& p$ B5 S  H$ V, u. c/ D1 X/ {
        if(hEdma)
4 g$ C4 _* k* `" p! ]2 a# Z8 Y; m3 N        {, v5 K" B% [( m
                print2arm("edma3init() Passed.",0);5 v$ p, J2 f  e4 M/ L  C* `
        }
9 D% y5 D  H' y* j2 F0 m        else
, R4 c6 D! Q# y* z/ }        {! `3 s3 j+ P/ j' E4 A
                print2arm("edma3init() Failed.",0);
6 d$ w4 a( J! w% L        }
! w& J! O( P6 Z. ^        ) f  d1 ]6 G* w: b6 H' x
        if (result == EDMA3_DRV_SOK)
; F# E) Z) u5 `( l    {
& v( w$ L4 A# }                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
: F: ]$ a8 ~3 v                                                       (EDMA3_RM_EventQueue)0,* @# Z# X/ E# w
                                                            &edma3_isr, NULL);
1 F* j7 H( m; J    }
' n' z; m, I; J# R0 M% W+ `       
3 z0 x* o% f" j6 ?        if(result == EDMA3_DRV_SOK)
$ M; T/ a% X: o        {! n; [# t4 `) o1 j: C# {: p! p# G9 {
                paramSet.srcBIdx    = 0;) U& {) r* M) x9 r8 V. L$ Z$ @
                paramSet.destBIdx   = 1;, K9 E  X. j9 T
                paramSet.srcCIdx    = 0;
2 S" e7 \* H' f4 {                paramSet.destCIdx   = 0;
  {6 u) q% h  {/ F8 s; h% S                paramSet.aCnt       = PING_PONG_ACNT;
) E) J8 G1 G9 ]9 @                paramSet.bCnt       = PING_PONG_BCNT;1 p6 f0 q' K  B& j3 J) i
                paramSet.cCnt       = PING_PONG_CCNT;- _" r$ Q% B6 A* A/ P
                  J* K. g. F; Z- F" ~" z
                /* For AB-synchronized transfers, BCNTRLD is not used. */
. G* k9 c' g0 g! ^/ W0 L                paramSet.bCntReload = PING_PONG_BCNT;
9 r7 X7 m$ d" e* U5 ]" d9 V+ u  F( D7 L$ B- X
                /* Src in constant mode Dest in INCR modes */' z/ J, G7 [$ F5 ?% d/ k4 i
                paramSet.opt &= 0xFFFFFFFDu;2 ~  x  E& a4 p& {, @' j5 g
                //paramSet.opt &= 0xFFFFFFFCu;
( X0 I' ?/ j; _                " N. i4 `7 s7 s! p) M: B; c. k
                /* Program the TCC */" s/ @4 }  l, J4 _2 }3 e
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
3 M( ]8 s  M# ]/ H) ]5 H
) }6 Y1 {! D" r, K" b9 m: Y                /* Enable Intermediate & Final transfer completion interrupt */- o% h4 ^9 w* c
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
) X! Y: N! N- B- H                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
/ S6 }) N' I+ F1 A
$ P6 Q; d( d- d8 s% ~( Z: z                /* AB Sync Transfer Mode */# R6 Y. u& {1 _/ `& c* W: E% ^( z
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);( P9 [) [& i# ^! i
               
3 t* G2 P) o* H8 ^+ ~# l                /* Program the source and dest addresses for master DMA channel */
' m7 U1 _2 o$ Q6 E8 E# u0 e8 C                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);! H' Z4 @, K  x% J3 M3 k
                paramSet.destAddr   = (uint32_t)(ping_buffer);
, P7 [6 a% ]1 v% U3 v* u: ]- _9 `9 l: N; @5 a2 `
                /* Write to the master DMA channel first. */
. r5 H$ _) X4 P, j0 a+ o0 F& N3 ~                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
% h4 r" w3 j2 T0 D  Y) p1 {* e    }       # Q/ N( @1 Z7 Z& y( z+ K. j+ }
6 B! ~6 a' B- F5 O- L. J5 S+ h! k
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);  y/ q1 [; r6 @9 ?8 p2 @0 }
        ) R. S$ E$ A, ~& p) a( H
    if(result == EDMA3_DRV_SOK)
/ {7 w6 i8 Q9 I& G: U$ z    {
  F/ a4 ~5 \( J  v/ b            print2arm("edma3 driver init success.",0);) V3 P8 `9 ~$ K1 {& n0 i- @
    } % p* k4 e; U, g% V! \9 G+ k
}6 {: v' ~- W/ j. @$ c
- `3 \% P, f4 r( }! i* J
  z1 H, i3 Y# J$ R! ]
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。/ R: ?8 v9 R$ H- z! \- u9 k  S

; A5 S: L1 d& w" d) A) t( j
9 s' K& b0 U% L  y( ]
分享到:  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
$ C5 k2 L% @. ]每次DMA传输完成后都要再次使能传输

; _$ ]) n6 C9 f0 l原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-28 03:23 , Processed in 0.048769 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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