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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:. \; x5 d9 v4 J- ?9 J) N% ~2 a
#define  PING_PONG_ACNT          1
( p# s* g$ T$ b) H( j/ v- j#define  PING_PONG_BCNT          8*32*40
; f, L) q4 `! k//#define  PING_PONG_BCNT       1
+ _% O& X. `  _  P2 ~#define  PING_PONG_CCNT          17 e" ^+ v! n! e) S' h8 O
#define  MCASP_BASEADDR          0x01D000004 L7 M8 m1 D2 Y3 A
#define  Mcasp_RXEVENTQUE        (0u)" t; }6 I, K/ B$ F& V6 s8 r

  r4 D( y0 Z4 Q. f/* OPT Field specific defines */" \% r' z, w8 j% ]8 l
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
- ?/ W  ]# ?" P#define OPT_TCC_MASK                        (0x0003F000u)
8 \( N; a* Q7 {9 T+ x/ j3 j+ f#define OPT_TCC_SHIFT                       (0x0000000Cu)
0 ]2 a8 F% g! v( U8 f# @#define OPT_ITCINTEN_SHIFT                  (0x00000015u)( W) g# A! ]/ a% N  e" Y' ]* z3 m) b
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
2 l7 ]/ p, C, T; j
/ K0 Y/ _4 A  ?5 D+ |6 qchar ping_buffer[PING_PONG_BCNT];* d% n; R7 t' X& u& a3 [8 N: ~
char pong_buffer[PING_PONG_BCNT];
  y- V& A# E/ i% ^6 \" c/ L
* N. o) }* y# d) {' ]% c$ T. ^! T2 c" F- h6 x

& [0 m  ]% H2 z9 H- o# R, K9 D4 d5 I& z8 ^; w3 |
static void ys_edma3_init()
$ C3 u$ g6 H1 y* @% j{; |" C$ y* R/ G* _
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};/ R3 x: h& V1 ]1 W
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;3 Q$ i* {: G; Z* S
        EDMA3_DRV_Handle hEdma;
2 n4 {7 @0 o3 B( N' B1 V; B    uint32_t chId   = 0;4 F! }& z2 E: w9 n9 ^( ?  ^
    uint32_t tcc    = 0;6 @: U6 h: f* e! [/ y$ V
  ^% m# o( O" @9 }$ |* r6 f# t; P
    print2arm("edma3 driver init...",0);7 Y4 w# z3 u9 S+ G: n$ H

( E# B  z7 [7 P$ V: V1 u2 z. J4 c        hEdma = edma3init(0,&result);
6 z* `, J4 A- {. |! U. {        if(hEdma)) `1 T0 A& R, z2 u6 p2 o2 c
        {
% F3 G- I" K3 i% B4 W                print2arm("edma3init() Passed.",0);; D/ w# K! U$ ]  J4 O
        }
! ?' t# U% _, R# Q6 w. M        else
* u5 v- ^) |" J9 K$ k7 A0 P        {: O/ j; B0 E2 _/ G
                print2arm("edma3init() Failed.",0);
$ P; Z1 b4 F/ p% f        }  T6 }- S3 o& l0 C( h: p; E  X
       
3 X5 ]4 u& [! o+ S* J        if (result == EDMA3_DRV_SOK)2 P* [  R. F; v8 x4 o+ [+ c6 e. F8 z
    {1 I5 p! B& X; o1 `
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
" n1 \. x2 G3 h( X                                                       (EDMA3_RM_EventQueue)0,
8 C6 b. k/ V/ Z1 N                                                            &edma3_isr, NULL);) `( o3 }3 x, x
    }! T) _2 h% I) B* k- v# @
        + I- |7 P) F9 n
        if(result == EDMA3_DRV_SOK)
+ q! s  z; i4 D3 n        {- @$ p# e/ R( C- _: K
                paramSet.srcBIdx    = 0;( N& }, I. Z8 W( i1 i( Y# m
                paramSet.destBIdx   = 1;/ ]; L. ]* V  y3 r' e1 ]' t
                paramSet.srcCIdx    = 0;% O: D! E- b+ G: x) A
                paramSet.destCIdx   = 0;) N% ]3 d% [* `  V' P4 w) l( e
                paramSet.aCnt       = PING_PONG_ACNT;
0 o4 {6 i; _+ r5 g, e                paramSet.bCnt       = PING_PONG_BCNT;
( [. I; I  |' @# |* _& F; H) v                paramSet.cCnt       = PING_PONG_CCNT;2 `3 \5 E0 l  {/ a
                5 M- Y8 O  y, }, {+ R
                /* For AB-synchronized transfers, BCNTRLD is not used. */
( f) s) u# {8 m/ ^                paramSet.bCntReload = PING_PONG_BCNT;% k# z& b. A1 Q" c
7 h# z, A3 K" \( r9 u4 {
                /* Src in constant mode Dest in INCR modes */, n+ F/ z; ?+ X! v7 \; y
                paramSet.opt &= 0xFFFFFFFDu;
6 r6 w) x( Y) f4 {9 a' R/ R/ {. ]                //paramSet.opt &= 0xFFFFFFFCu;6 |6 \' n* L+ F, m
               
0 V4 u" _/ o+ b5 }% f3 b                /* Program the TCC */
$ b( a( T/ i8 h' S, |# b                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
1 Z5 p) V2 I; Q. E- v" Z: k5 R1 e. Y( Y* R& h7 i
                /* Enable Intermediate & Final transfer completion interrupt */# d) a# l! F2 ^/ U/ }' l6 A
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);! u  Z3 G) g0 ]8 Z
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);! ?4 A5 O6 c# z3 e& A

. x- w& I7 l3 n- b" o$ Y* A; Z. Z                /* AB Sync Transfer Mode */3 U( V% E! \; ]! y7 t, n2 S2 r
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);4 N; H* S# L- r4 W5 ~) I$ r/ P
               
0 x+ K8 C, `# T0 O/ f2 d4 s                /* Program the source and dest addresses for master DMA channel */. q' H& d8 V# v* F! x( d/ n! C
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);3 G7 `9 z! f7 |8 W2 P4 J0 a
                paramSet.destAddr   = (uint32_t)(ping_buffer);
, F$ {& v3 H) }  u) Z6 I; j  f8 G+ O% p6 a" {, G& ^
                /* Write to the master DMA channel first. */' `- k' g' [6 j; a' h* H6 @; j
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
& \+ M; C' ?3 w4 j5 a1 {    }       8 V9 M$ z2 n6 X( l7 L
) i. _/ R2 ~8 g
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
8 ?) _$ E1 S) ?6 z, p       
; q* p; G7 \0 s% \# ^3 r    if(result == EDMA3_DRV_SOK) 8 I8 T! r7 H1 @# I
    {
" q8 j# W0 _, N5 i, @            print2arm("edma3 driver init success.",0);
. c+ k; l1 S6 D+ F! {    }
4 O" b; W" v% g  t8 v. T}
3 V& m4 T) I# R9 c8 G
! }; J  G" |6 W3 M
8 d' E( Z6 s+ JEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。$ n7 _+ v/ Y, @" Y. j! H

9 s- x' _: l% ^1 L/ m
( l1 o) f4 m* N5 A
分享到:  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
$ j+ }1 t8 v9 `  C( [9 h2 H" T6 h每次DMA传输完成后都要再次使能传输

8 G5 g2 e% Z( K5 q. W3 S& E原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-20 11:22 , Processed in 0.039701 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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