edma3中断只能进去一次 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
4 ~$ H* Y3 ?( k) T6 H) }#define  PING_PONG_ACNT          16 b3 x  _& t" n8 G
#define  PING_PONG_BCNT          8*32*40 / B. J0 ^2 E9 z. B- y. ?7 H
//#define  PING_PONG_BCNT       1
) Z! L8 |2 Q4 G. o7 R7 C#define  PING_PONG_CCNT          1
. B; E, H0 j0 n4 @. ^( @#define  MCASP_BASEADDR          0x01D00000
6 e8 |% q: {0 u; b#define  Mcasp_RXEVENTQUE        (0u)
- f: z- G& _8 a/ p
8 r1 e9 [0 l# v! r/* OPT Field specific defines */
+ V& V' E7 A9 b3 `! _#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
9 c% W" `1 ?( _* ~#define OPT_TCC_MASK                        (0x0003F000u)! L) S& L5 t" \% N' [- {; M+ ~# g, c& O
#define OPT_TCC_SHIFT                       (0x0000000Cu)
. ]" Q/ f. k) l* U5 }9 M#define OPT_ITCINTEN_SHIFT                  (0x00000015u)8 [1 s# X$ e1 S- ^
#define OPT_TCINTEN_SHIFT                   (0x00000014u)6 X# w: n# j' P7 e: r, O2 w

* O( Q8 o$ W+ ]! M7 Ochar ping_buffer[PING_PONG_BCNT];# z& R7 t# |* e% W; @
char pong_buffer[PING_PONG_BCNT];5 s, y% {2 {9 g' _3 G% i/ e. K

/ _0 @8 F3 C" n6 c' W1 J2 O
. r+ n9 ?* L+ ]5 U! T1 j. U5 f$ g! D) v- G9 g
/ B" [1 M0 Y! c/ v( a7 C; i7 l0 w
static void ys_edma3_init()
6 Q1 B# x$ i1 t/ z  r4 Q{. s; s* e& h. ?! ?+ B9 k1 d+ |
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};9 T! N! ^! u: r& K* A1 g% y
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
3 q1 o. L9 w2 S2 k  [, j- t        EDMA3_DRV_Handle hEdma;
( R) Y+ |* ?# i# P( p, Q8 d' e- A    uint32_t chId   = 0;1 z4 @* D/ J; X/ t+ M
    uint32_t tcc    = 0;% ^. Z; h7 m+ f

( T' j) h& C+ t* M# A1 F2 A    print2arm("edma3 driver init...",0);! a" b& J- f* c" J7 D
) R; d1 y* y. L, ~
        hEdma = edma3init(0,&result);* H" X3 c4 B$ E/ f+ ]% o
        if(hEdma)
" _! r/ z( V$ [4 C  s        {( ?# g; q" }" h9 X  i1 N6 p/ w% F
                print2arm("edma3init() Passed.",0);
5 F/ W) W  D: M2 e* ~        }( q7 S7 `1 E; T: Z# b) U; ^
        else
3 e( J# ?! r( c# D7 ~$ |        {
# i1 A  g! x6 R# ?- F! ?3 l: v                print2arm("edma3init() Failed.",0);8 Q4 y, G4 B+ ]! y& U
        }
* w, C' R( ?) R! X  T% v       
5 [  [3 W  D: ~" J6 L        if (result == EDMA3_DRV_SOK)
( Y$ m; _+ d5 M8 ?# B    {( _# T' |! f" W; g* N  w% }  }9 w
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,1 H: t/ p3 e1 c7 ]: U
                                                       (EDMA3_RM_EventQueue)0,
7 T. i+ a  L7 d& i+ i6 O) @2 r$ T% M! W                                                            &edma3_isr, NULL);
% m% a- u3 Y$ r2 J2 S0 A$ U    }* A( e( q) p6 O; ?- U; m" M
       
$ m% `, H. y' ?) q% W) a; [        if(result == EDMA3_DRV_SOK)
9 ~6 X9 I: p6 s7 b7 n$ h" v        {
* i  m/ p; k( P3 E3 C) m                paramSet.srcBIdx    = 0;# ^9 |  I5 {0 P
                paramSet.destBIdx   = 1;4 x) E. o( N2 |& ?( b
                paramSet.srcCIdx    = 0;
4 {+ m' o1 k7 T% F5 C2 y" l  c                paramSet.destCIdx   = 0;2 Q' e( t! o: ~7 H" W2 B
                paramSet.aCnt       = PING_PONG_ACNT;/ u) y; Q. ^/ t
                paramSet.bCnt       = PING_PONG_BCNT;
$ k/ q* I+ q- H+ C6 B$ R: [                paramSet.cCnt       = PING_PONG_CCNT;' r7 O; z& W  ?5 c) G4 P6 h8 ?
               
2 N% D2 V9 B3 \) {3 P                /* For AB-synchronized transfers, BCNTRLD is not used. */
( H4 n0 I. C5 y- W; k/ ^& T7 ]                paramSet.bCntReload = PING_PONG_BCNT;
4 @+ I1 b  w0 J- V) m7 h' h) z# p% L$ J, Z" O. k5 [& @
                /* Src in constant mode Dest in INCR modes */7 C- e4 _# p- k/ B  T6 D
                paramSet.opt &= 0xFFFFFFFDu;
% B5 W1 _- e6 {! {7 d0 [% A8 J                //paramSet.opt &= 0xFFFFFFFCu;
2 A7 S+ c; k- S' X3 U                / G+ q, h  B' T0 I5 Y
                /* Program the TCC */9 x* t/ J0 u& U" q! Y: n( n
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
" c9 m( o0 W3 Z$ ~  p* s; c; A! f: r2 }1 [/ {& W) o
                /* Enable Intermediate & Final transfer completion interrupt */
' O/ C2 {1 H6 f" ]' y                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);8 l/ Z7 r6 O* ]
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
; q" T9 J/ R$ p1 j) S$ B( e
# }4 v- b6 }: a, G0 _" ]* U6 t                /* AB Sync Transfer Mode */* l2 `( \0 |1 W
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);2 F; f: j7 A" M, E1 D
                , V. p* \5 z7 T
                /* Program the source and dest addresses for master DMA channel */
8 w, V1 _0 M, K1 d1 @                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
7 U- V+ `- L9 r+ H% `( Y                paramSet.destAddr   = (uint32_t)(ping_buffer);) ~; ^' E0 u* A; \* O$ t9 {

! D6 {( d% Q( F% {7 g, {                /* Write to the master DMA channel first. */
8 \' z7 a, W2 Z1 S                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);$ _' t: B2 V. M1 V; D7 h6 V# a! g
    }      
, \6 w$ X( j( N7 T2 i2 ^
( k# ], F" B1 E8 E* e, R5 i        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
6 z( U. d% s" ?+ G! z; s" W       
- k) [+ Q) Y) u3 l8 O  X7 J    if(result == EDMA3_DRV_SOK)
0 H& t) R" H7 Y. U* x0 G  Q    {
6 a* N9 i+ F1 p  e7 E$ k0 N            print2arm("edma3 driver init success.",0);) T* {  g7 M/ n* {" q# Z
    }
. R0 C5 S1 w  ]1 s' Q  F}" H4 y8 ^% ~% U  {$ p' W1 C

" K! O' s6 V; q* u) z# b$ Y) i8 Q0 U: m" x
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
' P* T2 V2 W( t9 C0 A: [) K
. e6 W3 M7 j) S; g  L# @% N9 p4 M: ]8 {  S; C) |3 r, B% e
分享到:  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
: P' c% O: c9 k每次DMA传输完成后都要再次使能传输
# G  L' [9 |7 W
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-15 10:32 , Processed in 0.048076 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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