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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
% E8 V0 N. t* X. l' I. ?7 v#define  PING_PONG_ACNT          1. ~5 G( W* E, Q& U. @5 I
#define  PING_PONG_BCNT          8*32*40 4 r2 Q; f$ S0 [& V% Z5 Y% w0 D
//#define  PING_PONG_BCNT       1
) f! N* D7 e7 G8 O4 N. o#define  PING_PONG_CCNT          1
  S, ?$ q% n" v# ?. O9 b#define  MCASP_BASEADDR          0x01D00000' h' O8 s# A2 R: L1 I% U" G
#define  Mcasp_RXEVENTQUE        (0u)
' [3 W; I; Q8 v- i  H% t! n
+ f, H. |) j& l9 U  D! V/* OPT Field specific defines */1 w% c: A/ u$ N- g7 n/ t
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
- S) U0 i+ g6 }6 _8 f#define OPT_TCC_MASK                        (0x0003F000u)
; H9 A1 B. u: [: M% k#define OPT_TCC_SHIFT                       (0x0000000Cu)8 _; k& \. W& j6 u( I- {
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)- A7 ~! Q: ^; n' _# {$ k) k8 p. @
#define OPT_TCINTEN_SHIFT                   (0x00000014u)9 x3 Q# U7 P6 T  Z/ x
' o( I% u5 V% O
char ping_buffer[PING_PONG_BCNT];5 j5 ~: I/ f- ?" |0 C
char pong_buffer[PING_PONG_BCNT];
: R; Z$ O; O9 H8 I
5 H) ~: ^( a& W6 J3 A8 z' X0 R/ X) ]9 |/ J# M9 {
- @1 L4 W' a. p" B
# V  C( r! W, @4 I
static void ys_edma3_init()
$ L1 U( G( ]+ p9 J- S. d" ]* o$ y{! R4 {- w/ n( O" o! c* _5 K4 k
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
( @% p$ @; w3 U. Y  S, B" F        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
. S4 f8 K2 |6 \* T2 l        EDMA3_DRV_Handle hEdma;$ U' M! A" ?4 J1 t8 L
    uint32_t chId   = 0;
7 _( Y# I/ Z8 O+ e! H) f( Y    uint32_t tcc    = 0;
7 H, N5 s; _% G5 E0 i) M$ G; v5 V* V( u/ k( L8 M3 e1 C
    print2arm("edma3 driver init...",0);5 Z2 U! ], V0 _8 M6 M4 d$ h% ]

% D5 ^3 \+ b6 J. Q5 U0 f6 p        hEdma = edma3init(0,&result);) L8 t2 ~* z, T
        if(hEdma)# C$ _/ v% O3 ?
        {' r9 o9 Y  i- g! l% D1 _& F1 x* @  J
                print2arm("edma3init() Passed.",0);
: \# X; m$ R% R# P5 P        }8 O; D  w1 j& q) {+ ~  R) M6 E
        else
/ F: o; C( X' A! `0 R        {
3 G& ~# K) A6 F1 T, u# a* y* _                print2arm("edma3init() Failed.",0);9 a+ a0 W! w) K) ?* E
        }# o0 c. h: k4 f+ H+ N
        ( i9 o3 y! u# W# R8 T) C
        if (result == EDMA3_DRV_SOK)
8 [* x% t  L, X9 Y* }2 B    {
' J5 }2 Q. \" P" o/ `% n* N                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
+ `9 X+ u1 }$ {) K( ]! S                                                       (EDMA3_RM_EventQueue)0,' [6 z) B$ v3 @4 r7 o
                                                            &edma3_isr, NULL);
$ G1 u& w/ W% q: G1 B! R$ g! ?7 f    }
+ @$ u. e. Y! s9 j       
+ z2 j) E7 K% x3 M2 a        if(result == EDMA3_DRV_SOK)
0 ]' |& u) G5 k        {7 E; s( G8 _$ h3 Y0 k# s
                paramSet.srcBIdx    = 0;1 d3 a' c4 u! i9 l9 {0 [
                paramSet.destBIdx   = 1;* C! k3 W0 K$ c; t# E
                paramSet.srcCIdx    = 0;+ U6 V2 }' o* u1 w
                paramSet.destCIdx   = 0;
5 c& g- t# `8 T( `# {+ q% x, d; ]; [                paramSet.aCnt       = PING_PONG_ACNT;
1 K$ {/ J4 H3 F! x- d                paramSet.bCnt       = PING_PONG_BCNT;
4 @( z2 x8 Q; o: s8 X, V- ^% i                paramSet.cCnt       = PING_PONG_CCNT;
& f, [4 \; ~' a, ?               
+ p$ L! A. |" Z2 I. N; L6 e% o. Y                /* For AB-synchronized transfers, BCNTRLD is not used. */
2 D+ ]$ {. h+ _% e4 k. B                paramSet.bCntReload = PING_PONG_BCNT;
0 u3 }9 ^* O6 k" T4 F; F9 ?! W( ~$ h5 I
                /* Src in constant mode Dest in INCR modes */  N1 Y( {. @, _3 ]: Z4 b
                paramSet.opt &= 0xFFFFFFFDu;
1 |4 Y) N: H3 O7 Z+ H$ K8 V                //paramSet.opt &= 0xFFFFFFFCu;
: M. i! J7 ]- }! a0 ]               
/ j/ U2 J! Y" `+ M' |2 z1 o' q8 k                /* Program the TCC */+ c$ w% U, G/ B$ x1 y+ S
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);+ u1 C- L5 u) j/ K

7 Z7 a  A5 ~" a4 q  V* X                /* Enable Intermediate & Final transfer completion interrupt */. v- J# C5 P+ S$ f3 c3 b. T
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);5 G& g4 Q9 f- e7 z
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
$ X, d4 `' R1 Q0 w" x& q5 s+ u9 u6 r+ N  P: W& b  x8 ^3 t
                /* AB Sync Transfer Mode */
! F7 s3 |% C8 q* [2 l  K5 i* g                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
3 O% }$ r5 E+ g8 j( _' O                7 w, G( i7 G" j% s! Y
                /* Program the source and dest addresses for master DMA channel */: s; }* f, ?6 c0 b1 n
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
0 L% Z$ y/ {7 x0 F  J                paramSet.destAddr   = (uint32_t)(ping_buffer);
  s% V9 u. Z2 \, Y
( ]* A+ w$ j% P) S) x                /* Write to the master DMA channel first. */# B9 l2 ]4 _0 \7 m
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);0 N" }% A+ ]8 F6 y( N
    }      
$ s% n* {2 _$ j1 k
" d* i/ B  S- x- {5 ]        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
8 J$ M  K+ o9 P; X2 ]" x        - y, f& v9 _  B: G' a6 N: X5 D: T1 H
    if(result == EDMA3_DRV_SOK) # B" D$ ?& ~5 q4 C. e$ m
    {
( @( g: u% F1 C4 D1 {2 M# D. a            print2arm("edma3 driver init success.",0);; W! M2 f8 S; {' X5 Y  W1 B7 U
    }
' q$ t' s7 m$ ?}
0 {4 A9 j. L! F% G  O" E. _
3 R; i$ y" ]! u
3 }- _7 R9 K$ c+ ]# S, b( VEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
7 y+ T9 B* S! M. }
3 Q9 ^- G, J- K
8 W" i: n: b' _0 f$ @
分享到:  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
5 n  c2 S1 L0 N& r( x/ _, M1 ~每次DMA传输完成后都要再次使能传输

6 Z# f0 s1 m9 A1 |' F原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-23 14:22 , Processed in 0.064770 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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