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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:# t+ D6 l% L5 c  c( q4 P( q
#define  PING_PONG_ACNT          1+ A% ]. `) T) v' d+ F
#define  PING_PONG_BCNT          8*32*40
+ ]/ W! ]* _2 A# E: Q/ c! e//#define  PING_PONG_BCNT       1 5 n4 f+ F8 M; ?+ l$ w4 ^0 K9 H
#define  PING_PONG_CCNT          10 v# C$ A4 S) w$ O3 W, e
#define  MCASP_BASEADDR          0x01D000007 u' R# b# b3 x5 Y, P- b
#define  Mcasp_RXEVENTQUE        (0u)
' ?# t, v  W* t: J, F" L& b0 n8 [& Q( K0 D* G* p8 t
/* OPT Field specific defines */9 `4 Q' F1 O8 H
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)! H0 k2 d% D1 H  a
#define OPT_TCC_MASK                        (0x0003F000u)
3 V9 \% j6 @2 E: U#define OPT_TCC_SHIFT                       (0x0000000Cu)
0 n* y" O% c- x9 k; M#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
# h: c) j/ j- G% n' y' Y# m7 w6 e3 `#define OPT_TCINTEN_SHIFT                   (0x00000014u)
- ^' d4 K  t' D3 x& b7 C- A% E. p9 A# D: X
char ping_buffer[PING_PONG_BCNT];1 @# e' W( ~* Y5 s8 ?) e+ Z7 r* z
char pong_buffer[PING_PONG_BCNT];! N" S  l2 a, H& @; \/ g( I

& U2 h3 b& N; q' ^
# |  `/ P$ S; l/ w: W. D# K  s' \$ Q- l' D9 b  S
% `" m3 M# M% @" j5 j. ]
static void ys_edma3_init()
  U" j: Q& c4 Q{
. Y0 L  v, o- m7 F( X" P% ]; ~        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
# r4 D$ R' b1 j  ?$ q( J" Y        EDMA3_DRV_Result result = EDMA3_DRV_SOK;  t" S# P0 a) |. D9 m8 z. H
        EDMA3_DRV_Handle hEdma;
5 v/ N& i$ ~8 W    uint32_t chId   = 0;" j/ Y, V' {3 \# Z" H0 \
    uint32_t tcc    = 0;
2 F7 b3 Q1 u- W
$ o0 I; e. E4 N* I    print2arm("edma3 driver init...",0);( t+ V' g' b- J0 l

9 s0 n% D* j5 \8 J* k- {7 o0 I: c        hEdma = edma3init(0,&result);
7 Y/ s8 Y; j5 b+ _2 ]. I9 f: r        if(hEdma)
, @3 u+ R. J& N& d4 o        {
, L3 `6 \5 g9 e$ }" u. s                print2arm("edma3init() Passed.",0);
3 Y% Q( a. h& D1 C& s        }: O) X- i' t6 Q' l* y, y- t
        else
, q; F! b1 L4 }7 @7 A" k( I$ o* v        {, X8 G7 t5 z: z. B2 P$ b) O
                print2arm("edma3init() Failed.",0);) k9 z, }% k( b- a
        }6 g1 n1 [; r+ Y+ p- K, G7 |2 ]7 a
       
- D! j. J2 y- O* v  n& h) C1 Y        if (result == EDMA3_DRV_SOK)4 y6 }7 \5 n- O! L3 q
    {
+ I4 P1 i0 a( Z0 M                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
8 |/ w2 B' k1 a  [9 y                                                       (EDMA3_RM_EventQueue)0,
8 ^% E$ ^4 L' O# w  J                                                            &edma3_isr, NULL);$ ]' x5 w+ [( r; p
    }
- T" k* r( m8 m4 {/ r% B# z6 q       
: e* j5 {* |( p0 Z- J        if(result == EDMA3_DRV_SOK)+ h' e" ^. q3 p) s' R& F$ {6 u. f
        {7 X) d5 ^! z6 R, n7 z( [
                paramSet.srcBIdx    = 0;2 X7 K; T! f9 I% K" o! C
                paramSet.destBIdx   = 1;* q3 {. T- u0 ?& U3 E
                paramSet.srcCIdx    = 0;$ _  _. H7 @- N5 T& q' V
                paramSet.destCIdx   = 0;
* Q$ f1 O8 ?5 r                paramSet.aCnt       = PING_PONG_ACNT;
8 t, o  u% E2 A& L+ d                paramSet.bCnt       = PING_PONG_BCNT;
$ a4 O& P0 s" [5 S+ m# `                paramSet.cCnt       = PING_PONG_CCNT;
6 L- [! A) Z- Q5 u" r                0 l; c$ F7 z5 C, E1 \1 n6 R. c% M6 Y
                /* For AB-synchronized transfers, BCNTRLD is not used. */9 |6 \. p5 e1 g5 X0 _6 |
                paramSet.bCntReload = PING_PONG_BCNT;% d% w# ^; h8 n# e( v

) o( m. |% X, e9 L, \4 G                /* Src in constant mode Dest in INCR modes */
6 K/ U  v: O& N4 D                paramSet.opt &= 0xFFFFFFFDu;5 j- f" o/ b7 X9 K9 u% _  F
                //paramSet.opt &= 0xFFFFFFFCu;
' E9 G. v0 B' x9 @; a7 a                - M7 @/ S# n+ h% P, B, f/ g
                /* Program the TCC */  Z' \# M4 z6 d% ^0 L, k) L* `
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
' p  `. d8 ]2 P( Y+ Q8 X, O, K+ R7 d' g# X% q* F7 t& U) N
                /* Enable Intermediate & Final transfer completion interrupt */2 P1 E- U: s! `) Y  d: _* D, z
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
# {1 T3 N: A$ h  o+ n, S                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);# ?9 w) s/ Y0 l5 d9 G: j8 c
/ r/ J4 v8 K2 h, D+ f7 Q7 l
                /* AB Sync Transfer Mode */- t% c* [  r7 b) t( ~$ Q. f
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
5 N" f% y* u, w6 s+ ]) N+ `) C               
" p  c. z& d3 z# D/ j                /* Program the source and dest addresses for master DMA channel */8 B8 A. K# l0 p  s1 s
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
, |8 O# P: Z( f, m- ]* ?& \                paramSet.destAddr   = (uint32_t)(ping_buffer);& j0 [. k! @2 X+ ]
/ k$ t3 c: ^: z
                /* Write to the master DMA channel first. */
' E$ z. U9 X% o* ~4 x4 i                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
; n, I! H" u. K' O: j& p    }      
. W% N- k1 l% E5 m
* ?: ^2 o/ p' _- n9 n        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
1 N% Y. X; T9 b( l) u        : n2 p8 z  ~# v
    if(result == EDMA3_DRV_SOK)
# d" j) A& A& T" f    {
& V- @; Z: Q3 F% o5 C+ K! z            print2arm("edma3 driver init success.",0);
* \) j1 v' D0 R+ R2 K    }
: B) P, e8 ~5 H}
1 T7 S  u% q$ J0 X
& m# }* Q, Z9 V/ }" a% b2 L0 H! _, m* V* X, l+ X$ K  o" k
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
# G- }6 e! V+ Y* c( o1 K
' y2 ?1 q6 I# e- y" k
9 c8 Y3 Q3 e7 z+ W
分享到:  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:471 d- v; t5 u- o* c' r5 l
每次DMA传输完成后都要再次使能传输
. f1 k# M% v. J( a
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-1 19:36 , Processed in 0.041887 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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