edma3中断只能进去一次 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
. I3 a+ W* n# u' J1 @1 D#define  PING_PONG_ACNT          1+ O' g- `+ q! {7 W' O' A; Z
#define  PING_PONG_BCNT          8*32*40 % ]: P# [) J- w3 M( P; B
//#define  PING_PONG_BCNT       1
# H! {+ X7 h2 X6 G1 J#define  PING_PONG_CCNT          1
9 [5 r7 a( J6 ~7 j#define  MCASP_BASEADDR          0x01D00000
. o1 m9 i3 B5 ^2 Z$ D4 x#define  Mcasp_RXEVENTQUE        (0u)3 O: m, U" L$ ^. I

/ _; e: a# V& T$ m/* OPT Field specific defines */
8 u+ M( v7 Z% h* v6 j#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
1 l& r9 m) ^3 V" N#define OPT_TCC_MASK                        (0x0003F000u)4 R7 K8 q0 ]- I6 S6 z
#define OPT_TCC_SHIFT                       (0x0000000Cu)
  f2 Y$ s$ E+ r8 h% E( f: i#define OPT_ITCINTEN_SHIFT                  (0x00000015u): u! k  _( P, q
#define OPT_TCINTEN_SHIFT                   (0x00000014u)$ U- s- n7 y8 x3 h+ H) x; T

! J5 w  w1 R- k) w# r% \char ping_buffer[PING_PONG_BCNT];
3 }  C; I# Q6 `" R3 `3 q/ j8 Schar pong_buffer[PING_PONG_BCNT];* P$ N: Z) ^  t, ?& }
' T1 }3 d1 `- ~( ~. p( K

- Q; x: V3 d* j1 }
- p8 m( t3 s$ M, y; i  V0 L$ P6 L! z7 A! {% p
static void ys_edma3_init()% ?- R( K5 G- m, I7 K
{
& |- ]! ?5 w" [" W! ^* j$ _- Z        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};5 Y9 i# x0 W; ^: {0 P
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;7 u0 Y, K8 r& y3 c3 X& q$ t5 X: m
        EDMA3_DRV_Handle hEdma;9 M" q4 R# E  }( v. u) g
    uint32_t chId   = 0;
, D5 l6 [1 e) K+ C5 e$ `    uint32_t tcc    = 0;8 b# Z8 K" g# Y; E9 L+ g( L

% j9 K9 [* B- g9 d    print2arm("edma3 driver init...",0);  o, L8 [& N/ s1 m3 Z

, D# [7 [$ F7 M8 x& O        hEdma = edma3init(0,&result);$ ?% d9 [, I" E7 [, I, j" U
        if(hEdma)' k. k* e/ p6 ?' a1 P
        {! \$ }. q  R& w# T1 P8 e
                print2arm("edma3init() Passed.",0);
% y2 R0 M8 f3 o! S" D/ ]        }0 q" [6 b; r$ N3 g$ J: Y3 C
        else
0 K' Y  }$ D# a# z6 A9 N2 p2 `        {( v# h! y. l# i& b0 X! A
                print2arm("edma3init() Failed.",0);
6 K7 c7 l$ k7 k8 j) e' e- _        }
+ b& e- I. H8 ?; @7 |8 _: l       
, m5 g/ x# l( e8 b$ s        if (result == EDMA3_DRV_SOK)4 X7 P) b* G! f! O  C! p
    {
$ S7 ~- [% c& i+ p                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,7 v8 o! ~$ `% J0 q
                                                       (EDMA3_RM_EventQueue)0,
# b6 r2 X  _  K/ P! {: {; {/ q! V                                                            &edma3_isr, NULL);
; T+ S& g, d: Z  y4 F5 J0 y7 K    }; p5 }( n- B# n% X8 F3 ]* v
        4 L+ v7 `% X2 h6 K$ E% D8 p
        if(result == EDMA3_DRV_SOK)
/ O" @5 ~; O$ G5 K# S        {7 J0 T6 U7 ?& u) X/ U: R
                paramSet.srcBIdx    = 0;3 m9 Y  F+ g/ i) Y
                paramSet.destBIdx   = 1;
1 r- }$ R) ]! @% |" G  f                paramSet.srcCIdx    = 0;- {/ q7 T8 z7 w2 o  l* z/ `
                paramSet.destCIdx   = 0;
4 ~1 g0 r$ E' V$ U  b9 _4 \7 W                paramSet.aCnt       = PING_PONG_ACNT;
0 P) Q8 n1 e8 G; P- z5 L+ `- H                paramSet.bCnt       = PING_PONG_BCNT;
# i6 _) v( q- S( f4 s: u  T                paramSet.cCnt       = PING_PONG_CCNT;0 n; }, b" W- }" O' Q
               
9 s, W: ?; q+ a- t$ b5 i                /* For AB-synchronized transfers, BCNTRLD is not used. */9 H4 j( J, r: v; r' L
                paramSet.bCntReload = PING_PONG_BCNT;
2 }3 G  {6 \$ W% E# j9 C, ?; Z. ^6 [7 Q) m" D+ N8 U
                /* Src in constant mode Dest in INCR modes */8 I. g* G0 l: v) s1 @- n# \
                paramSet.opt &= 0xFFFFFFFDu;
7 f9 h! {/ Y9 L* ]) k5 X2 E- c; @/ w                //paramSet.opt &= 0xFFFFFFFCu;: [' p3 q( v6 j* E7 G4 j2 W
                0 k' B3 T! r0 r) m1 G* Y2 [; q
                /* Program the TCC */
" u" [' P  }' K6 I                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
$ C. Y1 A: ]4 H' `; Q
; ^: j& H: ]- g' `8 ^/ d                /* Enable Intermediate & Final transfer completion interrupt */+ A" u; S$ L; q) _, Y# J  t! Q
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);1 A7 s, @: a0 w; W  L2 v# ?9 k
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
8 B" L3 r8 l: y6 l) Q% o/ Q3 t& y9 k
                /* AB Sync Transfer Mode */
