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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
6 J3 b$ s$ q& c0 t8 k: r, H$ A#define  PING_PONG_ACNT          1
. U( \! a0 L) Z0 [. K#define  PING_PONG_BCNT          8*32*40
8 g9 R, y5 g6 r0 ?) a//#define  PING_PONG_BCNT       1 $ K% ?4 h2 Z7 j3 N. s% {
#define  PING_PONG_CCNT          1
, ^; w2 x; k) o* e5 \#define  MCASP_BASEADDR          0x01D00000
( A$ C$ n9 g5 f" w#define  Mcasp_RXEVENTQUE        (0u)
# H( V$ _; q7 Z8 g: x2 N) [5 K1 R0 j$ v$ @3 r: i) v
/* OPT Field specific defines */( H* h/ s2 x6 |0 g. R0 V2 W
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)/ F( S2 z% C* S
#define OPT_TCC_MASK                        (0x0003F000u)
( ^6 e3 @. l' @+ g#define OPT_TCC_SHIFT                       (0x0000000Cu)
1 \* M) R0 U: W9 H3 V5 B#define OPT_ITCINTEN_SHIFT                  (0x00000015u)  p8 r' f/ m  t5 w& X; s
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
  z) }" z" o$ q0 M
' S8 `) i  a! Qchar ping_buffer[PING_PONG_BCNT];. H2 l( E  [/ h* E" y8 L( g& N# r
char pong_buffer[PING_PONG_BCNT];0 V! t0 n+ q( R/ O( K) M; c- n
4 Y2 C0 F9 G2 @; h% i2 {$ ~$ z0 f

' y" O4 l& [# v' H5 b
1 `- u. ^/ m  r! ^. {$ m5 A( e) s" H1 \* f4 w" C
static void ys_edma3_init()/ w/ {0 l  o9 P) q+ c6 ?% L
{0 v  j" H2 |& V, {
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};: h" L: T: Q* ~9 C
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;8 ^0 x: [- D% O$ a6 c9 P
        EDMA3_DRV_Handle hEdma;% ^* N' Y9 b; K4 v$ y
    uint32_t chId   = 0;. S( M9 ]3 A% R, G! \/ j
    uint32_t tcc    = 0;$ ]% _2 U$ n( @3 M( ~

6 q6 f* C' B3 B, E4 d1 Y9 @    print2arm("edma3 driver init...",0);
7 ]3 Y6 q3 U* b9 B6 p. y3 Q. V0 j% {+ B; Y# x% o
        hEdma = edma3init(0,&result);
8 o+ k: k$ \1 q3 r8 u        if(hEdma)
) y! K  Y* J( B3 U3 `        {- \2 Y3 W$ `; F( C8 @( S- S7 H
                print2arm("edma3init() Passed.",0);
% S" p" R+ F, y& A% H! s7 D* a        }& [! h- y/ X/ E3 u! `
        else7 T6 e0 D6 k& ?# Q0 p0 `
        {
6 S, h/ ^' N- O5 g8 f$ B7 |                print2arm("edma3init() Failed.",0);/ W( Z* M  [( h$ B) ?6 v
        }; `/ z) I: p* ?- k9 I4 s* Q7 m6 ^2 K
          x  W* ~! t- z, u- N2 F
        if (result == EDMA3_DRV_SOK)% M4 [1 O& J& K+ h; j
    {
! a+ s; F$ P/ P                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
8 c' Z, k  q  `) ^" H  I1 t                                                       (EDMA3_RM_EventQueue)0,5 t' y. O. K6 f6 V+ p  r3 n
                                                            &edma3_isr, NULL);
; e& _3 J( A7 i    }6 f" \5 L, e' d8 W) @
        ' X; t1 U+ c  _' Z- ]) L
        if(result == EDMA3_DRV_SOK)% D' N" ^* R0 J  l$ b0 W
        {
! R+ G8 B: g% _% g                paramSet.srcBIdx    = 0;* A* @6 Q3 X7 a1 [9 y9 ^% U4 F% ~# {
                paramSet.destBIdx   = 1;
3 o8 J( K, d% R7 V8 q0 @                paramSet.srcCIdx    = 0;
! Y- E* g6 G" T8 X: {8 Z                paramSet.destCIdx   = 0;' i" V. W2 r6 N- s
                paramSet.aCnt       = PING_PONG_ACNT;: w) e' F& Z/ @0 o9 ]
                paramSet.bCnt       = PING_PONG_BCNT;* K* ?* _& k# P. N3 p0 y" o
                paramSet.cCnt       = PING_PONG_CCNT;
- q9 p  w/ A3 s3 k0 K6 [8 Y& e               
1 O1 N+ `, [; M( ^7 C- i                /* For AB-synchronized transfers, BCNTRLD is not used. */3 H+ q* t9 {9 U
                paramSet.bCntReload = PING_PONG_BCNT;! j( r* _) m! U3 E9 i* W
- N0 ]) M/ v" W2 J
                /* Src in constant mode Dest in INCR modes */
+ J7 @2 D: D5 _* P2 m& Z                paramSet.opt &= 0xFFFFFFFDu;
$ _6 q; ~9 Y, E/ E                //paramSet.opt &= 0xFFFFFFFCu;2 P' r+ M& _5 c6 _# ~2 t; L5 W7 g
               
, S' |8 e1 D2 g                /* Program the TCC */
5 B' U$ Q; v+ L  b+ c                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
9 x7 o$ e5 c# Q1 N( i% s% N! r, r1 M5 }3 C
                /* Enable Intermediate & Final transfer completion interrupt */7 Y5 j8 ?. n  e& j4 Q
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);! v5 _7 [! J/ P# a
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);, S: c6 a* ^. V2 u

0 ?5 P4 E; m# Q* S2 B                /* AB Sync Transfer Mode */
6 D4 ]2 r( x( i3 H  B* f                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);; m1 M+ |  a! Z) M! Y
                # K; |3 k6 }# Y3 j7 L
                /* Program the source and dest addresses for master DMA channel */% C& T2 |0 J  s3 V/ \( u& Y% y
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
2 I4 I2 w' ?0 w1 x" u4 k                paramSet.destAddr   = (uint32_t)(ping_buffer);/ Y0 V9 R' }$ n7 P5 }
( y" d5 x4 @: q+ V  c
                /* Write to the master DMA channel first. */2 F$ t- A- N: A% g
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);. \  ]4 j1 {8 q) ]  B
    }      
- c2 B6 v7 k& ^: M  l' A& z  `0 f
" H& b3 r% R  Q7 X4 o- f; B        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);6 A# {# h% j( d. C- A
       
( T4 Z, ]$ ~+ S3 i1 m* T* c  N8 \    if(result == EDMA3_DRV_SOK) 6 v1 V. E8 P% h0 w
    {
* n* `5 n& r4 r# B: k5 L5 Y            print2arm("edma3 driver init success.",0);% f. ~' [4 p) d
    } 6 |" g0 T5 ^" i. Y
}
3 b0 e4 `5 E2 {  M0 w  A$ G& C* U7 s0 q

+ G1 ^2 e( H, r/ ~9 r4 K* |3 D" `) tEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。. Y! w8 \7 D5 a1 x  X# K" M
9 q0 ^; a7 L- `+ A$ _

* m4 r0 b7 u' Q- K
分享到:  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
1 M0 Z: x& W! \, g每次DMA传输完成后都要再次使能传输

* e$ P" L4 N6 k3 M原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-20 15:58 , Processed in 0.040298 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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