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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:6 C- w7 E/ I, g2 }+ Q
#define  PING_PONG_ACNT          1
) E+ h- r2 Y( _6 H& |& Y( ?#define  PING_PONG_BCNT          8*32*40
3 c3 o/ V1 s; H//#define  PING_PONG_BCNT       1
8 X4 o2 z3 Z7 }5 ^4 Y% P& Z* ^#define  PING_PONG_CCNT          1
7 G0 ~) ^, X, n+ H, h7 U% |2 }; q* @#define  MCASP_BASEADDR          0x01D00000
" v. z2 r% ?# h0 X3 a1 X#define  Mcasp_RXEVENTQUE        (0u)
# p8 C# s7 E& ^1 p! W4 l& M* Y9 S4 h  t5 c+ ^6 U! V9 w6 z! {
/* OPT Field specific defines */1 t. J. \/ \0 k
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
& Q, _/ E" o. M+ D#define OPT_TCC_MASK                        (0x0003F000u)8 T( S, O2 Y2 U9 h9 U% N& y0 P
#define OPT_TCC_SHIFT                       (0x0000000Cu)
6 t% U" j* b4 Y#define OPT_ITCINTEN_SHIFT                  (0x00000015u)  U6 e( r; v9 T& H
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
$ `8 z; t1 M) E9 D# {; Z' A4 n& X1 z7 A0 I
char ping_buffer[PING_PONG_BCNT];
6 S2 h( K' u6 rchar pong_buffer[PING_PONG_BCNT];
  k: C# R- a0 Z) n! j% S# y
& J& K; e. B! N8 ]0 q
4 ~3 |7 w: h4 u9 _8 y
, O" x8 b0 z( i& s# ]; I/ d1 k( }  k/ h) f
static void ys_edma3_init()1 v: D4 k9 S# v; S- D8 W
{
- R9 I& b9 p. t. v- Y7 c        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};8 Y9 |9 {: }" G) A! {
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
3 g' L# |0 O6 D2 ?; `        EDMA3_DRV_Handle hEdma;
9 V  `; ]# Z9 I0 A8 a    uint32_t chId   = 0;
7 U: B" G; b3 \5 u3 w; |    uint32_t tcc    = 0;) {( Q1 X; O/ H- j

+ S/ ^2 g* M. m4 q: `& l9 [1 \    print2arm("edma3 driver init...",0);6 f- U) L- p3 p7 j9 G- M  C
/ E  |/ p4 E! p  ]
        hEdma = edma3init(0,&result);
! Y6 ^, W, ~  K2 _9 D        if(hEdma)$ Y' w1 f6 I' ^9 c* q! d
        {) M1 _- y0 S' U. l9 [
                print2arm("edma3init() Passed.",0);
