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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:& h/ x, }; d( M* `
#define  PING_PONG_ACNT          1
9 j: V2 c0 F5 G#define  PING_PONG_BCNT          8*32*40 ( w. Z8 ]* M  @' z
//#define  PING_PONG_BCNT       1 : P+ @. Y% D/ K$ `: Q0 [
#define  PING_PONG_CCNT          1- _) @: I$ K/ M3 [
#define  MCASP_BASEADDR          0x01D00000
5 g6 s- Q1 o0 \% o#define  Mcasp_RXEVENTQUE        (0u)$ `8 Y1 D$ f* L4 U! H- n
  P- Q+ w9 I- I7 P  J$ d9 V9 `5 _$ |
/* OPT Field specific defines */# V7 N6 b' R* ]) T! N$ y( i- v
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)1 [/ b; o) s- T2 L5 y' Q6 j
#define OPT_TCC_MASK                        (0x0003F000u)
+ T6 T4 ^8 u* g& y# Z7 l2 w$ @#define OPT_TCC_SHIFT                       (0x0000000Cu)3 d. C: Z# C% C8 H& ~; y
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)% U0 K. s$ a8 w) a3 @1 F8 c
#define OPT_TCINTEN_SHIFT                   (0x00000014u)
5 Y: ^9 K" @- U! o! n2 i( q- U% j5 E* Y0 l8 t
char ping_buffer[PING_PONG_BCNT];
/ X  a: ?5 i3 Q3 S/ d7 `& S* V. echar pong_buffer[PING_PONG_BCNT];. |$ M; s  _6 x: j
- N  p( F9 p# t
' D8 y% C" R# m, n( z" ]

# x/ r3 C1 m' P  v0 d3 q
! w2 P) J; Q) estatic void ys_edma3_init()( _# w& S% c/ l* }7 p& j/ z
{
6 c" m9 g% f, i8 I  W* `        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};' L  n2 S3 c: O3 n# U6 `# y
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
& y! M) t9 _" l2 O" P4 p2 [        EDMA3_DRV_Handle hEdma;  q( `5 R- t8 F! D3 {/ Y( t! n4 K
    uint32_t chId   = 0;0 o/ W: L( K! s' E7 {
    uint32_t tcc    = 0;9 ^0 Z9 R% `% \$ j; C) i) t

" J2 b  {8 q3 j+ A* l" c7 Y    print2arm("edma3 driver init...",0);4 ~5 s, H6 e: r; e

3 c9 t. u4 T' \) w# O        hEdma = edma3init(0,&result);
! \. K# O/ d" i/ D1 q        if(hEdma)) R+ {/ @' n) ~, T
        {
( N* N( O8 p0 B( D8 m' c                print2arm("edma3init() Passed.",0);, X' l0 t# Q; }& `- o
        }( G5 [, x; J0 u
        else* S, v# b5 F: o, E4 f; o6 O
        {
; Y6 {! h3 ~+ |4 R                print2arm("edma3init() Failed.",0);; z9 _: z: j# K( B
        }( `7 k( O, b- N( q' D5 b, s
        8 P. a7 Q7 @6 p- ~7 f
        if (result == EDMA3_DRV_SOK)
+ E2 x5 T6 P" J4 Z; B) p  T    {
& c2 I5 ?3 P! m+ b5 l1 v                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,1 f: Z" n+ d2 H# `: d0 A4 Q
                                                       (EDMA3_RM_EventQueue)0,4 H% U6 k" ]0 W6 p7 J9 S! [2 @
                                                            &edma3_isr, NULL);
2 z: \! v. o% G0 c6 j( Z    }# ?6 I/ H( J( J3 d, W9 a
       
+ d9 q! G0 C) l, ], y        if(result == EDMA3_DRV_SOK)
5 t% x. ~" h2 N/ F$ ]3 b" F. f        {
$ r; m! N8 }8 s1 Z) D$ F                paramSet.srcBIdx    = 0;
& Y* j0 Z: c  y3 P& i& M2 Z$ z                paramSet.destBIdx   = 1;+ ?/ W$ I5 h0 |# E. E# G: [
                paramSet.srcCIdx    = 0;4 {, Y5 H. i- ^, ~  o; {* D9 n
                paramSet.destCIdx   = 0;+ K" h  d, c4 I- r7 h" h; Y9 X& A
                paramSet.aCnt       = PING_PONG_ACNT;
9 T( g$ K3 q- P# a3 N: u. q                paramSet.bCnt       = PING_PONG_BCNT;
* F% C6 L6 l6 C: l* u8 J" C                paramSet.cCnt       = PING_PONG_CCNT;
' P$ g# p% f6 o  g               
8 i1 F# {% s5 l8 e) ]                /* For AB-synchronized transfers, BCNTRLD is not used. */4 d1 z- A3 c5 v2 r
                paramSet.bCntReload = PING_PONG_BCNT;, ~  {% z3 s. B: k: h% ?( \0 M

" a  M. \5 e; }+ s. C2 |                /* Src in constant mode Dest in INCR modes */- y8 I9 w0 d3 |; G* P# F5 C1 F: q
                paramSet.opt &= 0xFFFFFFFDu;, Z# V; B6 P) R  t% Y
                //paramSet.opt &= 0xFFFFFFFCu;
! \: r4 m& v" i7 Y7 r: }' c5 j! ?                # R/ i% P5 Z/ v1 Q) g% x8 S) _
                /* Program the TCC */, D- H! r  ]1 J; u0 b5 X
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
' X0 p9 R, _/ y  E3 N4 \  J7 n, b6 Z1 o+ I, ~( ~& ~
                /* Enable Intermediate & Final transfer completion interrupt */. z  A* R' K. w+ Y& G
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);, Q4 N, l& D. X# d! }, Y! l
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);! g% G- M: r8 g. z

; y9 H; [4 P7 \6 J, s* u* h+ \                /* AB Sync Transfer Mode */. s, I8 r3 S, P, b/ p6 |
                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);7 D) F7 g$ l  H5 }
                ) D9 E, [$ N; e0 \9 L
                /* Program the source and dest addresses for master DMA channel */
# L- f9 z) }5 ]1 L& x- G                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
2 b2 c, D( [8 q) M                paramSet.destAddr   = (uint32_t)(ping_buffer);. L3 u/ x3 n( u. E2 N6 [
$ c$ L6 K3 _$ D) p/ P
                /* Write to the master DMA channel first. */$ `/ u6 ^" H9 |0 ~0 S0 E% h
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);$ B7 W3 F5 s- E: h$ \* \
    }       7 }6 ]" U3 P& x: ~6 b

4 v& n. m; ^" W" ]% y        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);. V/ M7 S$ S( E. J+ Q6 G# \2 @/ f) @# ]
       
* R9 S5 g$ f0 A5 Y/ x9 J" i    if(result == EDMA3_DRV_SOK)
& m" g' u; |, Z# V& `    {: r# o2 k3 i/ o0 C
            print2arm("edma3 driver init success.",0);
/ m/ |  E% {( G; i1 _    }
; Z) t5 l/ c+ U  P7 w. j}' r: `2 d6 @4 J
. Q2 a: [; U+ d- d+ }1 {5 b
0 J! j0 y* u3 b# X7 @+ Q
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
1 e- E1 _3 Q0 k! }; l
! \9 H, B# Q! t/ F$ @2 I" h
! @; x: K- i- O/ D' l. P- Q0 V; e7 J: o
分享到:  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:473 i# Q; |% m8 K3 l
每次DMA传输完成后都要再次使能传输

$ H! U% k, }9 Y( C2 O, u9 C) J原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-14 10:31 , Processed in 0.036498 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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