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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
( ^- S& y$ ?& h( G- s) x0 Y  c8 n#define  PING_PONG_ACNT          15 ]3 E, g6 z! E0 n
#define  PING_PONG_BCNT          8*32*40
- y3 _# R) l* Z% P//#define  PING_PONG_BCNT       1
2 Q$ ^/ @5 l) N  R9 L/ I; }#define  PING_PONG_CCNT          1
  P- z" g) I0 w) Z% {+ z3 ]3 k  G1 Y#define  MCASP_BASEADDR          0x01D00000
" u8 A" n: Z3 O#define  Mcasp_RXEVENTQUE        (0u)
+ B3 ^. _/ H) h% p: R  ~5 ^% y8 j7 N8 g; t
/* OPT Field specific defines */
" P6 h7 Q, ^$ E) H8 R6 i2 Q  p#define OPT_SYNCDIM_SHIFT                   (0x00000002u)6 R' \/ j8 b* c$ j& X
#define OPT_TCC_MASK                        (0x0003F000u)
1 I4 j) z' F9 P+ }8 u6 R#define OPT_TCC_SHIFT                       (0x0000000Cu)
' y$ h, W- |4 u4 M+ L#define OPT_ITCINTEN_SHIFT                  (0x00000015u)' I5 g0 P) f% D; a7 L
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
2 t/ h# \& x: y6 n/ C6 @2 K, O* A/ I, |- _. n
char ping_buffer[PING_PONG_BCNT];
/ q' c  ~9 b; {& [; wchar pong_buffer[PING_PONG_BCNT];. Q0 x: k% w6 b! {
- k! V: e3 u. c0 ]3 u* ^; n# G

9 D. F. _7 v' ^/ h; K* m8 K
# p4 v/ y5 ]1 ]% x# h+ z
* L( d8 h1 k, j) ?3 Estatic void ys_edma3_init()
# i+ e1 x; W# d: ^{
. [& W! D2 W2 u0 s# v8 }        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};* Q2 K' m/ p! L( A" Q* P3 ^
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
$ V, {! {/ U+ h        EDMA3_DRV_Handle hEdma;1 f6 ?; _) S% k( E" Q
    uint32_t chId   = 0;8 f0 d& _8 v$ C9 j) |+ ^+ x
    uint32_t tcc    = 0;
) n, h6 D9 T' Z+ A& Q: X* F: g( R7 `8 r# G
    print2arm("edma3 driver init...",0);- h7 T$ s( \5 v3 x! _" V9 x
8 q$ Z- D" f7 N! w7 e, A$ [5 v
        hEdma = edma3init(0,&result);$ n7 p; l$ y( B3 P4 Z* f' \; M1 L8 T9 U
        if(hEdma)) p) x/ m/ @2 c( A  J
        {+ L# i8 n; U" m8 X1 U
                print2arm("edma3init() Passed.",0);
# m1 f  i7 H/ A9 k        }
8 K; Q" a0 x& \9 j0 l! q* E$ p        else
  v3 i2 D( F- `6 N% Q) Z8 I4 p        {
) _0 _1 v. `# C5 m                print2arm("edma3init() Failed.",0);# A. B) W2 T2 C+ B
        }; V) |: j& m- L) p2 o* Z- q' b
        ! f; ]2 T7 o0 A: ^1 h
        if (result == EDMA3_DRV_SOK)) Z4 U- w4 ^3 {$ U
    {" F. B* c" x: f( j" D
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
1 H. i' p/ h; v1 U                                                       (EDMA3_RM_EventQueue)0,. q9 P5 v: U6 Z8 M$ a
                                                            &edma3_isr, NULL);  J! ~/ V4 m" b, u  }- o
    }9 t4 m0 [4 y. j, l: ?5 L
        : k) R# B* e4 l
        if(result == EDMA3_DRV_SOK)
; r7 v1 B/ l- c  E        {# r) A' X: T6 X9 R
                paramSet.srcBIdx    = 0;& f* U2 T' }' `  d' x
                paramSet.destBIdx   = 1;3 ]" ^; [- z2 ]. W- P
                paramSet.srcCIdx    = 0;; |8 L3 H% `( v# _1 J/ D
                paramSet.destCIdx   = 0;) N8 a9 S7 F; H# _, {
                paramSet.aCnt       = PING_PONG_ACNT;. o' G" L6 s4 J- j8 \
                paramSet.bCnt       = PING_PONG_BCNT;+ i7 z+ E9 i7 m5 B7 n- [
                paramSet.cCnt       = PING_PONG_CCNT;
: H2 ]) g5 G) h( [                4 U9 S( {0 s) J" l/ U/ J# z
                /* For AB-synchronized transfers, BCNTRLD is not used. */  C2 m. p) i/ x, s2 }
                paramSet.bCntReload = PING_PONG_BCNT;
1 K' `6 m6 X0 R: [! K; @
% @; c2 e: r- i- o1 N8 W5 V                /* Src in constant mode Dest in INCR modes */8 t5 [0 \: B: f; v9 b$ ~- [# m
                paramSet.opt &= 0xFFFFFFFDu;
2 {% w. E" W7 P9 Y; B) H                //paramSet.opt &= 0xFFFFFFFCu;
. N8 T$ T( x& U: Y               
5 F) {% U$ ]! T4 V  H6 z' K3 W. r                /* Program the TCC */4 x7 k/ X- ], v/ Y
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);  W; @( n* |" K+ S) I

, B, K" J2 `8 x6 j4 p; G                /* Enable Intermediate & Final transfer completion interrupt */
( ?/ \3 B% A/ p$ b/ A                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
8 E& f+ d7 Q7 w' R                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
- |; {6 F- s( X7 ^4 j
6 l9 u+ d3 G6 D. |( _( E% K% X                /* AB Sync Transfer Mode */- I6 d; X# `/ X% [. e
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
$ s( u9 A1 m$ k1 }$ Y                - ~0 m2 l+ B- R7 K8 b" @
                /* Program the source and dest addresses for master DMA channel */% }" R, I. t/ u
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
3 k) e% I; u) b" r) I( J) `. b( c  l                paramSet.destAddr   = (uint32_t)(ping_buffer);
5 w) O: k% P/ ^) @( H. b# v; N6 g5 l8 ^6 W5 K6 Y
                /* Write to the master DMA channel first. */7 ~, L2 e5 C& u! b
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);8 S  ^4 t/ m0 y8 V
    }      
# L2 _3 }- E8 V- g* V; R- v& X  }2 \! L
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
( R( n& v0 ^3 ]9 g        * q5 E" P: R: A9 \& o3 F$ F7 G
    if(result == EDMA3_DRV_SOK)
6 R# s) N2 k: `/ }9 N0 r    {/ w! }9 F& l( K; R' ?( H+ l
            print2arm("edma3 driver init success.",0);+ \2 c9 @2 B3 \4 r- ^" z
    } 2 l- I2 B, ^$ f
}+ M4 W# Z" m" s4 p- u
/ {9 N+ T4 v9 O; h% `
, C; l& K2 ^2 v4 F
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
+ \4 v6 r% [: e% g' u
& R- N2 l9 C) C$ Z2 J: i4 V9 x3 \, _( e  w9 x6 B  {1 q" V
分享到:  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
8 x, y% A  K. M每次DMA传输完成后都要再次使能传输
( ?* s" e  c# e7 Q7 t
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-17 21:36 , Processed in 0.037372 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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