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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
. }  m4 b' N! \, H/ ^#define  PING_PONG_ACNT          1
9 g* ^+ j( D/ k6 N9 l#define  PING_PONG_BCNT          8*32*40
7 r% Y% f# x7 K7 m4 h' K//#define  PING_PONG_BCNT       1
9 @, a/ K. E: a4 [1 m+ }& @#define  PING_PONG_CCNT          1
$ I4 @- i) F9 v! B0 M  s#define  MCASP_BASEADDR          0x01D00000
! A3 p6 J! r  v6 w. d#define  Mcasp_RXEVENTQUE        (0u)
& f! o; l, C9 C! W1 Z: ?0 c
. u  f) @; i" ?) g* g7 V; i/* OPT Field specific defines */
5 Y# N2 ~/ h6 x#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
  v3 a, J7 b# }8 q+ A4 w#define OPT_TCC_MASK                        (0x0003F000u)
9 W$ ^4 `# b5 Z& N* L#define OPT_TCC_SHIFT                       (0x0000000Cu)
) G1 V' \9 i! N#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
, c* s, b+ B8 Y9 T3 j#define OPT_TCINTEN_SHIFT                   (0x00000014u)7 n1 H$ _: f' U$ z: e

' n/ C9 {  u' A) ^$ @# ~/ Ochar ping_buffer[PING_PONG_BCNT];
  _6 X# j; K( I) y- Y' D1 ichar pong_buffer[PING_PONG_BCNT];8 u0 J! V; B) H# ^+ u/ C5 p9 _

/ }. @- p, @$ E
; v5 a% _/ {6 z8 R
# b  Z8 s1 }* T" f7 f, o6 `& r. O
4 D1 o) n9 }. z) ~9 E( Pstatic void ys_edma3_init()
! @# a" l' ?$ Q5 V{
+ y. N3 R6 M' L1 e! S        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};& o4 ~9 V2 J' o0 ]3 n6 l% Y
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
: G: w5 y) {. W+ k. O        EDMA3_DRV_Handle hEdma;
8 \9 m) T8 w% |- x- e: I    uint32_t chId   = 0;
- U0 V% ~5 f! f! P8 v  _8 N    uint32_t tcc    = 0;
' o1 n$ t. k3 V: d3 l
- y4 F. ]0 @1 B9 j" u, C& D5 R    print2arm("edma3 driver init...",0);
0 T  L6 x& w+ h' l$ J
4 @: W8 {4 T1 U6 A+ m        hEdma = edma3init(0,&result);9 l& W4 i, h( l$ c2 H
        if(hEdma)
6 w* S* v( D( y        {& ~& v* ^* K  s+ X  O3 j
                print2arm("edma3init() Passed.",0);
' `1 C) b, P' m2 N        }
4 G0 _  \* N8 }& M; R: T- g2 T( V        else
  d* L/ V0 @! L8 O* X5 w        {
" S- x* s+ o2 s, ?% W5 X                print2arm("edma3init() Failed.",0);
( q! _, d4 M0 x2 q        }3 d+ b/ ~  s( u! F5 T7 C" E8 G) M0 u
       
$ N% @4 K2 g* p% V  \( a        if (result == EDMA3_DRV_SOK)
8 c! D  ^4 @. m$ X& h( T0 Y! S    {
. {0 s  Y3 G* a                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,( W, @8 h; F, L& H/ d- s) I
                                                       (EDMA3_RM_EventQueue)0,
: B# U9 u) D4 ~8 `( I- w                                                            &edma3_isr, NULL);6 v, N! o1 J! c0 ]8 L
    }
6 z* I+ b; }+ n  ]2 v9 a- _4 |        7 N" |: Q: Y0 {3 q
        if(result == EDMA3_DRV_SOK)5 d- E) l$ ~, F* h' m
        {* l3 H# c" g5 @2 E# q. B$ K
                paramSet.srcBIdx    = 0;- d* ^$ R) g3 z4 L; K
                paramSet.destBIdx   = 1;
3 p$ [1 d8 t: x2 [                paramSet.srcCIdx    = 0;
- w: `! p) i* j" J1 L; r                paramSet.destCIdx   = 0;
# `0 V) T& [1 ]                paramSet.aCnt       = PING_PONG_ACNT;
  m2 ?# d! S5 R" b1 l                paramSet.bCnt       = PING_PONG_BCNT;, {8 _( g3 j* A$ u) ^
                paramSet.cCnt       = PING_PONG_CCNT;
  b4 R7 h* E( e& B# z                / v' t! s' h+ ~  B) ?8 _: D" `
                /* For AB-synchronized transfers, BCNTRLD is not used. */
5 O7 z9 K9 X3 Y2 e" h  T                paramSet.bCntReload = PING_PONG_BCNT;
/ E: O  |1 L/ o* @" F
# F- V0 z% y: N9 }- ~& H                /* Src in constant mode Dest in INCR modes */7 q  m9 J3 w% _+ X! u
                paramSet.opt &= 0xFFFFFFFDu;
( ]9 x4 Z4 w! q* e  p5 C: w+ i                //paramSet.opt &= 0xFFFFFFFCu;
- V- N6 C) f$ p5 I4 {* s               
6 H+ y6 ?! w6 e8 Q1 i                /* Program the TCC */
: ~4 H) m# t* R1 u/ w                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
5 p  ~  F& g0 ~5 l& ?! X  b) ]
, A; T: Z0 A1 U, c/ y+ Y9 y& _9 }                /* Enable Intermediate & Final transfer completion interrupt */
0 B$ U5 ?8 j. z- X& N* {* c4 [                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
# o% Z- L5 h1 p& V                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);) k2 o8 ^9 Z9 S4 U5 K( h1 q2 k

6 J/ t* ?% I$ Y) t                /* AB Sync Transfer Mode */- ]  R& T3 J4 N2 \
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);& b; l2 `2 {8 ]# Y/ X
                ) y$ u9 Y) J/ @5 ~8 G$ l
                /* Program the source and dest addresses for master DMA channel */8 m$ t- j3 S8 m- ?  D1 ]0 v8 s
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
6 Y! W9 Q0 ^/ t                paramSet.destAddr   = (uint32_t)(ping_buffer);+ _# T4 J" D- J0 u3 U" a

" I5 D7 e, |% A3 v3 ?                /* Write to the master DMA channel first. */, `! m3 k9 _  b& t$ S3 K) m
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);2 G/ b, c) _$ U. U+ e
    }       ' }' h$ F  z0 ~( i) _6 E
% U5 z8 T- W! ]$ a# m
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
  P" U5 k( X3 Q        ! d6 O3 i0 {( X# V" R
    if(result == EDMA3_DRV_SOK)
( K2 M. _+ N% L" v    {6 `! x- O. [1 h
            print2arm("edma3 driver init success.",0);
7 D" ]: `4 Z- B% `: Z' H( `5 T. k, X    } ; Y  r# [7 [0 ^6 F$ j  T0 C
}
$ s" b* J# ^& M% z
1 H# K4 D8 N: ~" ?& s3 Y7 O; u. o2 r# z! o: x
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
3 G# E2 Z" p9 d7 g. I" w3 u
* P1 }- {2 Q# [7 Y) y
7 G  ?' P8 K, Q0 J9 o$ H9 Q
分享到:  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:474 x+ x) A$ U2 s% W7 P+ L: C
每次DMA传输完成后都要再次使能传输
4 M3 t; P) D0 y
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-3 16:19 , Processed in 0.045671 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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