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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:( D# d( Z. n5 U! ~
#define  PING_PONG_ACNT          18 J4 z0 v7 o7 h2 a# J
#define  PING_PONG_BCNT          8*32*40 # ]$ \" \7 r* f  Y
//#define  PING_PONG_BCNT       1 * {  X( a1 P, h
#define  PING_PONG_CCNT          1, d& e# P4 A3 [
#define  MCASP_BASEADDR          0x01D000008 a6 f) x. l% d6 ?- p" {: y
#define  Mcasp_RXEVENTQUE        (0u)# n2 F6 |" r" B1 e8 n6 l* h

  \1 m0 A1 v, a; Q- e9 Z/* OPT Field specific defines */
0 i) d9 d2 Z6 [$ d#define OPT_SYNCDIM_SHIFT                   (0x00000002u)6 i: M5 m# e' }. R$ u3 l
#define OPT_TCC_MASK                        (0x0003F000u)
4 j1 L7 y0 A! L' y9 H/ h# I#define OPT_TCC_SHIFT                       (0x0000000Cu)- |' Q7 Q0 U5 ]. @! h7 B4 }5 M$ a) @
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
% \% t4 L) o- U: N' L8 c. f#define OPT_TCINTEN_SHIFT                   (0x00000014u)7 \) [* \7 z/ N, q' m

6 L* J8 r: |3 m! rchar ping_buffer[PING_PONG_BCNT];* ?. Q; h( X# |4 M4 U  ^6 w7 v
char pong_buffer[PING_PONG_BCNT];
( v  s9 W8 ~* X9 N$ M
% w4 }0 G! e. m$ c/ g: k: t
6 R& |- q3 y$ m2 A* Q$ \$ O: }
0 ]! }# ?2 R0 ]2 g* C. k
6 Q8 u8 p, S3 }& s- h0 W% Ustatic void ys_edma3_init()
/ a0 G( L2 U- K( R( y{
* |, D) M) C. F2 H+ P- M        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
. B  ~" w( o2 ^* A* ]+ D        EDMA3_DRV_Result result = EDMA3_DRV_SOK;7 N& A* e7 s& w0 d2 v; r! j
        EDMA3_DRV_Handle hEdma;7 l2 C% t0 z- a! Y8 u% }3 e* X
    uint32_t chId   = 0;& l8 G8 R" N4 T& G# B/ {
    uint32_t tcc    = 0;
% g5 ?0 W9 i, }  i" f) D6 d# u# x
    print2arm("edma3 driver init...",0);
