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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:# z3 v9 D1 H7 T
#define  PING_PONG_ACNT          1% x& T- f# |% J" E0 |
#define  PING_PONG_BCNT          8*32*40 ) {2 y3 P* r. m/ v
//#define  PING_PONG_BCNT       1 0 ^! w! W$ [+ k8 y
#define  PING_PONG_CCNT          1
$ Q$ @8 X; V' S#define  MCASP_BASEADDR          0x01D00000/ G" M, T- [' ~* H; K& L- @- p
#define  Mcasp_RXEVENTQUE        (0u)& S+ ?" R; w" x: a; o. @

7 [* Q/ t9 G5 U- B/* OPT Field specific defines */7 Y; S, b* \/ ^$ q; k4 Y2 q! ^
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
7 O) u& c! G+ e  k1 u/ P#define OPT_TCC_MASK                        (0x0003F000u)
9 r; ^5 @! `& d#define OPT_TCC_SHIFT                       (0x0000000Cu)5 D7 j  h9 u1 q9 y
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
+ }/ W- B( W& f" {. u: T0 N* t4 E#define OPT_TCINTEN_SHIFT                   (0x00000014u): M" J1 G7 S' K' K

7 y* {' F# X  x" Zchar ping_buffer[PING_PONG_BCNT];
( a* R6 N4 f, jchar pong_buffer[PING_PONG_BCNT];
  W5 V, M2 X  ^1 F: ^# ^* q0 ]5 p
( f# _7 |5 {  ?. S5 F$ n6 A

$ T" r! S$ U6 ]1 z' F) A! @8 `* @" g3 x6 K# Q! B
static void ys_edma3_init()
0 C- Z3 u6 ~4 w- y1 L{
& T: X9 L2 x8 d+ o% h: `: z8 `        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};! N# J1 F3 U  z, Z. C
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
; C5 }6 |/ Y) T2 K* [) N        EDMA3_DRV_Handle hEdma;
+ c0 N2 Y8 J$ A& V    uint32_t chId   = 0;
& b( l" U* l( x5 }" ?. N5 ~- q    uint32_t tcc    = 0;; _$ M6 H  O$ ]2 `

. j, `6 _3 P+ e6 Z7 m    print2arm("edma3 driver init...",0);
4 Q; Q, U5 @7 h* z/ U* |
) y- y" \8 J) `5 E* _% w        hEdma = edma3init(0,&result);
  w5 f6 @1 Z9 B2 x" B) g) y        if(hEdma)2 L. u- F1 R0 s8 E! M3 h/ {) A% f
        {5 d  o. s" F+ \5 c+ ?/ U& i% p
                print2arm("edma3init() Passed.",0);
3 S/ E: z/ h/ q% n8 I9 O$ J" n        }
& [1 T( V; \" D) E3 t1 n        else
- Z6 G' \# p$ V$ K$ L        {
' B7 Z: F/ m& F3 ]                print2arm("edma3init() Failed.",0);8 S) d  y, y5 d! V0 w
        }) t+ U2 ^( a+ b$ H1 ?5 F
        0 n" o; R$ ], ^. q
        if (result == EDMA3_DRV_SOK)  f6 H- X3 O% e
    {% C( Y. F& V8 i2 l1 u( A3 y
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,0 A6 \7 B4 @8 G' l
                                                       (EDMA3_RM_EventQueue)0,1 l, a  n! p7 i$ B5 p
                                                            &edma3_isr, NULL);
% x1 ~# }+ b* r0 g4 J    }
6 X( L  U3 Q6 a$ `; F9 `       
: @, g8 S# g( h; d9 P2 T        if(result == EDMA3_DRV_SOK)  S% X' y& A7 h/ G
        {- f7 T" S4 T" p0 r& X: E
                paramSet.srcBIdx    = 0;2 N5 D2 ?6 T$ _
                paramSet.destBIdx   = 1;
  P, O: z# d  _( w* X2 C  i+ V8 }) `! ~# S                paramSet.srcCIdx    = 0;* e, t& ]- \) z/ N0 U. A
                paramSet.destCIdx   = 0;
7 }6 Z& |$ k0 t7 r. l- a/ w( [3 a# n                paramSet.aCnt       = PING_PONG_ACNT;
1 D8 T! O9 L9 U8 A1 c/ C                paramSet.bCnt       = PING_PONG_BCNT;1 [! X* m+ \2 {: d! r! x
                paramSet.cCnt       = PING_PONG_CCNT;$ s9 u' ?; N& g. N/ }
               
+ _' {) d+ w8 x6 f6 H                /* For AB-synchronized transfers, BCNTRLD is not used. */
: L. j( \6 h  I. [                paramSet.bCntReload = PING_PONG_BCNT;
- q' J& t; y% P/ G& }/ I5 \" I
6 w4 Z" b6 r2 z                /* Src in constant mode Dest in INCR modes */
2 F% ^0 s( m1 |) R                paramSet.opt &= 0xFFFFFFFDu;
4 Q6 U' E7 b* F& c1 \                //paramSet.opt &= 0xFFFFFFFCu;5 D7 e5 e! O5 e1 @6 c/ s
                6 T7 ~. h! B% W) l( \+ ]' r
                /* Program the TCC */
# ^6 }! Y9 o& t- d9 O' |  T# s$ ?                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);' A! o7 [( o" n5 X0 R$ \

- Z4 u, Z- j) c; l                /* Enable Intermediate & Final transfer completion interrupt */
3 z( I. V: O9 |* l# I7 p1 U  M4 E                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);2 N6 t% p) r/ w8 W$ G. c/ o
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
7 d- a. @, ]) x3 H/ ^6 [- O  k4 B& `) m" R( s
                /* AB Sync Transfer Mode */4 }  R& b/ A, }8 p' S: [9 a5 R
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
& I, W  G: A& {7 ~5 _( ]                ) B3 F. Y# _7 l# C1 i
                /* Program the source and dest addresses for master DMA channel */5 d0 k% H0 F, Z, `% \1 h0 K
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
$ n$ V8 C* U- f( }                paramSet.destAddr   = (uint32_t)(ping_buffer);. b) |, ^! n6 N0 K& }

% K, h  i4 t! u1 x( G% t                /* Write to the master DMA channel first. */$ G( h- j: {6 O( d/ q
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
& b& j4 m2 m  L5 E! |    }      
5 U: p* [/ {' z  E& E" D
7 v9 X) ~' I8 B2 y3 }6 F: D        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);6 i. i; a" r5 L# e- q) ?0 t/ j
        - `% f6 Z3 Q9 ^! V% c" _& J! ?4 \0 k& W
    if(result == EDMA3_DRV_SOK) ' ^0 I% K( B. Y, i. Y% a5 Q
    {
  Y; g' N* w9 g' g- h            print2arm("edma3 driver init success.",0);
; v- f9 B& I+ [    } 4 o/ y& P9 d& X) {4 f. J
}( i, o! c; R0 o1 R! |  g

( L5 H1 {8 T! r3 Y) a8 j/ L
' ^2 o# ~) N! ?' p% XEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
7 s: V! M' i% @- ~# e3 n0 G& R' q  q0 |( C! i
2 S1 X( d# A5 }7 |1 n& L4 s/ _
分享到:  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: G0 p) _* E" r& q' x, c
每次DMA传输完成后都要再次使能传输

' J# C( S8 Q5 x# a5 m& P原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-30 21:16 , Processed in 0.035894 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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