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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:* G2 w& H1 F2 S, c+ ~/ O$ g9 O! C
#define  PING_PONG_ACNT          1
* ?/ R9 X" |# V#define  PING_PONG_BCNT          8*32*40 ; j3 V' b3 m$ [6 G2 E% R: c
//#define  PING_PONG_BCNT       1
1 a3 D' L$ b1 U0 v#define  PING_PONG_CCNT          12 |3 H9 @, }) d
#define  MCASP_BASEADDR          0x01D00000
; u5 @/ U5 W+ Q$ g$ q2 {#define  Mcasp_RXEVENTQUE        (0u)
1 ]4 e2 ~# W) }3 L% H4 n7 P' g( v) W4 I& f
/* OPT Field specific defines */
8 `. P" j* H" n5 w* o* ?! L#define OPT_SYNCDIM_SHIFT                   (0x00000002u)! _  Q+ U. _; I3 T
#define OPT_TCC_MASK                        (0x0003F000u)0 F9 L0 G5 t3 x3 r$ X8 k, q
#define OPT_TCC_SHIFT                       (0x0000000Cu)2 I6 u0 E" }4 E" J; h; \
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
" I3 |: ^7 W* S: n/ y* d8 A/ Z#define OPT_TCINTEN_SHIFT                   (0x00000014u), V; P- U2 m7 _6 ?

0 o" g" b  r$ X8 cchar ping_buffer[PING_PONG_BCNT];4 }- s$ p; X; U1 H7 X) F( B% k
char pong_buffer[PING_PONG_BCNT];: h( q8 H3 F+ I" W& a& B
- f  j& q& c; W

! S. G! G; s9 s; F' {2 w, I0 Z% [+ @& h# M& S( @( M0 Q

+ q* m6 H4 L+ p5 \: nstatic void ys_edma3_init()9 R- |' P; ^7 f& B, J- N8 E
{
  [) V8 S3 i3 ~, q        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
* t% K9 ~6 l: q. |# O4 {0 t& H+ T        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
. v" ?9 k- D! K& i8 k        EDMA3_DRV_Handle hEdma;
4 J6 o6 E+ h' G6 |" ]4 k    uint32_t chId   = 0;9 p4 M; K% G! r* |; P  t$ y" p
    uint32_t tcc    = 0;+ m; U: H* s. l3 Y6 v

5 k8 K3 Q- P. n/ z1 w9 ?0 {* f    print2arm("edma3 driver init...",0);' }7 B9 [" l; m0 J7 k6 [% L8 N

3 ]& o0 |& r$ [        hEdma = edma3init(0,&result);
! e( Z* z/ D- P: [& }/ ~        if(hEdma)9 S  J, b* X+ L
        {
; {  w( R8 w, x3 i2 G; b  P                print2arm("edma3init() Passed.",0);$ T. L5 C9 G- Q3 @5 k. Y2 v/ L1 H7 u+ z
        }& F8 A& j' v1 c  T- T2 E; C* p
        else
& N/ r& x$ t' r  _8 E        {
3 ~% v( w: D& B2 R& O/ W# ]                print2arm("edma3init() Failed.",0);% L. L- x1 ~9 O, E7 c
        }5 J: M. m0 w! h
       
  {0 y. J0 }3 X        if (result == EDMA3_DRV_SOK)
! z$ j$ Z. l: t( ^    {3 ~# a7 G8 `1 K; R7 s1 Q! _6 o
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,. x* @2 C" A$ q
                                                       (EDMA3_RM_EventQueue)0,
$ n' k% m( I: e  w4 j9 z                                                            &edma3_isr, NULL);' n7 w8 B$ I. ]' I/ v) j
    }0 U, E' i) O* @. _5 j, N6 K& c
        2 V1 B  D$ F+ [: H2 P3 f6 x+ @2 F
        if(result == EDMA3_DRV_SOK)* U) @3 d- r2 z( I# p5 D  Y. k* k( y6 C
        {
  n2 h3 \: T/ F. @                paramSet.srcBIdx    = 0;5 M, O6 }! A! `/ e
                paramSet.destBIdx   = 1;
8 ]1 j0 Z7 [% [8 {6 u                paramSet.srcCIdx    = 0;
0 ]$ N& e+ u. W5 P, v                paramSet.destCIdx   = 0;( f; ?1 Z+ a5 Y% C1 V
                paramSet.aCnt       = PING_PONG_ACNT;
; l) L* N7 ]# w/ o+ P) N4 Y                paramSet.bCnt       = PING_PONG_BCNT;" X" `/ _3 c, u* X+ n4 c
                paramSet.cCnt       = PING_PONG_CCNT;4 C4 W- [# q+ f. C. x' P
                - ^# N1 H/ ]" u
                /* For AB-synchronized transfers, BCNTRLD is not used. */0 y5 j" m. K7 I3 l3 {% L
                paramSet.bCntReload = PING_PONG_BCNT;
: B' G8 L* E8 z& b6 [# h
* c! r! _/ h6 L" D                /* Src in constant mode Dest in INCR modes */
2 \8 t# y- x# |+ g                paramSet.opt &= 0xFFFFFFFDu;  y5 ~8 Q: D+ t! [) z  Y
                //paramSet.opt &= 0xFFFFFFFCu;& s. d. l% n. e
               
2 i/ Z9 N0 g  _- x: W1 e                /* Program the TCC */
' [: E9 }1 I9 v* C9 B6 Y3 N                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);* L' y: o1 v0 ]( Q0 g( \$ `
8 l9 T6 z8 ^( [9 t) e
                /* Enable Intermediate & Final transfer completion interrupt */9 |6 ~4 o0 o' P1 G
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);) X- L' Y& B* q( E" W
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
% v. {0 A: Z$ r4 f3 n2 z+ i
) `) c  L' R5 v; I6 C/ ]1 N) V                /* AB Sync Transfer Mode */: M7 m. ]2 v4 |. S
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
% {& \: b8 N2 ^5 `                ! T4 L' f+ m0 c2 @% _- l
                /* Program the source and dest addresses for master DMA channel */
- r/ \) j* {8 k* b                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);  X+ M% t& l8 h; x5 y3 q; _3 v
                paramSet.destAddr   = (uint32_t)(ping_buffer);) o- t2 K$ i2 O+ J8 B

9 @6 D! k2 x0 b2 r% a& e2 j0 s                /* Write to the master DMA channel first. */. @7 F4 C4 ]2 w
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
+ `2 I3 X, I; I1 c! f( d    }      
% l6 p5 w+ L! ?) Z$ D0 q" H1 h0 v4 Q2 y- T) Z( H! t
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
; p+ F5 T2 k1 S( O& {        8 {5 [' a6 t& J) i, D
    if(result == EDMA3_DRV_SOK)
# D' A/ q& S# c5 [" `, E% N8 t, V    {
$ p: g; ^# N6 A+ s' V% D' c2 a8 n            print2arm("edma3 driver init success.",0);
2 r( P2 p- k7 T3 q0 y* l! p7 F# ]    }
5 H1 f, d) V0 Z; Y% y}
. W% P" M" e( C8 n6 M3 {
9 H0 _! K$ U2 R( L7 @. @, y
6 H/ M8 K7 w! K6 a9 H; V+ REDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。1 P" D# J5 }1 y4 m1 h, r: l0 F- b

' ]: d: E4 O6 A5 _
; l! y; Z; d: W; x
分享到:  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
4 x) {* x" D0 a7 M  W. }& D2 m每次DMA传输完成后都要再次使能传输
% B+ b! z+ b6 v# u8 c2 y5 x- o
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-17 12:23 , Processed in 0.040714 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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