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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:1 c/ I/ H6 \; N. f4 Y- q; t
#define  PING_PONG_ACNT          19 U5 d. U  _5 U& b; r, E9 A
#define  PING_PONG_BCNT          8*32*40
8 u# g. ^: q. e3 a% Q//#define  PING_PONG_BCNT       1 : i% d$ T. V7 F1 m& u
#define  PING_PONG_CCNT          1
0 \' c8 I9 h9 X6 S" l* Q& w#define  MCASP_BASEADDR          0x01D00000* ^% a$ {) V9 e- j$ c8 T
#define  Mcasp_RXEVENTQUE        (0u)- [. y, C% M& z( f0 ~- |/ [% m
4 {4 J/ F) {! D& C$ g
/* OPT Field specific defines */- f, p/ }4 S; A. N% q; w& P( G
#define OPT_SYNCDIM_SHIFT                   (0x00000002u). @' m) K0 s# ]0 y7 k! S
#define OPT_TCC_MASK                        (0x0003F000u)
8 g7 p0 Y4 Y( B, O#define OPT_TCC_SHIFT                       (0x0000000Cu)
6 s1 l  ?/ q& ]3 c) w0 i" m#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
' W) s6 A, i$ B& O3 U3 \0 \#define OPT_TCINTEN_SHIFT                   (0x00000014u)$ Q4 l: W7 V! V4 B" u! Z( M9 D$ n

* j+ x" Y5 o/ e% d4 kchar ping_buffer[PING_PONG_BCNT];
# I' x8 V7 Y9 [! H( o( P7 echar pong_buffer[PING_PONG_BCNT];
3 K3 v* f2 I( [' Q! e, |5 e/ V2 J! v3 P% Q

2 |$ p: Z. r5 i) m. s
9 O! \- W. z' k4 D4 i! ]
% D' B4 I, J7 r  C, {/ F, q+ B+ cstatic void ys_edma3_init()! d5 L% n' W( \9 ?% T. C
{% O0 Q. ^, _3 [, {5 @
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};$ O3 u& l( X* \9 k; o
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;8 p; Y6 |; n5 J( H' G# r9 z' G; N! b
        EDMA3_DRV_Handle hEdma;
, w8 A% \. G) j  Z4 D" k    uint32_t chId   = 0;: ^! S- z! N! p! |+ @( j3 L
    uint32_t tcc    = 0;
' p$ M5 ^* x; n' O# p/ i3 [! F/ I" N; ^' z0 z* ^# [" O2 C" Y
    print2arm("edma3 driver init...",0);
# U0 E* j( i* T/ U3 w! i
* M: q" v4 F2 @2 p; C7 e        hEdma = edma3init(0,&result);
% U7 u( Z0 \7 ?        if(hEdma)1 F2 T) H- |$ H) N$ p
        {
/ Y1 R5 }1 Y1 N. ^0 _& L                print2arm("edma3init() Passed.",0);' `$ d( M( o/ s3 i: j- G2 b
        }; y* L2 u; p  Z7 M0 R
        else
/ C. w6 O2 \, \9 B, B        {
0 ?9 ?$ a8 ~' ^3 Y                print2arm("edma3init() Failed.",0);
, ^/ {* K* y( |. w" f        }
: _! R) o0 C: E9 i  s       
* u# `- U' P$ f  ^/ {, Q" p+ ?        if (result == EDMA3_DRV_SOK)8 I' c, K% m  M. R
    {
6 E: J) W& ]  g4 q2 _. o8 u                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
$ w! Y$ h/ ?8 o+ }- l/ t9 x                                                       (EDMA3_RM_EventQueue)0,
9 B' E/ _7 O- |/ H1 a                                                            &edma3_isr, NULL);
9 l1 d' W6 E7 ^0 K    }
. K" _: t) }) F* B; |' p        # F5 n0 p9 P% Y& n/ X
        if(result == EDMA3_DRV_SOK)
0 h& ?- T7 i. p. n5 \1 R4 x        {2 @5 l, d% k! a- w
                paramSet.srcBIdx    = 0;
8 e: T: K0 f! r, x                paramSet.destBIdx   = 1;7 `9 e1 @. V% Y
                paramSet.srcCIdx    = 0;
( @2 t- t7 F! O) v                paramSet.destCIdx   = 0;
% `! r7 V- ^2 U8 A$ A) S                paramSet.aCnt       = PING_PONG_ACNT;0 u9 I  M. z+ w+ c& h" u
                paramSet.bCnt       = PING_PONG_BCNT;
; Y. M7 q. N5 r# {                paramSet.cCnt       = PING_PONG_CCNT;
1 J; n  W% X- {, D$ e4 I5 x               
: U9 U* ^* r2 M                /* For AB-synchronized transfers, BCNTRLD is not used. */0 @$ G6 S1 s  \! }$ j
                paramSet.bCntReload = PING_PONG_BCNT;
! m8 ~+ I* |% |) p$ Y0 F- p1 l2 p1 V- u1 l) A6 {+ z
                /* Src in constant mode Dest in INCR modes */& f  R7 e7 Y: M! o! \
                paramSet.opt &= 0xFFFFFFFDu;
5 }) T# j' D, Z/ J                //paramSet.opt &= 0xFFFFFFFCu;
+ ~5 R: O  A4 L$ g/ s1 l5 C               
% N( C! K$ b6 S, u7 c& b                /* Program the TCC */
2 _% T% T% {' T. n& Q9 c                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
# V6 Y4 F, _9 l* M$ i; |! O5 N* M4 a4 ]6 p+ C1 A
                /* Enable Intermediate & Final transfer completion interrupt */
, C8 i; V9 k8 B# z6 W                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
* I7 i5 Y! F* F; ?/ N                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
, q. [. m0 s/ p# {6 z4 n; M
7 Q8 w; D+ y9 m( ^* j; S0 d                /* AB Sync Transfer Mode */0 E6 r4 [5 z/ ?" h* @5 `. V3 ^
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);1 z; p6 N. }0 ~$ Q
               
7 x1 P1 k7 p8 q                /* Program the source and dest addresses for master DMA channel */
! P5 Y4 ~' m% j2 s  c                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
" {( z& o! P- d/ j) z1 W                paramSet.destAddr   = (uint32_t)(ping_buffer);
6 I3 ?9 j. `* g( ]! G2 v1 I1 f0 ~( ^4 [2 z
                /* Write to the master DMA channel first. */
& }' f: [3 D3 }( c$ [# y& ?( Z                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
+ |( g1 `4 y. O4 Y    }       6 z/ l+ [  K2 j, D
# m# s, k$ Z! O
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
/ x& e9 x9 N% _9 ~5 s       
3 K: M& q- E. }4 F5 l    if(result == EDMA3_DRV_SOK)
6 S+ M: {9 n4 _, C/ T! e    {6 v: z; ~  P5 [5 |! _
            print2arm("edma3 driver init success.",0);5 \. Q+ N. f. V3 a
    }
3 w: }+ p( y1 m  {8 J7 D}
1 C0 c" E5 A0 ?4 T- U# l$ q4 s) J- {, o% r- [
! L9 s2 N, }! f) d
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。9 P+ ^2 A! z) `

- v" ^( ^% }$ n  m3 Z
: b: g& g/ g# g9 T
分享到:  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! j2 O+ G6 G# `2 f9 R9 k: W2 a
每次DMA传输完成后都要再次使能传输

) j0 i% S. s: {9 p原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 08:43 , Processed in 0.036352 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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