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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
% w; j0 K4 Z* @5 _8 r3 F#define  PING_PONG_ACNT          1' a1 q. O' s: w, T8 r
#define  PING_PONG_BCNT          8*32*40 / z! ~1 K9 R6 x7 T
//#define  PING_PONG_BCNT       1 2 F5 i5 t# Q7 L1 p
#define  PING_PONG_CCNT          1
" b: ?' W3 l% r- `& G* |#define  MCASP_BASEADDR          0x01D000006 M/ k' j" q( R, k* R* x
#define  Mcasp_RXEVENTQUE        (0u)7 S$ C" {" n: e% `* [

* i# x4 B" S0 t% H# C; ~* x. S1 v/* OPT Field specific defines */" G+ N2 A8 X1 b' P6 g
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
' }* h; ^1 W$ F$ o# P#define OPT_TCC_MASK                        (0x0003F000u)
. R3 h2 t+ `# q#define OPT_TCC_SHIFT                       (0x0000000Cu)  p1 [2 d6 s& B  t4 U
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)- W! C' @$ k4 d( _( s
#define OPT_TCINTEN_SHIFT                   (0x00000014u)& ]( \; k8 a0 K  U# K

$ {% a! q( \; mchar ping_buffer[PING_PONG_BCNT];
( j( b/ P6 L' f( Q, j! ychar pong_buffer[PING_PONG_BCNT];
$ J( j$ t0 F9 |. w7 _% {9 X! n9 T8 I4 r# i
2 {3 @; d9 w" C% |

, n/ C3 N  {# i: R: ^0 h* j# M5 z
static void ys_edma3_init()
% ]* z# G1 L1 Z5 b4 P{
3 z; n7 S4 _+ O9 _: W3 z5 @        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};0 t& E2 C" s9 x3 d
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
. g- G& a' F# ]; h! {        EDMA3_DRV_Handle hEdma;# q! }2 Z( l" }5 W7 }
    uint32_t chId   = 0;
( `& j" _+ |& _7 H# X6 m8 b    uint32_t tcc    = 0;: A6 U5 `' o7 `" Y! t0 |! J

4 q" j8 i- N2 @4 o* G, P7 l; _) B+ B: @    print2arm("edma3 driver init...",0);! P  h0 ~& z3 |" @3 u0 s# q
3 }# B9 G$ a2 P* i
        hEdma = edma3init(0,&result);: N  W/ s" _0 F- y+ ]3 C. w) x
        if(hEdma)
0 C  k" I1 M! H2 i        {4 h2 M. F( J$ t& L( l3 B/ B
                print2arm("edma3init() Passed.",0);
1 o3 s' B; J* f! }# ]        }8 Y/ i3 s$ @3 l( W2 D/ X- A
        else9 ]6 _, }. Z) u9 V/ Y/ k. D# [& ]
        {
) t. _- e, }6 ~3 g: ?, C                print2arm("edma3init() Failed.",0);
" I/ @1 `' d' P* B$ O        }* S  p  j; H. c, [
       
4 B" K& d% c, S: O  O9 _        if (result == EDMA3_DRV_SOK)! N! @% j9 a' q/ a- Z
    {# D4 s; E/ Y. T1 z! L$ D: B  k! `  o
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,/ A# t# h; ?$ V7 y% D
                                                       (EDMA3_RM_EventQueue)0,8 S* |: X; J( i, R6 z! ?7 N
                                                            &edma3_isr, NULL);! k# u; }! e7 M9 A; U
    }: H' S' ?) O9 F* G6 e" Q4 x
       
