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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:( K4 v5 ?: Y7 R  ~% z- C
#define  PING_PONG_ACNT          16 `4 U. N2 P/ z9 t* X$ V) k8 ]' K  q
#define  PING_PONG_BCNT          8*32*40 , g- Q# G: K8 E) `1 V
//#define  PING_PONG_BCNT       1 ( g, o3 P- e. E- \: f9 T
#define  PING_PONG_CCNT          1
' J. t5 l4 q7 j( P, o. }- e#define  MCASP_BASEADDR          0x01D000009 t# ~9 Y8 d# z8 a
#define  Mcasp_RXEVENTQUE        (0u)# v6 t  T8 W2 ?: S

3 o, v- V# `( Y: u5 r5 r/ ?/* OPT Field specific defines */( U1 O. G8 \6 C! ~& ]
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)$ h/ W  d/ S; t
#define OPT_TCC_MASK                        (0x0003F000u)! L! H$ l7 ]. e$ w4 ^, W
#define OPT_TCC_SHIFT                       (0x0000000Cu)( r) p: u! v3 e
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
3 }; r, O% V; j' \( n#define OPT_TCINTEN_SHIFT                   (0x00000014u)0 G: G: C/ `8 b: m4 X* G

9 j6 B$ t2 m* j1 G$ D- mchar ping_buffer[PING_PONG_BCNT];
7 c' o" [/ y5 @- B$ ?char pong_buffer[PING_PONG_BCNT];
0 q% J( M% i% B6 J4 T3 I& i# ^7 ^: J2 v' h4 g% b3 Q; {

$ ~; B6 X9 K2 K& D) O  }9 E. P) n% D3 F. W9 r- z

% p7 P! G# Y( A$ ~7 nstatic void ys_edma3_init()8 {* t- q; V# Q  }2 L
{
% {/ a: @7 y  Y4 V( Q+ \        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
2 a) m) X2 |8 J" t  q3 h" K3 A0 p        EDMA3_DRV_Result result = EDMA3_DRV_SOK;8 T! p3 m+ u6 z) b- @
        EDMA3_DRV_Handle hEdma;
6 f. m5 p2 I) l% r0 b8 N: o    uint32_t chId   = 0;
& g* `% p$ y$ E9 Z    uint32_t tcc    = 0;
, ]2 O2 y  X7 E! j* L8 H" [7 p& l" {
! \) i6 E2 ^2 m! l- }" T; T    print2arm("edma3 driver init...",0);8 B3 P, H% r* I2 K

4 @4 E! u5 @) M, w: _4 v* l        hEdma = edma3init(0,&result);
) s( }- j: c. |1 F4 j8 k        if(hEdma)
+ k1 }- Y* r1 E2 s1 X        {) |; ]- u# A  E9 H
                print2arm("edma3init() Passed.",0);
$ |5 e' s2 f. R3 q/ @        }- P& a0 l1 m8 [5 G6 o
        else* C! p2 I: _: {, F& c
        {% I+ I0 F6 b+ _
                print2arm("edma3init() Failed.",0);
% J! D$ t* Z' G2 {  R        }
$ x& Y/ o' Y* [& \* E' M) a' i       
+ t( C2 R& I, J! _. c* T9 k5 H. K, |        if (result == EDMA3_DRV_SOK)
: O" @! A+ o+ B    {% r. Y. Q9 r# W$ Y" B2 E2 Y7 j7 `
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,, C- u; C4 Q$ Y- _, u* W, M
                                                       (EDMA3_RM_EventQueue)0,
2 _: D- R+ N, |% S# W; Z                                                            &edma3_isr, NULL);
+ L% Y# ^7 Y) }) l8 s$ Q    }5 b( z4 w* j3 C/ ~! w  }8 @
       
* l* ^2 J( T& R! ^5 ]$ s        if(result == EDMA3_DRV_SOK)
: j- t. j( D& a0 g! \        {( ?2 Q! }3 D7 q' A8 u: ?7 r* X- T$ S
                paramSet.srcBIdx    = 0;1 }5 O7 R8 P9 R
                paramSet.destBIdx   = 1;
: }6 y+ b8 b" |5 x2 x3 b                paramSet.srcCIdx    = 0;, w4 z6 H) D6 N' ]8 s9 d) d  b
                paramSet.destCIdx   = 0;2 {' p5 k; U$ b$ u! L( H8 t
                paramSet.aCnt       = PING_PONG_ACNT;
( ~3 _& O4 g. z$ ]/ W2 |# H) `  Y) H* ?                paramSet.bCnt       = PING_PONG_BCNT;
5 y- u) |6 x9 I                paramSet.cCnt       = PING_PONG_CCNT;
4 s/ E" [6 a- h3 l& t0 W5 G& I               
7 o5 }& o7 }+ l" v                /* For AB-synchronized transfers, BCNTRLD is not used. */
# k7 K* Q& P1 p  C' z" N, \                paramSet.bCntReload = PING_PONG_BCNT;
4 K; {2 B* O% i4 H1 D6 ~; |7 M
, X8 J5 Z- C( p/ F( ?6 @$ [                /* Src in constant mode Dest in INCR modes */0 H+ Q' ?' N* D% |$ m6 |
                paramSet.opt &= 0xFFFFFFFDu;
% [6 [0 i$ b, }  r- m; \                //paramSet.opt &= 0xFFFFFFFCu;) c0 `" T' X0 s* [& R, ]7 c
               
" x9 m& i0 {  \2 V( U                /* Program the TCC */9 P/ D, G: m6 G. E, l
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);* ?2 a. Z. T5 e& j, Z: v: Z+ z

5 d; P9 u# ^& f8 U! z% D1 T                /* Enable Intermediate & Final transfer completion interrupt */
3 Q! `2 y. B2 a& n1 U                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
  z& |: B. k* t8 j  v                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
5 X' ~7 ^; o: X; ]3 V5 `
+ ]! v* \) ?# e7 A1 ?) ?                /* AB Sync Transfer Mode */
+ g$ U: q8 ]) d- G. \, I8 o                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
5 S# z" W# C) }! i6 ~                1 b3 O& u8 ~* ]7 k4 k; @
                /* Program the source and dest addresses for master DMA channel */( H/ y' z6 Q- S$ {
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);/ B4 x! M& u/ E+ O
                paramSet.destAddr   = (uint32_t)(ping_buffer);2 g# K# |$ s2 E# i3 u! o& L. W# E

# E+ m$ [7 N; y, P3 y. D5 ?5 L                /* Write to the master DMA channel first. */  B& w3 A* g. s/ @3 n
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
% Z, C  j8 q3 n' C! J    }      
* ^- _: J2 ?/ M4 \/ J7 @
& p7 m: x$ v0 q+ E" g" |. M        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);! }% m- p& m1 o& _! ?( N
        + h$ @8 R+ \; |* ~0 g
    if(result == EDMA3_DRV_SOK)
( l# `7 C" t/ i+ r    {. D0 b2 {9 _, y! w
            print2arm("edma3 driver init success.",0);
7 e2 l7 ~8 K! @    } 4 @' k9 Y; d5 e3 k. ?
}/ V0 W0 ?$ q. s& T3 x# G

6 G% m, w* h) k5 h, Z
1 B# ~) E: _+ G$ e6 C" ^2 ~) l; REDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
) g2 E' z" {) C" |0 u
/ C$ U% |5 g' p: O  Y' C/ G7 K# z' I" w9 B  l* 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:473 C, \4 L- t$ b
每次DMA传输完成后都要再次使能传输

, O+ H* J7 i* T, S8 n, _$ l原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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