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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
* D$ H; Q6 e) j#define  PING_PONG_ACNT          1
( ?3 m0 o0 S2 m# Q* B#define  PING_PONG_BCNT          8*32*40
* z; ~! M0 r) v) g//#define  PING_PONG_BCNT       1
3 D) \2 h# Y- T1 U1 Q$ {9 \9 E#define  PING_PONG_CCNT          1: D! t+ i9 d9 b
#define  MCASP_BASEADDR          0x01D00000. F  _/ J. a* X, z5 w
#define  Mcasp_RXEVENTQUE        (0u)
' R: w  O+ V6 a8 a& R; Z7 Y
, P) J! _2 x7 J. q, c& S* J+ @% n/* OPT Field specific defines */) O+ d8 \! {" j' H: v
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
: C7 Z/ c$ Y1 i. x1 Y" U" U#define OPT_TCC_MASK                        (0x0003F000u)
9 c- s8 F  y4 v#define OPT_TCC_SHIFT                       (0x0000000Cu)
4 Y0 G. p9 p$ r9 o" H#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
( j/ L  e2 q2 U. w1 v- A#define OPT_TCINTEN_SHIFT                   (0x00000014u)
- Y3 ?% [1 e8 h" [* \/ x2 O9 c
char ping_buffer[PING_PONG_BCNT];
& O' j8 W) C4 R& Y3 J7 a( \3 `char pong_buffer[PING_PONG_BCNT];: F* R# ?6 n2 J' u) S& Q

# i& i) Y' c: T) u
7 h1 w  V+ g! R! S1 X, X: _/ l  d& i+ b5 }1 ^* _2 Q' c

7 h- P6 e  ?  s! Q' f( x: Tstatic void ys_edma3_init()
% m, f& t3 ~4 N9 j% V7 h* m{
6 T! K6 q( k4 v/ {        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};/ D* |4 q% ?) @
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
/ c8 u1 R2 s* ]. R        EDMA3_DRV_Handle hEdma;
: B3 P5 l2 l# r    uint32_t chId   = 0;* h) X/ s( N6 R( A6 |
    uint32_t tcc    = 0;" T0 Q6 F+ W, m3 Q1 c% V

# q. A. T0 k' t: s$ [  I    print2arm("edma3 driver init...",0);
4 D+ b" g, {& d* Y7 H
8 w$ z7 E/ M/ i8 w  ^3 M        hEdma = edma3init(0,&result);8 w$ u1 H# s$ D6 y0 J* A
        if(hEdma)2 ^# ]6 U4 \6 u
        {
0 z2 v: O$ u0 Z" j5 Z2 C                print2arm("edma3init() Passed.",0);
3 c4 L$ w) n$ ^; b1 s        }
& q% S3 T7 o: `- T4 j+ d        else# q6 L& G! l* \9 ~3 h$ _* Y
        {* C* R; ?1 U5 P, L' N$ s0 B
                print2arm("edma3init() Failed.",0);- ~: Q0 O4 [% d
        }0 ?) Y0 ?  D/ P- b; ]
        6 u; G2 ^4 r5 k1 M
        if (result == EDMA3_DRV_SOK)
6 O; y* e. |8 G: i8 X    {
) C$ N1 k% I$ P5 h( r2 C                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,$ Q) H: t- ]) u  k$ f% L; f
                                                       (EDMA3_RM_EventQueue)0,0 L  C! b8 G: \$ f0 r' j/ x
                                                            &edma3_isr, NULL);6 p* x7 P) K6 M' y
    }$ k& u: A8 l& ~! i
        . Y4 t8 r) g/ ^5 }
        if(result == EDMA3_DRV_SOK), u" Q2 N) K" o4 }7 `
        {
) k0 L0 z- S' F( }                paramSet.srcBIdx    = 0;6 v; T7 J+ j3 H0 @" z* F
                paramSet.destBIdx   = 1;
5 j/ Q0 L! y5 b; l  c/ E# w                paramSet.srcCIdx    = 0;
4 ?' j+ q% x1 U8 A                paramSet.destCIdx   = 0;
/ [$ u$ F5 V1 w7 u7 x                paramSet.aCnt       = PING_PONG_ACNT;
7 I! V) \9 A  {$ n+ Z: h# q                paramSet.bCnt       = PING_PONG_BCNT;  R% ?( n# S  ~0 \0 p
                paramSet.cCnt       = PING_PONG_CCNT;
+ W- u% ~- Z2 v7 |                2 C1 o& d( F$ e! S
                /* For AB-synchronized transfers, BCNTRLD is not used. */
! U9 M, `4 F9 W7 e                paramSet.bCntReload = PING_PONG_BCNT;; _' l$ |8 @3 P9 d9 U0 Q
1 e2 {2 @9 Q: \; {. s
                /* Src in constant mode Dest in INCR modes */
) B0 Z4 @: Q: C* i0 {                paramSet.opt &= 0xFFFFFFFDu;
- A. j5 S+ `6 [                //paramSet.opt &= 0xFFFFFFFCu;# |* ~( J$ \( E+ r; t
                . `! l+ Q6 g6 E  r1 \
                /* Program the TCC */& {  r6 |9 M- D8 P7 t- P
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
. H7 B+ \% U& r' k, c( M4 l& P2 c1 a  i$ k* s9 X4 F
                /* Enable Intermediate & Final transfer completion interrupt */2 k  f$ N& x: i: A3 k) s+ j
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
% F# B0 s1 ?4 q' c1 M                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);8 X# D  e, t; L) t( Q) g

7 Z8 [& ~% q! x& B9 [                /* AB Sync Transfer Mode */
1 G  r6 X, z5 q                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);+ h" m/ ]% i: a, J5 P
               
- f3 H0 r% `) x3 a                /* Program the source and dest addresses for master DMA channel */# W- r; b  v1 Q4 b# {
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
. g& F7 ~- K- G: M: s/ Z1 u1 p                paramSet.destAddr   = (uint32_t)(ping_buffer);
" {1 }( P& l* k4 \
, b) O6 D) n& G* {2 ^( b                /* Write to the master DMA channel first. */
$ C6 a+ A! l! l$ ]/ I$ i                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
- H4 d7 w* ?5 {    }       ( L- N6 |3 }8 P0 C7 f

' G0 }7 T7 s4 u$ x        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
, K8 T# I" U0 K9 Q* Y; y7 H+ Y       
2 R+ Y6 O7 K0 o* W5 A! l    if(result == EDMA3_DRV_SOK)
% L7 L3 f8 D/ _    {4 t! F( z& s7 B9 ^6 G1 N$ f
            print2arm("edma3 driver init success.",0);
0 U7 D3 u: X4 v7 V    }
2 K8 W9 o, }0 J8 T4 ?}8 ^9 W3 ^: z% {! b4 L
7 I0 Q/ `+ d7 r7 D3 x) n- e4 a

! V$ [5 }" l- [. S! q$ kEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。- o& p9 J7 X' {4 g2 R

& u3 b! H+ [' ?4 G
1 O( W3 x* W7 Y# R% Z
分享到:  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
3 I2 a( h2 H. B( Q: j" N每次DMA传输完成后都要再次使能传输

3 Z! K1 ^+ p5 R+ `& B& g  Y原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-10 02:02 , Processed in 0.048447 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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