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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
% Q) q9 X8 v, U8 d" G#define  PING_PONG_ACNT          1( _7 v0 f: @3 a5 C
#define  PING_PONG_BCNT          8*32*40 ; B$ _$ a- Y8 M# g- |- P9 T
//#define  PING_PONG_BCNT       1
! o3 B! E) \" N0 }3 O: z#define  PING_PONG_CCNT          1
/ Z. Y1 B  x) e- @' [6 x#define  MCASP_BASEADDR          0x01D00000$ I2 `5 N/ @$ N( x3 V
#define  Mcasp_RXEVENTQUE        (0u)- s5 x* t! H, r1 `2 t5 i" |& Z

9 ]- O. D5 i7 X8 F; i& e/* OPT Field specific defines */7 r. D2 s* ~/ H: P; a) y
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)( x; Q# c$ a; y
#define OPT_TCC_MASK                        (0x0003F000u), ^/ l( J  \3 S2 ?
#define OPT_TCC_SHIFT                       (0x0000000Cu)
7 [! ?4 f3 {# {  l7 n1 \- m#define OPT_ITCINTEN_SHIFT                  (0x00000015u)! D/ N% Z' U# T6 T% |
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
% b# I# k, |& h8 K: S7 L
0 {  W+ x2 G$ D0 Schar ping_buffer[PING_PONG_BCNT];' ~* w* F! a  Z4 \1 b4 T8 m
char pong_buffer[PING_PONG_BCNT];4 k# i) l5 v$ R  p# G

! M9 |3 b5 B0 z- B# _% @( g& I

; c' X2 Z  \! Z/ r5 m# o
; ]: d1 j2 h% `# [7 G# dstatic void ys_edma3_init()5 ^8 `3 w+ r! D5 N
{
5 Y% G" W8 K  y' A6 ?; U        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};: L& c5 {% {7 ^, m4 ^( }8 }- ?  N6 L
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
& P( _' @  R  G7 T1 f        EDMA3_DRV_Handle hEdma;
& C4 J) s( T: }2 u    uint32_t chId   = 0;- {- y2 J4 g; q2 ^! w. N4 d
    uint32_t tcc    = 0;2 G/ R7 G, Y2 v8 m  e$ l
' u- A( \/ d1 g# ~; q) j
    print2arm("edma3 driver init...",0);, B! j, [4 a$ k1 @, a3 @6 e

$ T5 V% f& J) T        hEdma = edma3init(0,&result);
2 ]$ ~6 j1 Y1 j9 e4 ^        if(hEdma)
! a8 w" B2 @4 m        {
2 J. l* `" E+ W$ K6 }1 I, O                print2arm("edma3init() Passed.",0);
' Z1 C1 C* m' G3 L" s  ]        }& y, N5 T/ K+ {) V, G% w: i# j
        else
6 K6 o2 V. e2 `6 V        {
( S& w" M: d5 a5 b                print2arm("edma3init() Failed.",0);& \4 w; u7 \. C0 I& M' i, e
        }0 q7 T9 P8 _* ~/ A* B0 v7 T
        3 [% o4 Q/ L2 f6 d5 x8 ?$ M) R$ x
        if (result == EDMA3_DRV_SOK)
* i; b! O$ W% E% g9 h    {
5 f$ N$ y! N$ d4 p. q6 e1 _8 r                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,! x6 r! Q& C& `0 _* `# x
                                                       (EDMA3_RM_EventQueue)0,+ l& g7 s* }' q/ n( i1 U, }' o) Y
                                                            &edma3_isr, NULL);/ l5 }- n5 M! j+ y! \7 h
    }
' c' n2 i0 |) C1 _- l1 ^       
: S- m1 V) X' @# v# o* h        if(result == EDMA3_DRV_SOK)) [) E% T* i- o* F
        {
  |0 a9 k8 z, v: q" \% E4 G                paramSet.srcBIdx    = 0;
6 H* s+ o) Z) @; o                paramSet.destBIdx   = 1;& Y3 [  U+ H% v" m( e$ u* h& O4 t
                paramSet.srcCIdx    = 0;8 j8 s# Z7 F2 f' t( ?% d
                paramSet.destCIdx   = 0;
4 ]0 h# c" s0 d7 a, t3 L4 F  P                paramSet.aCnt       = PING_PONG_ACNT;& q1 V4 l! U3 q( j* ?$ I
                paramSet.bCnt       = PING_PONG_BCNT;! A$ q0 N4 A) P1 ?& E; m" X
                paramSet.cCnt       = PING_PONG_CCNT;) h* [  T% F7 S  I! k
               
/ T6 U: j7 g2 Q( F" }, C                /* For AB-synchronized transfers, BCNTRLD is not used. */
/ S3 H# n6 c, }/ m                paramSet.bCntReload = PING_PONG_BCNT;
% l. V( l  h4 B% g$ B7 Q; q
, ]  R; B4 c8 k& f% x3 \                /* Src in constant mode Dest in INCR modes */
& o1 T% R% j. o8 D% R( Q                paramSet.opt &= 0xFFFFFFFDu;
& t* P# c6 S8 ^# A' @6 f6 p1 [                //paramSet.opt &= 0xFFFFFFFCu;  J/ ?  Q6 z3 J# j2 H* T3 \. V3 `' a0 p
                " p$ A) k6 c$ h$ P1 _! t
                /* Program the TCC */+ p7 ^( b- X; n  E' t$ m9 ~! @
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);4 ]. v  X7 ^. h, [+ {# R: }8 R
9 o' B& V9 F* B$ d3 A) \
                /* Enable Intermediate & Final transfer completion interrupt */
$ Y9 s1 h+ c$ Y6 K' S                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);1 Y# n1 D0 w& ^8 R. g
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);, i0 l' w2 X5 Y1 P: B- h
4 v! T' U2 W  P0 U: g" s! e4 g
                /* AB Sync Transfer Mode */
: i  F7 I1 I& M" t$ L) Z: N                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);& i- W, J% [! n) @8 I
               
/ {  b! K) I5 j% b. i                /* Program the source and dest addresses for master DMA channel */
& Q( i1 z1 H% K2 {, O% o                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
/ i. P8 g+ `, T' N  G                paramSet.destAddr   = (uint32_t)(ping_buffer);! `, I( u6 j  {5 J& U! i/ y, R. D! b* ?
6 i, G  j7 c) N- C5 z
                /* Write to the master DMA channel first. */) b: l- u$ Q; j! V3 ?
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);  d" I- U5 a$ [! Z) T
    }       ! n7 ?' C* h6 ~
& R* z# N4 V) y9 I0 z
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
0 ^4 T- k6 t2 @5 R/ J% {/ T: V- l        - E1 y& g4 V7 w% W. f- V
    if(result == EDMA3_DRV_SOK) 9 f9 X+ m5 _" g* {) s6 T% Z/ a
    {5 L; h- j0 D+ `5 C, M7 [( w, ?
            print2arm("edma3 driver init success.",0);
0 _3 {$ R/ W8 Q' R7 Y8 ~! P    }
7 d! ?0 H- {6 J2 \}6 a$ F3 k8 z4 v% S
% ~, k1 L/ Y! K2 B. s5 e/ c
* E3 J- S% _! B- H1 A
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
* _0 Q5 k% r7 O2 \0 G: @2 {# e7 [
( g; ]2 \  N4 P2 _. S7 C  j* @5 |% Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
板凳
 楼主| 发表于 2015-4-29 23:25:56 | 只看该作者
Lewis 发表于 2015-4-24 10:47- @: N, _4 o* Z5 Z
每次DMA传输完成后都要再次使能传输

# @4 y) s# ~/ @1 n- P) p原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-23 01:03 , Processed in 0.041791 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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