9 [% K% W# y1 C
& b: O# a8 G1 o  g7 C5 e        hEdma = edma3init(0,&result);
  H( j) |$ B6 z" j4 N        if(hEdma)% e( E; H% `1 [! y! Q* `
        {, Q  l# d- g1 r3 T: C; u/ C- J. f
                print2arm("edma3init() Passed.",0);
/ w( a$ J; \/ U/ C% H( Q        }
9 A$ D- {3 ~, B7 J# F        else5 M- S( i0 `- X
        {# C# B* r1 y$ M7 W
                print2arm("edma3init() Failed.",0);" J, i  n, w' V, Y# P' }
        }: ]4 _" p: M' \" z0 E& R" _
       
& G+ H9 u7 h5 a3 P        if (result == EDMA3_DRV_SOK)
* d9 f* x* \$ I1 m    {) N( @+ k- t: @0 g' z
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
/ Q7 x, o' B; I# g! x$ Q, Y                                                       (EDMA3_RM_EventQueue)0,0 T' [  v( Y4 F
                                                            &edma3_isr, NULL);
5 G  L, |& t0 M! B( f! p    }
- n: B  ^2 [5 p2 Q       
' N5 U9 `4 l9 c: }. ~/ H4 q# l        if(result == EDMA3_DRV_SOK)
: B! N' k6 Q4 F0 ^        {
8 l4 q4 F6 a! n- L/ }; ^  F, R0 u. A                paramSet.srcBIdx    = 0;5 [9 ~/ B9 E; [# v2 s- I
                paramSet.destBIdx   = 1;
7 {6 n8 Q8 H# r7 [( O% d0 I                paramSet.srcCIdx    = 0;
( d: J2 p$ b0 R/ F- n# ^                paramSet.destCIdx   = 0;2 ]4 E& ?4 p# |! F
                paramSet.aCnt       = PING_PONG_ACNT;2 Q2 B* X; J$ H3 F- Y
                paramSet.bCnt       = PING_PONG_BCNT;# Z0 G2 r; |1 l6 Q
                paramSet.cCnt       = PING_PONG_CCNT;
  R5 s+ {/ r- ^  w% z/ q% z                % H$ K# }  j2 V
                /* For AB-synchronized transfers, BCNTRLD is not used. */) M, ]; v3 X# P
                paramSet.bCntReload = PING_PONG_BCNT;/ S8 H1 w" e' x1 C4 z# o- x
+ v' f' u/ ]) v9 U3 V6 k, g
                /* Src in constant mode Dest in INCR modes */) U6 K9 ?' A8 @/ _2 ?( Y
                paramSet.opt &= 0xFFFFFFFDu;
! s; C9 k8 G3 }% ^& Z                //paramSet.opt &= 0xFFFFFFFCu;
* ?- @: u. z  O5 R. s0 v4 S$ i                / v2 N2 a6 X& s6 b/ P" `9 @9 c
                /* Program the TCC */$ J$ T+ W2 z( Q$ g/ Z/ J8 q0 E
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
: h5 A: u9 J& f' o- X9 Q, l
# y  e- y4 l! |1 h6 l: ?' j: `' @                /* Enable Intermediate & Final transfer completion interrupt */
3 b1 ]! b3 f+ i                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);. N: \& d% D& I, B
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
$ {4 D7 h1 p: \, s
7 I! U) U+ U: l$ j                /* AB Sync Transfer Mode */+ m9 Q/ i* q7 o. |* a
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
3 v% n! Q6 M1 g               
5 x& u* w. l: v+ r$ C; P2 Q  \                /* Program the source and dest addresses for master DMA channel */1 A8 N: o6 X2 I) R
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);# t: B7 v0 Z& Q
                paramSet.destAddr   = (uint32_t)(ping_buffer);
% `& Q; K2 x3 Y7 S6 d9 S. \  M( R. q: `$ F5 R; U
                /* Write to the master DMA channel first. */
+ b* s4 p, m  x4 I                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);' R. @- \( v, q6 a$ \
    }       & n/ j* M! [- `" `! E( w

8 t1 L2 G1 }% P+ G& ~9 J        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
( v7 r5 s( L' X3 `) a: N; X       
" H8 `, T, o' Z. S' N) H    if(result == EDMA3_DRV_SOK) 4 W- c4 ]5 W' ?! G
    {- p; i4 I) P1 |% w3 Q5 k
            print2arm("edma3 driver init success.",0);
# x5 p5 h: A- h    }
1 b3 A* m5 t. S# b6 u4 f6 \3 M}% t5 A' |! A7 l: e( l4 `

, p" H9 d0 E  ?2 }- \+ e! w3 ~; c9 E: I! _1 b) Z3 b
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。- N: L8 Z  h# A! }

4 P1 L/ T; Z) E, s6 Z7 Q
5 \  Z' |2 i8 Z' j
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
板凳
 楼主| 发表于 2015-4-29 23:25:56 | 只看该作者
Lewis 发表于 2015-4-24 10:47
/ ~* X& s4 w! W每次DMA传输完成后都要再次使能传输
! g& j7 a4 M; j' N+ J& K& Q
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2015-4-24 10:47:00 | 只看该作者
每次DMA传输完成后都要再次使能传输
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-23 17:20 , Processed in 0.040716 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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