6 f. }" r1 u3 b% Z, p! Y! g        }
0 t; d/ J* J# X* m        else
; f" q2 }2 {/ f1 ]& U/ T( x- G        {
' @  u5 _0 [0 F3 ?; s3 [2 }% C                print2arm("edma3init() Failed.",0);
8 M0 s# Y1 T- m9 e2 A8 Z  ?( m        }
. f1 I' M8 ]* g8 T$ n) @3 L       
0 j+ J1 z0 `! P1 \' _6 h6 ~7 l        if (result == EDMA3_DRV_SOK)
- v; X/ ?! D! L! e' [- z# T# ~    {
& b3 }  t0 t0 j! j2 l                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
* o+ d, e# F; T* D                                                       (EDMA3_RM_EventQueue)0,
+ {' f2 U+ ~0 X! x& }" d. q                                                            &edma3_isr, NULL);
/ l( X" g! B* y8 t" h0 G    }
+ U1 t! L  ?% o0 @6 }1 S, m3 d, o       
% _/ h9 \+ S- Q        if(result == EDMA3_DRV_SOK)
% @! G* i  V0 H9 k$ ]: W' l: l6 H% Y        {+ ]% n$ N3 A2 _. N) y  z( I9 U
                paramSet.srcBIdx    = 0;
# p& L. ~( D8 y                paramSet.destBIdx   = 1;* g( r3 s& n3 o5 y
                paramSet.srcCIdx    = 0;" I1 {  q% i. |" s5 }& a
                paramSet.destCIdx   = 0;# \  w( v. u* r7 s! C% ~# l0 p. d
                paramSet.aCnt       = PING_PONG_ACNT;
# ^& L! F! S: D5 S1 [4 ~* l  }                paramSet.bCnt       = PING_PONG_BCNT;4 A: M9 y8 j' ]) P" l: F7 [
                paramSet.cCnt       = PING_PONG_CCNT;
9 _! j9 S# ^- U: h                ' v9 e! N) s( t7 r& }* p% D
                /* For AB-synchronized transfers, BCNTRLD is not used. */
8 H, g* j7 |! @) a% C8 D                paramSet.bCntReload = PING_PONG_BCNT;6 F1 i- o' ]& B5 I, p$ V/ ]

0 w! K1 F. ~8 ?  n! F" D+ H, d, I+ N                /* Src in constant mode Dest in INCR modes */
8 T( H& j6 f' k3 m5 I                paramSet.opt &= 0xFFFFFFFDu;
' q  a7 A) D; ^% j                //paramSet.opt &= 0xFFFFFFFCu;3 ]" W: `: V6 a4 o5 P
               
6 g$ {8 J+ L+ w; Q                /* Program the TCC */
! |) G) r8 x! z+ {3 D                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);( N8 j6 {/ i' C" ?0 O" r7 h5 ]  F3 s

( t* u( e7 m7 |                /* Enable Intermediate & Final transfer completion interrupt */# h6 z5 P) B( Y9 Z- A
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
, m# j8 l' g4 [* h7 J                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
5 \( X' D/ A& a) C' K% Q5 q( }  h" E
0 L& O$ e/ {* b% Z; z! v6 ~# G                /* AB Sync Transfer Mode */
2 \6 g# a1 K" D6 n                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
' S$ d& M; @9 f               
5 r+ g3 C$ q- r! o; V9 d( d                /* Program the source and dest addresses for master DMA channel */  i0 F, M  V/ ^3 B
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);7 T: j; w3 o- Z2 u) U
                paramSet.destAddr   = (uint32_t)(ping_buffer);
1 @" P, o: H; n$ l4 m
2 l+ x, b/ B$ ~6 E  s, y                /* Write to the master DMA channel first. */
7 T& q) V; M/ {/ x" L# u) v( A                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);" P4 j4 i/ s$ X& M
    }      
: L8 ~, ]( Y8 _- Q5 m1 ]
; i9 A; X. r1 _6 B7 m4 ^        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
7 g# l0 ^) [7 Y# c5 S' K; X1 U       
7 y3 x; C) U. i) l8 x+ V1 e    if(result == EDMA3_DRV_SOK)
& S! p# m$ \8 z! _/ W. Q/ `    {3 [4 W8 q& z- y( F
            print2arm("edma3 driver init success.",0);
" F3 W4 P( T& w8 {+ W    }
5 L3 r4 ]9 J, e* b8 G}7 Y) E* S6 e3 t
) y" h' ^5 u- k! A0 @9 V/ t
+ H6 J3 j+ H& f+ n* Z" N* n0 o
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
: }$ }1 i: {$ }4 U
! T7 a+ h; T! J: ?: b; _, m; G( Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
板凳
 楼主| 发表于 2015-4-29 23:25:56 | 只看该作者
Lewis 发表于 2015-4-24 10:47
& r2 D$ d: n3 S' R+ J每次DMA传输完成后都要再次使能传输
4 e7 i) ?: E7 p. g* Q
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-14 08:41 , Processed in 0.044614 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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