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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:5 L4 X% K' S  C. H( h
#define  PING_PONG_ACNT          1# L2 H6 N" ^8 w% c+ ]
#define  PING_PONG_BCNT          8*32*40
1 I/ C( g4 j; {; v//#define  PING_PONG_BCNT       1
) `0 N0 ]/ p1 e/ Z#define  PING_PONG_CCNT          12 t; u. \$ U' Q/ P, [: N5 r" W
#define  MCASP_BASEADDR          0x01D00000
0 p# n' _) B1 r' Z  ^2 \( o* ~#define  Mcasp_RXEVENTQUE        (0u)
* L' D8 J4 k% v5 }* h0 L( U8 R" y
+ @  q% y. V) y( X/ q/* OPT Field specific defines */
( w% b$ n6 a1 f! l, U#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
" @. `/ U) l& O#define OPT_TCC_MASK                        (0x0003F000u)
- ?3 }) n( z/ O0 g( |9 }( b6 N% ~#define OPT_TCC_SHIFT                       (0x0000000Cu)
- q3 l4 k$ q6 I" ]( j1 `#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
% I1 R. L/ [& M#define OPT_TCINTEN_SHIFT                   (0x00000014u)
4 Y, n' I% P% \
  m( H" L/ r: `" p2 u# achar ping_buffer[PING_PONG_BCNT];0 ^0 s1 ?! @; e
char pong_buffer[PING_PONG_BCNT];
! F" l/ Y" h, `  i0 X. w* F  X7 w
! P. c! \% ^. P' N+ M
* B, S' \5 l* o3 v8 k9 [
; g9 C4 P4 ^  T1 c+ X" K2 s* P# }1 w' {* Z: H9 E$ ?
static void ys_edma3_init()
( k$ X$ S% g) p; W) [1 {# H/ j{
; M% H3 V, b1 H+ N, L        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};. v! q5 b5 r1 g& }7 P/ V+ `8 \  c. B! I
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;/ U) Y, `, e) X/ J( v0 Q! C% [$ {
        EDMA3_DRV_Handle hEdma;
+ H% ~) r2 i  _    uint32_t chId   = 0;( {7 n% w6 ?1 L- f2 a; V* Y
    uint32_t tcc    = 0;9 m7 ]4 N* x3 y8 W/ z
! L8 f  |0 ~1 O7 \! z4 l1 h
    print2arm("edma3 driver init...",0);7 Z$ U. Q3 \  t2 v8 T* B
+ z! m6 M# K5 K+ X
        hEdma = edma3init(0,&result);2 P  i1 p. h, V  k* d  u7 D5 ?
        if(hEdma)
, m8 E+ G8 F& [2 k. j1 S6 z, a        {
0 V/ o2 t" K& H6 E                print2arm("edma3init() Passed.",0);6 q- s; k% s6 g
        }
9 n+ R' L5 r; Z2 a, E        else9 H" E5 a0 @& K
        {8 P# r7 G1 S4 @" \1 X
                print2arm("edma3init() Failed.",0);7 [* V$ ]7 {  v. N" p/ z4 R
        }
$ w# R) g) I4 B       
5 A: ^4 v% q5 I- s' ~        if (result == EDMA3_DRV_SOK)
7 g* y. V. a$ J    {
6 m$ Z! j6 n7 J  [% r! _. C" T                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
3 A2 D: U' H, u2 D7 \" [/ W; p                                                       (EDMA3_RM_EventQueue)0,* i" X5 A. z$ Y
                                                            &edma3_isr, NULL);( Q9 E' v% F5 C* h. S
    }
- I: v1 U$ u4 C3 ]' k5 J* M6 `6 O        9 k$ H9 v* b2 N9 A( G! {7 h$ C
        if(result == EDMA3_DRV_SOK)  A) z8 z! B4 ]' ^
        {
! A5 j- m$ N: q, ]* ~% [                paramSet.srcBIdx    = 0;
. ?3 W8 K+ O* H  Y( H) G                paramSet.destBIdx   = 1;
6 C. d$ a2 }4 D: p7 z) M% E6 x7 j                paramSet.srcCIdx    = 0;( s) U' K& ?1 K7 |" M- E1 m
                paramSet.destCIdx   = 0;: L9 P8 N; ~# `3 {2 X9 T. N
                paramSet.aCnt       = PING_PONG_ACNT;
# {' V( F) e2 m1 Y                paramSet.bCnt       = PING_PONG_BCNT;
5 t4 ^4 M. O, y$ L6 ?0 Y1 i                paramSet.cCnt       = PING_PONG_CCNT;5 m: u4 F, U' E9 G/ J+ m, P
               
0 X) u! l# v' ~; e5 y- p! F                /* For AB-synchronized transfers, BCNTRLD is not used. */) `% [5 r& x; V) v" A% T7 w
                paramSet.bCntReload = PING_PONG_BCNT;
8 R0 U6 `: v- J5 k0 W/ P+ c8 e$ O0 X3 E  @5 }
                /* Src in constant mode Dest in INCR modes */
6 \" B5 i+ f% V. V5 G9 d& A& ^+ ~                paramSet.opt &= 0xFFFFFFFDu;9 f- F$ B! n% S1 c
                //paramSet.opt &= 0xFFFFFFFCu;
$ A$ R! |9 V  C( ^3 v               
0 l+ M$ J. @8 n5 V9 G0 B& ~% }* G                /* Program the TCC */, Q, F9 D3 h3 E2 K
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);: N3 p& ~7 k% e
4 i& U& N2 U: J  ?% d$ d! u
                /* Enable Intermediate & Final transfer completion interrupt */  I) p2 d& [* ?- }
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
0 `' a; M' e( E4 P0 {                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
8 Q4 S$ E  ~* A' x( ?; I9 l+ d( @3 C# _3 R* b6 i/ I  l/ \3 S
                /* AB Sync Transfer Mode */
$ r7 x: A, h2 W$ C2 j3 N                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);  P/ H: c+ s# {
               
: U3 L5 a% z6 M7 e                /* Program the source and dest addresses for master DMA channel */' _, H1 r7 I7 |) }# @: ^+ F
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);( p% n3 v. p" ~. U
                paramSet.destAddr   = (uint32_t)(ping_buffer);6 C% p4 f3 S* r! w+ q

6 J: l) d( f& r& H7 [' g                /* Write to the master DMA channel first. */7 }0 W) W& e/ d* I0 q! x% u) J
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);# U  Z) d1 i* ~; j5 D$ [6 n) F
    }       4 C' ?2 h, C+ p8 a$ x

; k# t5 A0 ]  C* ]        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);; l6 x# b# b4 i" T% F: `: |' g
       
7 ^( |" x+ u# Q1 |' v    if(result == EDMA3_DRV_SOK) 4 K/ {- w- ?9 I- `5 `8 n/ }
    {
% X* H" _: l! H) B' B  l            print2arm("edma3 driver init success.",0);
# y1 z6 p4 E5 S" u    } : X0 j1 C2 s8 P! c3 Y; [( l
}
4 f( s5 K3 p* s) M4 |* Q" X9 j9 H4 }. Q. }: V' A( L: t* ^5 X

/ S! t. @+ C1 |7 h. xEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
8 z  @' d% x: U0 d9 Y/ T2 \& Y2 n' j, A. i

5 [+ V" k0 a) [/ q2 j
分享到:  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
9 [7 F' [8 a+ z& H, q; g& n每次DMA传输完成后都要再次使能传输
5 [6 B  y* b, D1 L- a
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-29 06:22 , Processed in 0.038877 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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