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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:& r" g# b8 l/ g8 I( o
#define  PING_PONG_ACNT          1
+ U, R1 E( d) }8 `, b( {- `#define  PING_PONG_BCNT          8*32*40
5 U% M; `- |0 P1 |//#define  PING_PONG_BCNT       1 ' N* V4 v! Y9 \3 O# Y" A% G
#define  PING_PONG_CCNT          1
* r7 b+ B% P/ f8 i#define  MCASP_BASEADDR          0x01D00000
( I. E& N% n* x( |+ o#define  Mcasp_RXEVENTQUE        (0u)4 s( M4 u; L3 ^6 a2 z# c

, |. i$ ~8 E/ F9 c) f/* OPT Field specific defines */
1 G+ {. A6 ~  p( f1 L#define OPT_SYNCDIM_SHIFT                   (0x00000002u)' [- T% Y: `6 ~0 E# n; @
#define OPT_TCC_MASK                        (0x0003F000u)
9 K4 `0 s6 \% N; H#define OPT_TCC_SHIFT                       (0x0000000Cu)8 o: e4 a% T0 N& I$ j9 ]  e
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)* b# U" i  e8 ~/ Q. M' ]
#define OPT_TCINTEN_SHIFT                   (0x00000014u)$ R$ r) B. x9 v. b0 a6 U

6 q) n. B) ]# |( i# E3 g* |char ping_buffer[PING_PONG_BCNT];
* _& I  ?9 R: J5 ~$ `( \* d% mchar pong_buffer[PING_PONG_BCNT];
' r1 y. ~( w% c6 U: n, A" n5 u
- K8 H* M3 {9 R1 a3 K- P" |3 m  ?9 O# _' o7 x& @& X

/ L, t. v; r% t$ A
% e1 y' G, U2 qstatic void ys_edma3_init()- o4 ]1 r# i0 S
{1 r+ @# @5 _  S: Q+ |
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};; b3 f$ J0 D6 z; |; i
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
, P5 ~: D6 w2 o0 N$ V& c3 z        EDMA3_DRV_Handle hEdma;, u" V8 @* X' F( ^0 P! [
    uint32_t chId   = 0;
5 X/ f' T, _% ~6 c# j  m6 ]    uint32_t tcc    = 0;
/ E! W+ [2 N5 C6 k# Q! I) p. o; V4 X1 b. d  [  g3 L: M$ [
    print2arm("edma3 driver init...",0);  }- g$ b# w* I* V
/ T) _; j" F* F' @. y  w
        hEdma = edma3init(0,&result);
+ x4 B$ ]' q6 J; q        if(hEdma)/ p* U$ N6 R7 A7 K, i
        {
. r9 ?6 }; m0 B0 |/ @7 q, t4 ^                print2arm("edma3init() Passed.",0);
: S5 e1 y2 h' D& {2 b' C& I- K        }2 {9 c( `  X) K, t  b
        else+ X' |& s) H7 R7 [9 n0 b5 u. R
        {
8 c9 @9 ^1 _2 C; W                print2arm("edma3init() Failed.",0);
' a# X1 W  F/ l$ p2 S9 J3 T7 p; x6 L' R        }+ {! f' r% }2 {- s9 ^' u* a. f
        ; h! X  Z3 J1 q' d; X# C
        if (result == EDMA3_DRV_SOK): W$ P9 z1 B& \. C. \; W, ^/ \
    {
& w, o, n! b+ d                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
+ m# y6 K/ H: j7 Y* r/ w* y) z' P                                                       (EDMA3_RM_EventQueue)0," ^+ v) a1 v/ k
                                                            &edma3_isr, NULL);
# h+ v( k- e) |    }
. V( o2 Y- g2 T       
. o% n9 a: S# v7 c# M' v* C/ @        if(result == EDMA3_DRV_SOK)
% i" Y/ w  y$ d- w        {
* J2 _+ Q4 f0 G4 J3 w4 A                paramSet.srcBIdx    = 0;: v; O# l0 S1 R1 _
                paramSet.destBIdx   = 1;
6 g/ u4 }5 m) C                paramSet.srcCIdx    = 0;
' p8 m8 J* j8 m3 b2 i                paramSet.destCIdx   = 0;
7 H& G' I' z* m1 o& V                paramSet.aCnt       = PING_PONG_ACNT;
3 f: x. @% b8 n$ S- [                paramSet.bCnt       = PING_PONG_BCNT;
/ M1 h! V$ M: Z( z: P" `8 V1 C7 k                paramSet.cCnt       = PING_PONG_CCNT;
" o" `+ x4 H0 `8 u                ( l% C, _2 b! t$ ?" M& O' o. n' E
                /* For AB-synchronized transfers, BCNTRLD is not used. */" B; `4 |5 I! C
                paramSet.bCntReload = PING_PONG_BCNT;' U3 W- D' P1 N- I: `: F
$ V1 X4 X+ f% t" T' ^( n
                /* Src in constant mode Dest in INCR modes */* |. S' W  ?/ }: H: t) j0 A
                paramSet.opt &= 0xFFFFFFFDu;6 I- X% O: T% y- n# }, M" H- G; P5 W
                //paramSet.opt &= 0xFFFFFFFCu;5 u! b5 T; d. v! e6 f/ l
                0 |6 A9 S0 y$ [& [# w# \
                /* Program the TCC */
1 p& N- h. D- w3 S1 {- b                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);& f! b* ]/ ~( A! ]( E( m

# S' |' Q, ^$ U8 Y, ?                /* Enable Intermediate & Final transfer completion interrupt */, _" t! s9 W. Z  w( k
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
5 ?0 y8 _1 @7 y. B( g' u                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);4 L: U, T* d0 l
1 k  M4 t# F3 G1 b. R' K0 q: }
                /* AB Sync Transfer Mode */
, w6 O: x' I+ Z$ H0 d% ]" a* W/ U                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
6 z& c3 R" V$ T$ j) W: n/ @               
! l1 i, m. J' n/ Q8 C/ t- r                /* Program the source and dest addresses for master DMA channel */
+ Z. l# W1 Y) ~  d, m5 q                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
5 g1 P- Y0 ]% `( D  e" x; k                paramSet.destAddr   = (uint32_t)(ping_buffer);6 c0 ]* W* ?; X9 r

! j6 N1 Q- I  }; W( G& }                /* Write to the master DMA channel first. */# J+ X* K" }' I
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
( q8 i, s! O+ h) L) [2 F    }       " _. \% t/ ?) b$ W+ {4 T
" L2 P5 n# v) M, w- ~
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
) g2 _& _+ ^7 y8 Q( I8 f. E$ Q+ o       
0 I, \: `  H9 e7 [7 p6 `    if(result == EDMA3_DRV_SOK)
( g8 a6 v9 O/ ~    {& U( a; X! m) `3 ^2 y! C8 i1 i, [
            print2arm("edma3 driver init success.",0);
  Q) k) M, _; R! w6 G    }
9 P) v5 v2 E/ N# \}2 W- D6 n9 u! T

( v! V: y' @) O. A
6 P; c  a8 M5 J* u' C3 z# F. Y% JEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
! D1 g' l. W8 L
/ a/ B9 _  d' E+ s
8 H. F- `. W- ^- X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
板凳
 楼主| 发表于 2015-4-29 23:25:56 | 只看该作者
Lewis 发表于 2015-4-24 10:47- t. w  E3 A! I  P' j$ A) o3 w
每次DMA传输完成后都要再次使能传输

' V& Z+ _4 x- ?1 h# q原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 01:41 , Processed in 0.039430 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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