6 c" L) b4 J1 O  h- y% P+ x/ y, S        if(result == EDMA3_DRV_SOK)
' F/ H' _4 W3 M        {, E. _- X; o) `  l/ E
                paramSet.srcBIdx    = 0;# I6 B3 a$ V. j4 C, e- Z
                paramSet.destBIdx   = 1;
" Z: g. Z% T% Q& r* t& d& b9 ~7 {                paramSet.srcCIdx    = 0;  R) t1 U4 g8 k0 G& E6 ?$ z# G
                paramSet.destCIdx   = 0;4 w4 z( p8 Q, u4 c8 y* l& S
                paramSet.aCnt       = PING_PONG_ACNT;/ A( [1 U4 x9 W1 s; [" \
                paramSet.bCnt       = PING_PONG_BCNT;
9 {7 x  G: R8 Z& S2 b$ M3 A) s7 Z                paramSet.cCnt       = PING_PONG_CCNT;' A2 M' R! ?5 y7 I6 K8 O
               
0 n/ u) O1 o- E  x9 r                /* For AB-synchronized transfers, BCNTRLD is not used. */
: Z* s, T( w" s5 F' S: P0 c                paramSet.bCntReload = PING_PONG_BCNT;6 ^# ^9 h$ m# H' G4 f* f' D8 W# H
; D2 R  l) o* ^
                /* Src in constant mode Dest in INCR modes */
, K6 o! O# Y5 `6 B) a$ k9 ~# A3 J                paramSet.opt &= 0xFFFFFFFDu;% S. Y9 b9 W% n( o6 C
                //paramSet.opt &= 0xFFFFFFFCu;
- M! z: S9 G8 h: ^$ H* m- g) p5 _3 B                : m, s9 @, S' p/ ?1 U- ?
                /* Program the TCC */
! ?4 I3 Y- Q+ D9 x2 t                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
  y+ v3 a$ u5 L  ]* ?) p0 `1 k. C: w
/ P/ P7 ]  F8 g: ?6 }                /* Enable Intermediate & Final transfer completion interrupt */. ?6 q' a4 |- a- \2 z& e- ^; c
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
2 `9 p: ?; _2 ~2 |0 a2 Y                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
5 ]4 S0 V5 A9 L/ G( e' j' Z+ o) H5 p2 N% w
                /* AB Sync Transfer Mode */
4 Q% j$ x& x1 S: p# F1 q  c                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
3 C4 N. ?, |  s/ B0 ^* E                . c1 l% ~: O$ M
                /* Program the source and dest addresses for master DMA channel */
  I5 \$ {8 p4 F1 `- i- Q                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);8 a/ K& C) f$ o$ T1 ~7 h; ~( T
                paramSet.destAddr   = (uint32_t)(ping_buffer);
  z0 A" d$ A/ f7 E. u! @3 Z* m0 `. H3 Q2 R) o
                /* Write to the master DMA channel first. */
& }$ L3 M1 C: Z# F+ t- u                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
4 _( _7 a" u, M* E. g/ l    }       5 X% u3 M4 @! Q9 U0 r

( `$ l7 ^+ q& ?! x        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
6 n4 o! \0 f5 ^% T: R        . F6 l) c, c( e! ~" T: z
    if(result == EDMA3_DRV_SOK)
' M, l6 Q( B  s8 i" r. ^    {
3 I9 K, y: _3 I* e2 u            print2arm("edma3 driver init success.",0);
5 I/ M7 n* h* y    } / t' A4 @! w) \- j# J
}+ t" d# g1 B6 p; c# Y0 E5 J/ k

: C/ t6 A' t5 |9 C* P# n/ v6 l7 _: u" d, D# p. S) E
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。) Y7 M; x1 I: n' ?; N2 ?1 {
3 d. O9 v0 f4 {( j

3 C) Q4 @. Z, ^5 ~( j
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
板凳
 楼主| 发表于 2015-4-29 23:25:56 | 只看该作者
Lewis 发表于 2015-4-24 10:47: e8 [0 E- O1 r+ h) ?; C
每次DMA传输完成后都要再次使能传输
( |  U$ m$ f( f) C
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2015-4-24 10:47:00 | 只看该作者
每次DMA传输完成后都要再次使能传输
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-1 01:49 , Processed in 0.043401 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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