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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
% c1 y2 l- B+ L3 p( m# w+ u#define  PING_PONG_ACNT          1- H* f# D+ |$ U# ~5 b1 m# o
#define  PING_PONG_BCNT          8*32*40
: X! J, s. n; [3 X//#define  PING_PONG_BCNT       1 ) o& G1 C6 A% ]$ t8 X$ l) x; X
#define  PING_PONG_CCNT          1$ B( Z# H# [9 ^4 f1 x: t
#define  MCASP_BASEADDR          0x01D00000
5 N- h$ m' {+ ]6 a* ]#define  Mcasp_RXEVENTQUE        (0u)
, I" m; J% J0 f( l5 _+ R7 Q& n8 q/ d! R
/* OPT Field specific defines */8 j6 i, |% a5 L! E
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
0 z% h# E+ ?) e- K# {#define OPT_TCC_MASK                        (0x0003F000u)
: x/ \" }" V* t#define OPT_TCC_SHIFT                       (0x0000000Cu)
3 b0 o; K- c* Q8 B3 d#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
3 ~" [$ O$ F9 Y3 H9 s* U2 z( V#define OPT_TCINTEN_SHIFT                   (0x00000014u)$ n7 g% ]. l( \& ], R7 G  h

: |$ S) I2 B. h5 x6 r3 A7 B  U! f' }$ Vchar ping_buffer[PING_PONG_BCNT];
) P# X* R& E' U2 Vchar pong_buffer[PING_PONG_BCNT];
6 R+ j) E2 d" P& |0 n+ q% b# z% w1 s) H1 d: O' W
2 U# f9 u  O2 T3 l

, U7 ~9 u' {2 w) r$ I# r, [# B+ v1 ^- Y$ b  j
static void ys_edma3_init()
) a$ h! i' p5 d; h2 W7 E{. r5 Z! j9 v) w" u
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
1 Y$ h. ^$ |- r2 v$ ~$ S6 C        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
0 [/ H& U& }, h$ g5 D. a# E# |9 Y        EDMA3_DRV_Handle hEdma;
0 |7 X( [+ C  W4 _    uint32_t chId   = 0;
; D, `6 ^0 x6 ]3 F5 y    uint32_t tcc    = 0;( N6 T; N, M: d5 H# E: _( C

" t( t, r+ I# i7 T( e* T3 F( ?4 f    print2arm("edma3 driver init...",0);& x- X* f  E) E) r
9 M5 U# u0 R  G! N
        hEdma = edma3init(0,&result);1 v$ ]3 U& ~4 J  S. u
        if(hEdma)
8 b+ P" c  l, ]7 \( h        {
) V8 }- ^+ {2 b! }9 ~; P9 C+ T                print2arm("edma3init() Passed.",0);
* x+ k1 F* i) c' s        }; |; k3 d! v% D+ X
        else
' K$ ]! s2 U; [6 S2 m8 d        {
( [+ q& q8 s1 {  k                print2arm("edma3init() Failed.",0);
+ l- j/ h! `! W2 R, I+ \        }
6 U& h' X6 l* D1 `2 W+ Q        1 w* e5 r  T  h% u: }, l% z
        if (result == EDMA3_DRV_SOK)
7 v- C2 y- s0 \. z    {" l2 }5 q5 N8 ]! O! V: q+ S
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
, ~/ F* [! x4 H0 L7 `; B- V( h0 ~                                                       (EDMA3_RM_EventQueue)0,) ?& h7 w% o, m
                                                            &edma3_isr, NULL);
+ M8 w% K1 L7 b    }
0 j( N  q7 u- y8 Q       
7 O2 N$ @+ _& L3 J        if(result == EDMA3_DRV_SOK)7 ?! f- A: A& ?6 P4 k
        {
- |  E, Q7 y$ z/ V" ?9 u                paramSet.srcBIdx    = 0;; Y" p& q& C  L& j+ O' C- A
                paramSet.destBIdx   = 1;3 C+ n7 I& b& p7 [
                paramSet.srcCIdx    = 0;2 m$ [$ p; A( a( {: a6 Y0 c- v7 D
                paramSet.destCIdx   = 0;
* ^3 P! E) r0 L4 `                paramSet.aCnt       = PING_PONG_ACNT;0 @! x6 _% q  ^$ P
                paramSet.bCnt       = PING_PONG_BCNT;9 ~  K8 m% R# f1 [; i! B
                paramSet.cCnt       = PING_PONG_CCNT;
& r" k6 F4 I/ W, @+ N. z                2 `1 _9 E% [" L3 l4 \% _
                /* For AB-synchronized transfers, BCNTRLD is not used. */
. o! I9 g! c2 t3 y" [2 ^; t, Z                paramSet.bCntReload = PING_PONG_BCNT;) j7 u2 N. E0 U4 k8 A

9 B, j# m9 f0 H. ]1 F' I1 b                /* Src in constant mode Dest in INCR modes */0 u. G" [: M$ ^$ B
                paramSet.opt &= 0xFFFFFFFDu;
0 B, D2 f5 W' U" B7 k5 y                //paramSet.opt &= 0xFFFFFFFCu;
6 Y% i( ]3 y0 @  r- c; V                1 w  _& u0 X6 z3 J
                /* Program the TCC */( C( \; w$ {5 T& H& X' B- R
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);+ E* t* x2 S/ `0 s
0 ]3 K# o2 R) r1 y, I3 Y& }0 T
                /* Enable Intermediate & Final transfer completion interrupt */
) c- @; y2 Y; s8 \1 ?/ L5 w3 m/ l                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);4 X9 h4 V2 o$ M7 L
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);% c% ^4 k0 I* u& U: I, }
+ O; a# R, C( M9 [. X
                /* AB Sync Transfer Mode */
  V! m" q" s# r: P8 Q                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);' h' P! l* q& b/ K1 Q) b7 R$ I
               
$ Z+ x' i, _; V9 u* k: n                /* Program the source and dest addresses for master DMA channel */
0 t& b; Q4 f( k4 z) l' c0 ~" [. p: f                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);4 }* E1 P3 x5 `9 I
                paramSet.destAddr   = (uint32_t)(ping_buffer);
( a# t' \. j) {2 C
8 {* e3 p3 a: p* |                /* Write to the master DMA channel first. */
4 O: b6 M$ `# q  W* o7 j                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);, T5 T7 i0 \7 W- R8 T) F' j
    }      
7 X% F# e2 C! n! A3 u1 w
2 V: Q; l4 \5 ~4 N/ ]/ g        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
) E* a, s0 `2 }7 o# U+ s        2 u1 Q% ?2 M& ~0 E* K5 k. k
    if(result == EDMA3_DRV_SOK)
  X2 t9 `1 }' C" X8 i9 F; W6 K    {7 Q  F+ X) Q. n, t
            print2arm("edma3 driver init success.",0);+ p- C+ _- F/ ^5 H
    }
7 E% u  h& h. e) z4 _* F% x7 Y5 C}
) r, \8 ^9 g+ r% z( {4 u( P
& @, ^7 o6 M9 B
& x/ P7 `" |1 m  z" [" yEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
8 A6 \# H* \' {8 b( n* b/ N8 c1 v- [3 I1 n2 y1 E+ l, R
, V; q! J( \8 D: c7 F4 o( t9 M
分享到:  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
% D0 e: {* n5 m2 B3 s% y9 A5 K) r每次DMA传输完成后都要再次使能传输

5 D& P8 k/ J$ H. I' I原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-23 03:13 , Processed in 0.038191 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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