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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:5 A& ^7 C0 c. ?  P+ I4 A# V
#define  PING_PONG_ACNT          1# w" v6 ~  u4 C0 z' B4 C8 b
#define  PING_PONG_BCNT          8*32*40
% B* Z* ^& E+ S, m//#define  PING_PONG_BCNT       1
# ?# }. X6 U2 C8 {#define  PING_PONG_CCNT          13 B+ I' P# g' K; f6 q; o( }
#define  MCASP_BASEADDR          0x01D00000
6 T) Y- s9 J9 S! q9 m6 T& E% |#define  Mcasp_RXEVENTQUE        (0u)
; V; b0 z5 U) s: I9 K5 p# z" S4 k# @% t# b! D+ Y0 H, ~
/* OPT Field specific defines */, J4 G8 U  @1 H( ~
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
! V+ _; _% y. a! c0 j#define OPT_TCC_MASK                        (0x0003F000u)$ W/ Z# u" G& r" h  Q6 r' U% I! Z
#define OPT_TCC_SHIFT                       (0x0000000Cu)# N, D8 v; ]9 n2 A+ K
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)2 G! Y* B6 u- D5 m
#define OPT_TCINTEN_SHIFT                   (0x00000014u); H8 H2 }. g8 z  \5 {/ W

' g( X6 B, J/ ^  @( f" D) B5 W/ wchar ping_buffer[PING_PONG_BCNT];& l5 P+ p. X$ ~$ O
char pong_buffer[PING_PONG_BCNT];
) h; k" v+ L% V" x0 O" y& d/ ~
  y, q8 b. V+ S% W$ x  G5 B0 b. m5 Z3 s

" w# @8 Y7 p. Z- p
/ U3 i( Z9 m3 L1 Nstatic void ys_edma3_init()
! R9 H) f1 N2 Y3 H0 M" ?7 w# E{; J4 _9 |; i9 _4 _5 m  G* t
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
/ u, ~- P9 Q* {$ W' _! X  r' J) L        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
2 E- g0 O2 z& C& t% W- z1 m% C        EDMA3_DRV_Handle hEdma;
. p8 m+ r9 d& N; B9 N    uint32_t chId   = 0;
2 V7 e- }% y& ^3 N' P% g' J* k    uint32_t tcc    = 0;1 z* v$ U* w) h5 D$ z
+ y# I1 h3 X/ l7 X
    print2arm("edma3 driver init...",0);
, G# _3 w1 \3 `; b. v, ^. |) w, R+ Q; j. d& F; P
        hEdma = edma3init(0,&result);+ P5 \% g* R  ]2 {, w# ?
        if(hEdma)
7 t7 \7 g9 h; }  |6 w4 u        {
  I7 t7 m% z* U8 ^5 e                print2arm("edma3init() Passed.",0);
" A# t' H3 R; A3 o4 U- R+ m' l        }
9 Z% G' W. i1 _/ @$ y4 ~8 R# J        else: N0 X7 y; Z( n( o
        {
% c7 h! L3 y* P4 h' p8 x' _. |                print2arm("edma3init() Failed.",0);! @% M" w3 _/ i* I/ c4 a1 V( ?5 I
        }
8 M% d+ U$ x; U  A       
9 E7 U) }1 P& f        if (result == EDMA3_DRV_SOK)
; I! ~% Z. T. I: v( _( e* [    {
- ^8 q- `7 k% w                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
! k1 Z( c9 n! K+ y1 f                                                       (EDMA3_RM_EventQueue)0,7 W$ Z1 J% }9 b8 c3 v
                                                            &edma3_isr, NULL);
( R4 l5 c$ Y: l6 n2 N3 _    }
# D. u! E& D+ q- Z. L       
: e8 ?5 u8 c0 g$ A, A        if(result == EDMA3_DRV_SOK)
* W# y8 X8 B* v/ n) ~2 u7 R        {# h- [  I4 t" z" @) t3 n
                paramSet.srcBIdx    = 0;
# D! n+ {% |+ o                paramSet.destBIdx   = 1;
( R" u# U0 x% L' Q* [! i                paramSet.srcCIdx    = 0;4 W# j) Q, H( F* V# r
                paramSet.destCIdx   = 0;
: s; e- {) J  _) J                paramSet.aCnt       = PING_PONG_ACNT;! W& {$ e- u- a/ N% L
                paramSet.bCnt       = PING_PONG_BCNT;
  Y! @/ E8 F0 I* h9 d4 O; G! b                paramSet.cCnt       = PING_PONG_CCNT;! w$ d1 e# q2 D1 a
               
" n' K' k) j) [$ Z3 z* B+ |                /* For AB-synchronized transfers, BCNTRLD is not used. */# C- n, W1 W& ?8 C/ T8 P
                paramSet.bCntReload = PING_PONG_BCNT;* L+ c; I; _, P
) u9 r# Y, u$ t8 f
                /* Src in constant mode Dest in INCR modes *// {2 K5 Y% s4 X! O, e7 K
                paramSet.opt &= 0xFFFFFFFDu;
/ W+ o$ U2 m6 S/ B0 L+ a: @                //paramSet.opt &= 0xFFFFFFFCu;
. v" `3 _3 p9 ]6 v: F2 Z) x               
$ g& L# h0 |# j+ C                /* Program the TCC */
  K6 Q  M. c8 h/ t                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
: q2 s, W1 b, y$ ^* q
4 L0 l- J! V% Q; I1 w; {* U                /* Enable Intermediate & Final transfer completion interrupt */. T' h4 ]$ u3 h- s& e9 v
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
& _1 ~1 B* i- J/ A7 n/ w- C3 ?                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);1 r% e: e0 z( {& [1 K$ K& S& Y

" ^7 m, H5 x! O2 }                /* AB Sync Transfer Mode */
& l2 D. C& @6 |3 J# d2 n9 V2 j                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);3 F! O" }8 o) ~
                ; h( V' f4 ^5 N$ b/ ]
                /* Program the source and dest addresses for master DMA channel */. Q% o* O9 N4 X
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);/ S4 S- [$ j+ ^9 g, i2 y) K
                paramSet.destAddr   = (uint32_t)(ping_buffer);: [1 [: z- b0 E4 B. A
4 J9 V( X, g6 X. V6 F5 X4 E
                /* Write to the master DMA channel first. */
8 r1 v6 _, o7 I9 j                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
/ p3 n" I- b, S. E3 e- w9 k9 e    }      
, [/ h3 W; m3 [; U2 y* u: X' k
" H" C- e6 h$ v        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);% F+ J; P. T0 q" P
       
7 t: h# [! W( v0 [' y    if(result == EDMA3_DRV_SOK) & ?" `% n0 f, V* u
    {& ^4 L% Z( x8 P! h; F, Q; T
            print2arm("edma3 driver init success.",0);* ^  X6 o0 \: p- v% o
    }
* |7 G. {/ W% e* N; e9 o8 a}* n6 \6 }& ~4 @, q9 T9 ?. z/ F& y2 O

# A" U( d3 X( D
0 o7 U0 i- s% @EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
: u4 a: Z3 V: f% i; W! q
8 x. S0 G1 M4 H
6 k' C5 s& ]! u& I
分享到:  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
- A3 m) L/ r0 g3 h1 T每次DMA传输完成后都要再次使能传输

8 F7 Z+ c: J$ E+ X2 D1 p1 a7 c原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-26 05:09 , Processed in 0.041796 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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