+ z" f0 ?) G1 I; ^0 q" h                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
: o4 e3 |. S; L' ?# ^) N( Q  ?6 U               
9 h6 z( x7 ^+ d. W# P& u                /* Program the source and dest addresses for master DMA channel */- m) a) z0 A; F1 r3 a, r6 S
                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
5 ]# M( |5 H) Y& K) \* |                paramSet.destAddr   = (uint32_t)(ping_buffer);
* P. T% j& s: b6 B
5 I; o( [4 J1 t8 W  `: z0 @                /* Write to the master DMA channel first. */
5 \; Z) M# d. C; G" W                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
& R* R/ ?8 A# X, a' D    }      
8 ^* F/ x9 K; T* k) x
& T: j# t& n# j        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
) `7 h2 }( ^7 |8 f7 Q        4 o  Q0 U. K4 V' d! H# d
    if(result == EDMA3_DRV_SOK) # K' A  S/ T& @/ M
    {
9 A/ F4 n& r8 @7 R) |* C            print2arm("edma3 driver init success.",0);7 }0 a, I! F& |+ _" N8 q. d3 U3 \
    } , Z; ~) o% Z7 Z: _" e2 g
}
  Z& P% P% M2 V6 ~& x2 |+ w" Y( A( l2 o- A' M  N

- u. l0 O/ l- mEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。) Q& W- I9 Z2 q+ R' q' q

. ^& O' K) g- Q, W5 K
6 @* ?) y1 D, l+ h* ?2 _# r
分享到:  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:471 p2 C" \6 H( \
每次DMA传输完成后都要再次使能传输

  O3 S+ X, d8 i' S原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-2-25 21:59 , Processed in 0.064288 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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