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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:- A- ^* ]% {6 w* H+ ^( C$ v
#define  PING_PONG_ACNT          1% b& V' V0 N$ V7 B/ n# d; X$ d+ C* T
#define  PING_PONG_BCNT          8*32*40 & l, i  N. F0 P8 Q+ J% S4 `. q
//#define  PING_PONG_BCNT       1
  ~) D( G1 ~" L. |" O9 d( O  l( x#define  PING_PONG_CCNT          1
9 U4 {6 r6 o8 U. ^$ |( t#define  MCASP_BASEADDR          0x01D000009 c2 K0 a) U. H! H  r
#define  Mcasp_RXEVENTQUE        (0u)
" l$ H. m' [- Q9 u9 u2 K/ q& D# {( q: w( \; U7 _1 w
/* OPT Field specific defines */
1 W6 J# g/ w: H: S! q#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
' q9 q" S% V: N' X7 ^$ u#define OPT_TCC_MASK                        (0x0003F000u)
/ c7 `) p- D# k" y! {#define OPT_TCC_SHIFT                       (0x0000000Cu)1 Q5 C5 A5 f4 W2 z) E* J) Q
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
  c6 z2 g0 [+ |7 M# o+ z#define OPT_TCINTEN_SHIFT                   (0x00000014u)- L+ ~  p' R' O/ V2 J

: a: Y$ ?/ x) Xchar ping_buffer[PING_PONG_BCNT];1 V  F) v, Q8 f
char pong_buffer[PING_PONG_BCNT];
6 N; \2 R& O2 X0 p; p; ^2 E, C
2 I$ X9 t3 s5 A$ [' r0 J) N% p; C2 @5 ^/ R  o

1 }7 O5 \( w7 S. e+ {* }! R6 {, Y! ^9 Q3 z2 q
static void ys_edma3_init()) ?2 \/ {8 A: v% p% g$ m
{
$ h9 I& K' s  P        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
5 l) r( X# I. G7 |7 \- K# e& _; E        EDMA3_DRV_Result result = EDMA3_DRV_SOK;9 `; I8 K! S: T7 y! M
        EDMA3_DRV_Handle hEdma;, ~5 D6 O, o4 s$ N, J
    uint32_t chId   = 0;
) }0 E- f; |  J, h' y, b    uint32_t tcc    = 0;* n. t# _& o- z4 j5 C
! E, j, i) k2 N/ I. p, N! l' Q& X) M
    print2arm("edma3 driver init...",0);' B. V2 U6 Y7 f! Q7 A" ^
# n3 @5 G/ M+ {, u3 L2 y3 T4 Z9 k/ `- S
        hEdma = edma3init(0,&result);
! o; i' \+ [# [& G% Q0 P        if(hEdma)
3 {# c' K" w  R* z        {1 _. x- D  l4 Q$ D
                print2arm("edma3init() Passed.",0);4 P  c+ F+ `. y  d% T$ e
        }) F& m; P( i1 N
        else
$ v! u( l  G' _0 g( v2 y8 b' C        {
  s# R3 _! t. E/ i9 |; E/ Z9 ^% M                print2arm("edma3init() Failed.",0);* ]4 g1 N+ D' ?1 r/ ^0 L( X
        }
0 R; T- b  E( x8 X  T, X          M# ^- ?% u) E7 |. A8 C! i
        if (result == EDMA3_DRV_SOK)
7 B8 h, m2 {/ w: A( Y! J5 _    {5 O2 Q! g/ |; ?, }1 q9 e( e
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,$ c; H& j/ ]) r. E
                                                       (EDMA3_RM_EventQueue)0,' ], Y& e/ f: u7 K' U3 b
                                                            &edma3_isr, NULL);
) _% c) b  Y7 F/ `    }
2 r# G" P% m9 H0 r& R$ v! l  X       
/ j8 T( O) P5 i, j% @8 G        if(result == EDMA3_DRV_SOK)1 D. x, u% k/ X7 b8 a0 q+ n
        {2 m8 ?: x" P/ d" r( z3 `
                paramSet.srcBIdx    = 0;
; X& g# {* T" `3 O: D7 x                paramSet.destBIdx   = 1;
. N3 a& h% W. p% y4 h' j                paramSet.srcCIdx    = 0;$ D( X1 {4 V3 i3 a' ?: U7 W; p
                paramSet.destCIdx   = 0;* B2 F/ w% A5 ^  W! L* q
                paramSet.aCnt       = PING_PONG_ACNT;8 W$ ?, n' W4 {1 V" m4 `8 ^
                paramSet.bCnt       = PING_PONG_BCNT;
% N- \( p& o1 S2 s! J                paramSet.cCnt       = PING_PONG_CCNT;' ?: k, N% l$ W: a" c
               
7 f3 U* |7 ?! Y/ J                /* For AB-synchronized transfers, BCNTRLD is not used. */
- ]2 ^5 k- w' f' }                paramSet.bCntReload = PING_PONG_BCNT;
5 |; F; I' O  ?$ D* L  h
, r: z% y1 ~: z! H$ K                /* Src in constant mode Dest in INCR modes */1 B7 Y( s- I8 n+ H0 B7 M
                paramSet.opt &= 0xFFFFFFFDu;
1 U/ D0 i& j. ^                //paramSet.opt &= 0xFFFFFFFCu;
' X! ?0 g8 h) o2 z* \: k% y: v                % _/ r" A9 m5 |! l2 B; i, _. r8 t6 n
                /* Program the TCC */: s; y" ^; `- C3 z$ V! s1 N
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
/ i' @  c/ j4 A" R$ p4 b1 I( q3 C/ s& ~* o
                /* Enable Intermediate & Final transfer completion interrupt */: a: y$ |4 Q6 Q! A: S( E0 b3 A
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
, C5 w8 W/ F- M, u# D3 S8 d" y                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
5 A" ]2 K7 ]3 T5 w" F0 X8 U4 w9 m
1 |5 J7 N8 I) e( g4 ^                /* AB Sync Transfer Mode */
' g5 _6 V3 Z( A$ \$ R/ Y                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
9 d; Q' S/ N% [) h# {6 b               
7 G; O% y7 R! l7 b                /* Program the source and dest addresses for master DMA channel */
3 `( M) k# d, w6 [                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
1 u" J/ _2 G7 A1 I# o/ ~                paramSet.destAddr   = (uint32_t)(ping_buffer);
2 H: P$ M( b, f2 l5 K
; k! _' Z0 h" T% p/ @; _/ n                /* Write to the master DMA channel first. */, }  O- E2 l  ?2 W) ^4 |
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);' J9 c% c3 u5 _3 ^# O! X
    }      
. I) |. B- G$ R  [& g( Y, N6 l& J  w; v! ^% S9 n! d
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);, I+ K; i3 L- f
       
( N. ^: t8 _- f' u, Q/ o# h* |    if(result == EDMA3_DRV_SOK) 7 O" W  T# r6 Z1 \- Q
    {
4 k4 R# r, p  Y% ], ^            print2arm("edma3 driver init success.",0);4 ?/ V9 u( q0 p, [7 R4 M
    }
7 z) X" ^  j3 n) H, K}
% L2 V" R# S4 n. T" c* H1 T! m  q8 \$ V' z. B' E

/ }4 v9 ]8 K" H. k/ VEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
3 l6 X8 e8 K6 j/ x; g- s" p- x- d4 E. {1 V- c, C- N3 E
3 {( N7 _: \' P& m' @) i3 W
分享到:  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
6 _/ q; ?3 r, A: I; E每次DMA传输完成后都要再次使能传输

* `' A7 d# D( }( _5 j2 F+ e1 Z8 R原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-27 16:13 , Processed in 0.041810 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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