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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:0 o- Y) D" k8 M; g' i* h+ z
#define  PING_PONG_ACNT          1
; X9 }  x. w" a2 a8 J3 m#define  PING_PONG_BCNT          8*32*40 7 E% d' H7 n3 P1 p
//#define  PING_PONG_BCNT       1 + A5 Z# ?( f0 k! N5 Y* S; I# \
#define  PING_PONG_CCNT          1
  R& T( L, Z7 h) {& F+ J8 U#define  MCASP_BASEADDR          0x01D00000/ r, d/ w+ k6 D% I' F* [; D' ]+ B
#define  Mcasp_RXEVENTQUE        (0u)6 g' l/ q% @! z. r% T; |

8 G# U( K0 }) a  K% ]$ l/* OPT Field specific defines */
( Y8 M0 i9 q8 N, Q; K#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
2 R! y1 h+ Z5 p* K  }#define OPT_TCC_MASK                        (0x0003F000u)% Q7 [% R: ]+ n! [- p: f; M
#define OPT_TCC_SHIFT                       (0x0000000Cu)
; b5 x9 f+ F! q. P) J! a3 V#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
- U" Q  U5 O4 e7 M- E5 E0 n; N8 H8 ~#define OPT_TCINTEN_SHIFT                   (0x00000014u)
$ k% `+ |2 g& H4 S; Z4 w$ T4 r3 v
char ping_buffer[PING_PONG_BCNT];
- J0 ~8 u8 r3 V+ `* G' o! {char pong_buffer[PING_PONG_BCNT];/ o* X6 q( `4 ]+ \2 V4 k
  Q+ u8 ~& h4 ^0 S" M& G! y7 a) I
( t' U0 V. r% g/ z1 @
2 u( ^. U  J. l, N
7 M( W4 Q& U6 Q, i* M8 ?
static void ys_edma3_init()
1 s' X5 }: e. o; k$ X{2 R" I4 J5 A$ N% Q$ F( @; d  k
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};5 V7 i* h# d, ^" o. ~
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
# A, ?8 C5 T" N% H$ c        EDMA3_DRV_Handle hEdma;' B1 S% \! V! `! s: o: W
    uint32_t chId   = 0;
: x  ?3 _" c3 }! v- A    uint32_t tcc    = 0;
2 N4 R, M' {" L" \# p( a5 J+ o; e. k# x; z
    print2arm("edma3 driver init...",0);
& y/ v4 {2 W- W" d' N5 z. h; }
9 t% N6 C) A" l' w        hEdma = edma3init(0,&result);
3 V) p6 `+ L' G' [        if(hEdma). I7 |4 \/ M2 P1 Y& Y
        {, v* o3 b6 n# L6 F) n/ z
                print2arm("edma3init() Passed.",0);
9 l) T! u4 |  J8 r6 }0 O  I        }
) J  i4 G$ V) ?: c        else7 t) w+ J. ]1 b0 O: {# @
        {
7 \* Z3 I( v* N8 s3 _% v2 O                print2arm("edma3init() Failed.",0);  U3 O. k( i0 A& A
        }
) c" u/ M2 u9 a& a6 g! E       
5 L# Y$ h" P2 _! _8 k) r( o        if (result == EDMA3_DRV_SOK)
" b5 X4 h, h* X9 g    {
. \! O  i: X. t7 }+ w9 p( P                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,9 N& n  w! v1 A' T, O
                                                       (EDMA3_RM_EventQueue)0,
, L7 A( m; v4 X7 {0 r                                                            &edma3_isr, NULL);5 A2 @; x7 d# z- [
    }
4 m* G& V' \* K' _/ [4 v       
9 n9 G: P3 S& C/ l% ?2 t# T) T        if(result == EDMA3_DRV_SOK)2 [. A+ K  e, j7 H2 B- M$ L
        {0 Q; F$ Y3 Z6 v+ Z9 C
                paramSet.srcBIdx    = 0;2 b3 n- R& I$ T, H
                paramSet.destBIdx   = 1;
; c7 b- z5 _$ n9 f+ ~. \5 U& i                paramSet.srcCIdx    = 0;
; c9 C8 V4 C- x/ |& F9 E8 M  f                paramSet.destCIdx   = 0;
7 `& {' [9 S6 R. [6 J6 K7 S8 s                paramSet.aCnt       = PING_PONG_ACNT;
2 Q6 z' L1 c9 G( I                paramSet.bCnt       = PING_PONG_BCNT;
6 U! _( B4 @7 ?$ k) s  F$ q                paramSet.cCnt       = PING_PONG_CCNT;
- y) o2 Q2 `$ r3 n5 _                # D; H0 n; P. k- {+ t! D3 i7 k
                /* For AB-synchronized transfers, BCNTRLD is not used. */- p4 `  \; p% ?' L! p' K
                paramSet.bCntReload = PING_PONG_BCNT;
6 C, N; g, T; |) Z' e& n$ r' X) ], R$ L4 o
                /* Src in constant mode Dest in INCR modes */
- w& ]4 w( W6 J                paramSet.opt &= 0xFFFFFFFDu;
/ `$ L1 W7 L: a; z8 ?                //paramSet.opt &= 0xFFFFFFFCu;8 l  M8 [* A3 n' D- A! X
               
; z' _, m( |; {7 T$ E; W3 B                /* Program the TCC */
4 M% M4 E% X* E                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
5 Q8 x" R! _5 s1 p1 Y
$ t) {5 X/ F" N* ^7 G' v                /* Enable Intermediate & Final transfer completion interrupt *// |' P' z: ~5 a$ i. ?+ O, Y/ v& j
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);) \) S3 h; P1 g
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
8 q; ]7 h) L$ S6 O. Y# u6 c% r
: J: U& v" N4 D                /* AB Sync Transfer Mode */5 U: j1 H& ~  _
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
9 c# ?* n5 l% @* N; N  V                + t; ~! z/ W# q
                /* Program the source and dest addresses for master DMA channel */0 M- z4 k* i* y  ~- L6 P
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);- `+ `+ P$ \& |" A) E
                paramSet.destAddr   = (uint32_t)(ping_buffer);" a' |( H/ Z1 |9 b. Q- z: o
- h- @" a% z) `/ R
                /* Write to the master DMA channel first. */- G3 l8 s, O0 `- }1 y
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
) f0 J! y# z$ Y    }       1 z4 ?- Q1 n: j& |

, x* ]6 X0 \3 |        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
  C7 X9 s7 }5 d/ r& I" q9 P        4 n0 V" @3 u$ o/ y% A" H
    if(result == EDMA3_DRV_SOK)
. `" L# Y( W# e8 X, U; P3 p" A    {
7 m8 q& E. d1 z/ K/ N7 I            print2arm("edma3 driver init success.",0);; n  c8 v  I3 ~& i8 h' i
    }
0 x. e" i: ?1 U4 n6 S) e}: [% ]2 k- T0 l0 v: ]
6 T1 R$ t6 N1 O, ]0 T' N
* f" Z! }% A/ d, e0 H  S, h
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。" e3 X: u) Z7 \' l5 o5 F) T
" y. v* G# o# I" \

' Q; Z: j8 e8 ]1 Y3 L
分享到:  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
; _$ K* M5 Q' X每次DMA传输完成后都要再次使能传输

+ b1 S8 d. X9 d0 l& U原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-14 10:31 , Processed in 0.039194 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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