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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
1 D! ~; z7 U7 K( I#define  PING_PONG_ACNT          17 ~7 |4 r) Z3 @7 `* ~2 {/ w
#define  PING_PONG_BCNT          8*32*40
( l  Z% Y5 s* X+ _" O- i//#define  PING_PONG_BCNT       1
" r5 @/ N: r/ \: b#define  PING_PONG_CCNT          1
& c0 n+ z, |+ Y" E$ o" w#define  MCASP_BASEADDR          0x01D00000: ~! Z: d+ d0 J- t% @4 H
#define  Mcasp_RXEVENTQUE        (0u)
8 T/ a4 _, l9 U$ A' I& E, H% o$ \+ }+ {
4 B; H4 \. t6 V2 E% O& i3 s/* OPT Field specific defines */
/ d# ]" Y5 G" u" W) R1 C#define OPT_SYNCDIM_SHIFT                   (0x00000002u)9 Q6 U# I1 ^* U) h4 N
#define OPT_TCC_MASK                        (0x0003F000u)
4 ^- P" [* e+ G  b#define OPT_TCC_SHIFT                       (0x0000000Cu)
0 i( A1 ?+ w$ {9 O#define OPT_ITCINTEN_SHIFT                  (0x00000015u)* i7 @# T* u# o" B5 b% F
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
+ W* m5 f$ I( |
2 F9 N9 I0 d9 B9 Y  p8 Achar ping_buffer[PING_PONG_BCNT];: p9 l' K* f: X" j/ X
char pong_buffer[PING_PONG_BCNT];# E6 }3 ?4 x# T
$ Y5 O) V7 X0 |- Q( p

. t1 Z* }% [$ I. ~# W7 `# ?. M
) l4 ~( t9 F8 g5 j* o! C+ H( T
# v  Z$ g! B8 y! |static void ys_edma3_init()
' W" |6 ~" D# D$ y0 ]{
( i& F7 P0 E& h2 l4 Y7 j4 Z5 U+ [        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
, x/ Q2 W, l! Z9 N        EDMA3_DRV_Result result = EDMA3_DRV_SOK;/ U* d3 f- ^$ j* ^8 u
        EDMA3_DRV_Handle hEdma;
* \1 T; Y6 d: v6 j% p5 j) l: n    uint32_t chId   = 0;7 z, O6 _( Q4 y! T
    uint32_t tcc    = 0;
4 k+ T% U  J, W1 C! L5 {1 ]: K9 Z, P/ }  b* r/ \3 M9 a1 w3 U
    print2arm("edma3 driver init...",0);- q' n& n9 E$ S; B" u

! C2 a; A9 o2 Z- Z        hEdma = edma3init(0,&result);
4 v2 E  l7 j$ T, J        if(hEdma)
2 S. Y/ \6 Q! e8 X" p: d; s: `% I) U        {
  j; E( P: O0 l( X6 e                print2arm("edma3init() Passed.",0);
8 l4 N( g$ P6 _0 O2 P' y        }
8 Y. n- o- r1 k- f; Z        else
+ ?2 m. J8 x; \& c" O6 N! v        {# B4 u7 h+ v6 w& W6 T6 f
                print2arm("edma3init() Failed.",0);6 H8 l/ k" A% n; B
        }
) @3 K8 k  g! ?+ \& @3 W        8 ~1 y' ~; r6 N6 H
        if (result == EDMA3_DRV_SOK)
- r1 J7 c0 V# e2 _* [9 n    {
* |" p6 U6 m0 ?2 @5 `- m1 c                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
7 c. e. Y7 B# [/ k# K                                                       (EDMA3_RM_EventQueue)0,
) u. G0 `1 Z; y- a9 h& V( A. b                                                            &edma3_isr, NULL);$ n) x7 f4 E8 I2 Z/ \5 |
    }
. j. K2 C+ O; `       
! Y& R$ Q, h$ O; S! S* b        if(result == EDMA3_DRV_SOK)
- t5 {- a  ]9 h7 G( [        {
  N* y, q; s6 S; @4 B0 [" w" D                paramSet.srcBIdx    = 0;
' l/ k3 |# @. r& Y9 S                paramSet.destBIdx   = 1;! T) k( ~, W6 A8 ]3 R* [+ ~
                paramSet.srcCIdx    = 0;
" @; v/ F. p0 j( p                paramSet.destCIdx   = 0;) S0 Y7 ~! A8 z/ a
                paramSet.aCnt       = PING_PONG_ACNT;
- N- d& Z3 V! }2 \6 L% n                paramSet.bCnt       = PING_PONG_BCNT;
: e3 n8 J3 W5 v1 e                paramSet.cCnt       = PING_PONG_CCNT;
: U/ n( D+ |& z               
- h( o5 g5 S1 Y# V8 m                /* For AB-synchronized transfers, BCNTRLD is not used. */6 G8 n$ n$ v' w- f8 m( ?
                paramSet.bCntReload = PING_PONG_BCNT;
7 c& ]& R8 Q; m2 u4 u4 o0 }; t! p9 g. v
                /* Src in constant mode Dest in INCR modes */# K8 C7 E& x, s5 \9 b# R
                paramSet.opt &= 0xFFFFFFFDu;
( I2 m  r" M; l' F                //paramSet.opt &= 0xFFFFFFFCu;
  Q& e" X: }; s$ J+ ]- j" S. \                - [$ H- O, G& S5 ^9 [3 ]8 i5 ^
                /* Program the TCC *// I; R, ^- j# p2 a
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);7 a+ T1 x: y/ b/ y# y7 a
( C$ p- R3 y1 I/ X6 y$ r  {
                /* Enable Intermediate & Final transfer completion interrupt */
- _  [1 A. x( d- ^: N                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
0 ~/ Q" a0 U+ u/ k                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
  ~5 A- ^. w9 M& _1 W+ N# H! a" |* I1 k+ `& P2 U6 f0 ?! _/ }
                /* AB Sync Transfer Mode */
7 }7 \* k- ^1 a0 C                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
7 b' r! F( v8 l, G               
. w- y- h' m- i; S5 G2 k, L) Q$ ]                /* Program the source and dest addresses for master DMA channel */3 F7 W9 @7 p# V* W+ L& P
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);$ E! S/ _% `  S' O# u/ p1 I
                paramSet.destAddr   = (uint32_t)(ping_buffer);
6 @- \: A5 G) @0 X9 B' o# A% w1 Q* @& U( G
                /* Write to the master DMA channel first. */
0 g9 C4 s% g1 j9 Q                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
; j/ w- |9 H0 I0 H7 m- B5 y  a    }       / k3 C6 D( b3 j$ \

% t/ R5 {7 O5 k9 H/ V$ V7 k9 b        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);& I- x& N4 N' l# Z( V" q- |# p
       
5 |) a, e2 {) A3 p# s0 N% |7 O    if(result == EDMA3_DRV_SOK)
+ k; W  O: @( p/ {, T: e1 a: ~    {6 V& @  t( {) v4 o3 I3 C% h
            print2arm("edma3 driver init success.",0);
+ _7 ?( C) h2 l2 F5 H# [    }
3 [% w1 Z  ^* |  A" `4 L}( J. Q3 q5 C0 g" m" D* L! Q( x" x

/ G7 \' L2 ?* \2 _& h; u8 V4 a/ }7 |' F, N; Z# z
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。! d5 M" |) [. o/ D

; Y! |$ a. ?. {1 i) m# j/ S0 \6 }  d
- \( w( ~4 D' g. S1 |0 f& I; |
分享到:  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
% g% s/ l9 t% y. m每次DMA传输完成后都要再次使能传输
0 x: ~  C; m; i7 w7 j; |) \: v$ f
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-30 10:40 , Processed in 0.038740 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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