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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
* G7 m+ s7 t1 W% v3 c, s#define  PING_PONG_ACNT          18 [# h9 ]* ]  F) o! w
#define  PING_PONG_BCNT          8*32*40 & Y  H2 {* L" u3 ], E: A
//#define  PING_PONG_BCNT       1 : _1 t8 n& Z3 q1 s% i
#define  PING_PONG_CCNT          1, n" E! N8 o9 w; n. `9 V
#define  MCASP_BASEADDR          0x01D00000. s7 {  D: Y. o: s
#define  Mcasp_RXEVENTQUE        (0u)' a) q; D, i- p; \3 h

" w! m+ ?7 \0 x# M$ F5 T' y/* OPT Field specific defines */
. [( T8 F' c' C#define OPT_SYNCDIM_SHIFT                   (0x00000002u)" P3 M8 m6 [- j+ f
#define OPT_TCC_MASK                        (0x0003F000u)! o1 Y9 v2 v0 ]- o. I- W8 ~* u/ B
#define OPT_TCC_SHIFT                       (0x0000000Cu)- F. ]) W. ?7 A% I
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
. a9 g4 o/ H1 M6 q) j+ S, N( d#define OPT_TCINTEN_SHIFT                   (0x00000014u)
/ O% m" t% c( T
1 \. ?4 L) v1 L2 gchar ping_buffer[PING_PONG_BCNT];9 M7 m  s: ~3 W- B$ k. L' u1 v* r$ n1 h
char pong_buffer[PING_PONG_BCNT];
9 n6 p+ y, @" u
  |5 H1 J$ {& W0 q: U8 u& ~: L9 d' S1 ^) B5 v
: @0 f8 Q$ D( f6 Z# j
$ b0 J/ [8 H7 F4 U$ N/ x6 w! x% \% M
static void ys_edma3_init()9 j7 r' j4 E) `1 ^5 p
{2 {/ O! t3 ~# D4 v) b: H4 w, A0 F) G4 m
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
+ ^1 R, p- `  K3 O5 u8 ^        EDMA3_DRV_Result result = EDMA3_DRV_SOK;% C) f% a! ]% t4 G" t  D/ r
        EDMA3_DRV_Handle hEdma;# e. Y  U4 f% x0 A9 U) [
    uint32_t chId   = 0;
. Z4 v2 W2 M0 P. s# H0 P: K8 C3 V    uint32_t tcc    = 0;, m2 c5 K. s1 a) g
) {; }1 y  ]9 G  ^! z# E3 ^
    print2arm("edma3 driver init...",0);
5 m" g8 q/ v7 A) Q7 J
, z( X" @4 c& M$ t9 J! ?$ a        hEdma = edma3init(0,&result);
9 j, I3 t1 g$ n( |, Y/ C5 L        if(hEdma)7 F8 F; b/ Y$ q4 t2 b
        {
6 t) D: V1 `) |" O+ r# f9 G: @+ P                print2arm("edma3init() Passed.",0);6 J1 a1 y: y: a3 Z& h# h# _1 g' ]
        }9 u' P2 f: A; O& I9 B( J
        else
: M' g- ?. }( ], H  I  U# O        {
# d! W3 ]' S! F' ]$ M7 q& c9 B9 a: V                print2arm("edma3init() Failed.",0);) x; o/ s) [  i9 l. M# |6 N
        }
5 ^% P+ j, R6 I8 o        0 t6 H; Y& k6 w* _
        if (result == EDMA3_DRV_SOK)
+ L: v% m- N, \1 ~# o3 k5 {    {
- z. \- Y; I- v0 u7 C- X                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
- D* [( e. ?! l7 g( m& ^2 M; g7 D                                                       (EDMA3_RM_EventQueue)0,
* n  s! \7 |5 `/ J                                                            &edma3_isr, NULL);. M. s) \6 S4 N+ }4 G
    }
  F0 \. v) t5 b. o4 k7 I       
/ L3 l  l" n$ r2 @        if(result == EDMA3_DRV_SOK)
$ ^! O1 |, j& J9 p; H9 Q        {
1 f- U7 E* X4 ]8 @3 E) g) V                paramSet.srcBIdx    = 0;
2 ^9 h# |3 m' |+ W4 q0 ~                paramSet.destBIdx   = 1;) ?# D8 ?5 ]( i/ G" C" O* t" `
                paramSet.srcCIdx    = 0;
) M3 W* {  I2 F# _6 A/ F                paramSet.destCIdx   = 0;
8 `% f( N. I$ z1 m! J                paramSet.aCnt       = PING_PONG_ACNT;
5 n  p! r! n: i9 T) e                paramSet.bCnt       = PING_PONG_BCNT;
, z+ V' l4 ]2 _                paramSet.cCnt       = PING_PONG_CCNT;
9 J2 T+ x+ R0 H               
/ y& ]) {0 b7 j" J9 I2 X# Z7 V                /* For AB-synchronized transfers, BCNTRLD is not used. */
! a" X6 y2 H% [( U' Z- h  n                paramSet.bCntReload = PING_PONG_BCNT;" p  D" B; ]# _- E) a9 ]

& u" ?7 V; S9 N9 T9 o2 T                /* Src in constant mode Dest in INCR modes */
4 [* u" h6 h3 V* A/ F                paramSet.opt &= 0xFFFFFFFDu;
) q5 L1 p0 H6 m  i( {6 w6 M                //paramSet.opt &= 0xFFFFFFFCu;
3 f& S2 J' {' H               
$ C% A& V5 s1 Z( m                /* Program the TCC */0 P9 ]" _; G% \) V  `% i+ ?  {
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
! W! Z' ]" m+ C5 f/ _; D8 y. v
: ]' |$ Z+ M) l3 C                /* Enable Intermediate & Final transfer completion interrupt */% ?- H$ B& z# ]4 R+ G( H, B! G
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);; X1 t. e/ _& t! @
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);, K! H) i! ]6 r1 H

- A) k6 _- v  |- P$ ]                /* AB Sync Transfer Mode */
: S/ Q6 P! X, E1 ]+ z                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
( v* p$ S/ `3 n( N* j               
6 E8 G; o6 i; r! G9 E. V                /* Program the source and dest addresses for master DMA channel */$ @+ x( u. U4 X9 R/ r5 k
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);# P. I! U8 \* l# D
                paramSet.destAddr   = (uint32_t)(ping_buffer);
8 [* c; f+ i. o7 C% h  G: y" [- o+ g2 \4 Y  W8 E- w) u
                /* Write to the master DMA channel first. */
/ ^. C  a4 ]( {$ e8 d: A7 I: e                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
1 Z8 H+ o( Q! C2 D( G7 O. Z    }      
6 U! r9 d, L( o1 w+ A- j0 f5 m
3 t: ?9 t+ i7 M- p1 u. v0 o        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);: ?1 t$ P  P+ W( v: ~+ |
        , ?# F  |. U/ H. h- ^, k4 a( r
    if(result == EDMA3_DRV_SOK) ; Z( x6 y! D/ b6 V6 D
    {
% f3 j$ h! T9 y7 ^( X            print2arm("edma3 driver init success.",0);* }9 S# N# D* @( @; ~: j
    }
' R* x0 l5 r  K, i}
% s% O9 ^) a* ?7 [' _; f! p& f  e# Y  g! `3 e4 ]1 Y& _

+ }+ h/ O& |/ R, YEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
+ R" D4 A1 ^& n# x  r
5 C% _: G$ f( o* g& }2 I- ^6 T- O$ k' O# d" E' 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:47
, [8 y3 ]0 I8 V& y5 x0 c: t每次DMA传输完成后都要再次使能传输
' \0 ?+ ]( A/ e" E% l3 b
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-25 17:36 , Processed in 0.058905 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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