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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:7 p; n+ ~: O% G& N0 R
#define  PING_PONG_ACNT          1* j/ J6 {6 \5 Z8 i
#define  PING_PONG_BCNT          8*32*40 ' U+ ~+ w: i" q* E8 E, I: z
//#define  PING_PONG_BCNT       1
8 h! C3 d9 a2 D9 p$ k- c#define  PING_PONG_CCNT          1
; f; }: A, u! M3 [4 M#define  MCASP_BASEADDR          0x01D00000
& }2 f( V9 W0 z8 x' n#define  Mcasp_RXEVENTQUE        (0u)
* v8 ^" \/ m- [8 |! ?
& y# N2 U/ d, o2 K* k+ Q9 A/* OPT Field specific defines */( b+ d0 J0 Y, B" |: S
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
  g, d$ B8 `+ e4 O+ [' Q( J$ I#define OPT_TCC_MASK                        (0x0003F000u)
: K: O! }4 W* j" _1 _( \1 J+ j6 A#define OPT_TCC_SHIFT                       (0x0000000Cu)9 L! z8 v9 d3 v+ u/ t! h! x# f
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
9 s1 H* B- a2 k; y, u#define OPT_TCINTEN_SHIFT                   (0x00000014u)
7 A4 Y4 X+ u0 P9 P, i1 E8 ]
, h# ~$ @" C2 I% S  G! s& P4 t) }char ping_buffer[PING_PONG_BCNT];
5 v3 i) p% i4 R$ g$ S0 b$ E2 ^char pong_buffer[PING_PONG_BCNT];
5 `: N& j$ A+ X3 H. j8 s( \: m4 Q  i0 c/ G( j  g( A, F

. z  E0 b6 O# V; K" C4 x$ s% P2 Y) b! K! L
# Z1 G$ y* S  r  w
static void ys_edma3_init()
6 Z* [1 q4 y6 u- G: t4 O6 _7 `{
8 j* o  m" E8 T        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};
# B1 Z0 ^# \$ @; B' L        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
2 ^$ q1 P0 x2 U9 S- t9 W1 \& a        EDMA3_DRV_Handle hEdma;
3 L0 l( G4 @3 E* K8 a5 g# j    uint32_t chId   = 0;
- G+ d) A* b. X  z! ^    uint32_t tcc    = 0;3 w. a2 z  A4 R. i
5 ~6 i; N( S7 e
    print2arm("edma3 driver init...",0);8 g4 C5 _# x+ o( M1 B; F# r
- a& ^% K9 @! x8 e; ^* `
        hEdma = edma3init(0,&result);6 p: m8 J' v: W( V
        if(hEdma)9 A( {% I  f; a5 f$ z
        {
: ~7 \% c7 y: e  g/ @! x) t  B                print2arm("edma3init() Passed.",0);
2 _% W7 y' s7 E        }
8 C2 b) b- V3 _, p        else
. H+ g& [2 x2 E( ?        {- G; `1 u' }* A; a3 N
                print2arm("edma3init() Failed.",0);
' ^5 r4 x. u7 L7 D6 N        }
( {0 t& m% n6 G! f       
, x: k- B4 u% }; g+ s        if (result == EDMA3_DRV_SOK)+ P) L& V( U6 b( s/ m+ e* Z
    {7 E) u) a1 _% f* j
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,0 e' B. G9 L2 H5 S; L3 C5 a
                                                       (EDMA3_RM_EventQueue)0,/ t; \5 v5 B# [
                                                            &edma3_isr, NULL);
" \5 J# ^% ]/ E- S  R  ^0 K( m    }* |7 }1 B9 B- N; y; J/ W1 k- @
        / A+ J# o: [# w, E  p% B  S) H
        if(result == EDMA3_DRV_SOK)
) |4 N) N" z5 o* x. _        {
7 a! f/ D" [8 s8 h% ?' f- k                paramSet.srcBIdx    = 0;
1 I9 k+ {; B1 X2 d0 R  c                paramSet.destBIdx   = 1;
3 A: g2 Y4 B) L( l+ Y. J                paramSet.srcCIdx    = 0;
) K5 }, z, g8 B5 d                paramSet.destCIdx   = 0;
( g2 T- p, T; I$ R( {, v% g                paramSet.aCnt       = PING_PONG_ACNT;2 e' F, J+ t( v3 ^2 V6 _
                paramSet.bCnt       = PING_PONG_BCNT;) J& f# b1 ]1 {# r
                paramSet.cCnt       = PING_PONG_CCNT;
3 c& z# F( e' M6 d$ d               
; r4 }; n2 K( V                /* For AB-synchronized transfers, BCNTRLD is not used. */
! O  ~7 H  J* W                paramSet.bCntReload = PING_PONG_BCNT;" ?4 ~3 c( j0 H% `" z
" v8 I2 o& W0 b5 n8 |/ ^0 q7 G
                /* Src in constant mode Dest in INCR modes */) B" [) [3 W" W* m" r7 f
                paramSet.opt &= 0xFFFFFFFDu;
8 I; F0 U3 Q! Z7 u, ]" i0 o, p, B                //paramSet.opt &= 0xFFFFFFFCu;/ \+ p0 X1 x- ]$ s
               
1 C8 r! B  a$ @0 C( ^5 C                /* Program the TCC */
9 e( b5 Y0 `# F+ `8 c                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);$ U% G6 R1 d& F

3 V0 M( X0 Q7 Q# }# A' B& |                /* Enable Intermediate & Final transfer completion interrupt */9 K3 S3 i' }7 ?4 R4 m8 P/ |
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
9 q, q1 l1 j" Z# |, Z( c                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);' n* Q- k9 R+ P8 C
# k( h* e. \6 N3 F4 l: S
                /* AB Sync Transfer Mode */
* |+ {3 \$ \! M4 n& _2 c5 M                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);/ e; k6 {% a) x0 O% L+ Y/ Z
                3 V. r8 I% ?' y2 j# A
                /* Program the source and dest addresses for master DMA channel */
% F) `- E5 {  U7 b                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
+ P# r( X9 _* |% a: ?0 ?                paramSet.destAddr   = (uint32_t)(ping_buffer);8 g4 h& s/ k* w( ~
# x1 O0 y  s2 q
                /* Write to the master DMA channel first. */
( O' s8 e4 u$ p& j- k) J0 a                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);; v4 C: F' y; [* H# T% x4 ^
    }       # v; b" N3 ^/ A! W  d

4 V  f- w  B/ Z        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);( u) u: f9 r# d4 w$ V9 M
       
, c- C. Z- c4 {  S    if(result == EDMA3_DRV_SOK)
' q6 P' A' J8 U5 b. g    {
/ _, J2 I2 D+ b3 n) W# T2 \            print2arm("edma3 driver init success.",0);
4 N4 P9 f3 a& B3 f2 {. d    }
  y; o5 X9 C, n, J- @9 O: d% X}% p* h* o+ ~! W5 z  C/ ?3 o
: _+ j4 k! u% Z+ @
/ r" ]; H6 h% a4 A
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
3 C$ h- w$ L9 }+ |$ q; d9 \$ a7 D" ^2 ^! {1 \+ m9 Z0 M" V
' G8 o, S9 v, Y% b. u
分享到:  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: z3 l' U6 f" ~3 J
每次DMA传输完成后都要再次使能传输
' L% A8 M" P- E8 R# t
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-21 22:05 , Processed in 0.041758 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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