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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
% U8 j* b' {2 E- K#define  PING_PONG_ACNT          14 n- X9 |- E: T, x. t) `2 k7 M, [
#define  PING_PONG_BCNT          8*32*40 5 O2 l( K! Y! t! l; D" j0 `: k! E
//#define  PING_PONG_BCNT       1 7 T& [# R% o6 Z" ?+ q7 y. ]
#define  PING_PONG_CCNT          16 d! t& X( m7 ^& ?
#define  MCASP_BASEADDR          0x01D00000
0 I2 Z  {" `$ s, z1 _#define  Mcasp_RXEVENTQUE        (0u)' J# a! _+ n9 s! [* l
( |' }5 d+ B& f; c% l; A
/* OPT Field specific defines */. F: P9 O9 L% n. t0 B
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)
, X, `: I' I3 Z+ W#define OPT_TCC_MASK                        (0x0003F000u)5 s- \+ l5 ^. U# W
#define OPT_TCC_SHIFT                       (0x0000000Cu), n2 D, ^6 {) `+ T$ n1 e
#define OPT_ITCINTEN_SHIFT                  (0x00000015u)% A; y  L- h) F3 I5 S, C* c( `# z
#define OPT_TCINTEN_SHIFT                   (0x00000014u); [3 C' y, w$ ~+ d( _' w0 [5 M# i7 I

5 L5 ~* e! P+ f& [1 Echar ping_buffer[PING_PONG_BCNT];* s* p! i7 o( ~0 T2 i2 r
char pong_buffer[PING_PONG_BCNT];8 d+ A  H/ N' l6 Z2 C' y% Y
0 R$ F* s9 d0 b, k& |  v
! j7 |  q$ `9 L2 p* p' M

4 L$ B$ O% J0 F
4 T0 S, N# K$ E8 A' Y- Z( Zstatic void ys_edma3_init(): t7 r# p3 D/ i; q5 M/ ?. D
{
/ B7 C8 T& N7 f- y8 X6 ?        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};5 T' z% M% V1 u* P4 P, W( _
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;9 P1 J* {, t: ^; X7 o8 U
        EDMA3_DRV_Handle hEdma;0 y. ?" h) p* z* ?! E% y9 ^8 ~9 {
    uint32_t chId   = 0;/ u2 f$ L  M; c
    uint32_t tcc    = 0;
  g( M; d% N% h# p) A- Q+ C2 a
3 s0 H% Z& _7 g/ V+ w3 x' h! c' D    print2arm("edma3 driver init...",0);
1 r; F6 `- V) h" [  L
( T! d7 b$ g, ^1 ^        hEdma = edma3init(0,&result);
7 @8 E$ X# ?5 t3 t        if(hEdma)
: `0 x% e) X, }+ b        {
# i! w9 {* [; M& t6 `" B; W                print2arm("edma3init() Passed.",0);( E4 e  x: T  _1 k" J
        }! n( l1 c( |7 j' j5 W% A! b6 C
        else
! Y% \( |1 X2 c        {# Z' Y' O9 g) w$ w
                print2arm("edma3init() Failed.",0);% z) X& d! C2 D0 N! k2 ]1 r
        }
5 E' C9 [  `) z' H* ~       
5 J. _8 e+ V' j1 ~        if (result == EDMA3_DRV_SOK)) K7 \2 ?/ T! K& B. V
    {5 |0 q5 H: A+ N* @( B
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
+ ~2 n, N. E; D% m: t                                                       (EDMA3_RM_EventQueue)0,: F* p- e' i9 h" N8 G7 B0 n4 f. `
                                                            &edma3_isr, NULL);
7 [5 u7 `% s) r- h7 a  B    }1 E! R5 S  m* n9 b2 a3 t2 F: Y
       
) I+ D+ Z2 j9 L. {9 k        if(result == EDMA3_DRV_SOK)
" S/ C: C9 n/ ]) d2 |7 S        {) ^& T' j& T& S5 ]8 H+ R
                paramSet.srcBIdx    = 0;" R8 R1 M1 H7 D  o4 j2 F
                paramSet.destBIdx   = 1;
+ B5 Z" p: @" b  t2 d( r( W) F& F                paramSet.srcCIdx    = 0;
! w" v$ t, x( s5 k3 Z                paramSet.destCIdx   = 0;  ]- V3 K, _' ]8 B& f7 f7 U
                paramSet.aCnt       = PING_PONG_ACNT;
( z# `- g5 O' ?3 U$ ?  X3 Y9 K8 b8 {                paramSet.bCnt       = PING_PONG_BCNT;
. J% U' U* H- r+ `                paramSet.cCnt       = PING_PONG_CCNT;
% D" Z0 s9 J; L* d2 A  H6 }                # ~* P. A) |+ n
                /* For AB-synchronized transfers, BCNTRLD is not used. */
: y; x# N1 O* m0 s( x: M8 g                paramSet.bCntReload = PING_PONG_BCNT;
0 B5 h$ b4 |7 v# E: K8 B  P( ?! f6 Q
                /* Src in constant mode Dest in INCR modes */% e& C  T5 N8 [, ^: P, [9 \8 M
                paramSet.opt &= 0xFFFFFFFDu;
+ _$ S+ L0 [! W  p8 |/ l                //paramSet.opt &= 0xFFFFFFFCu;
# t% X  q2 \! ^* B* A! L5 q               
: [. U0 _, ?1 [$ l3 E) p: C, V                /* Program the TCC */
9 I( }: t' `! o% T  }: V                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);0 B* L- ?- U0 d" m( f' F
) _/ _4 \* T" B3 o4 y
                /* Enable Intermediate & Final transfer completion interrupt */
; @) j% `& L  q( v                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
5 i" }6 m4 \$ `2 r0 J                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);% E4 v* `- y' E* _) N, H/ `% o
2 P' }8 `  A( A7 U. }, ~
                /* AB Sync Transfer Mode */
, ]: i- }! E6 ~  n. E( N                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);" ^- [; d( s- e& k) |. ^
                % q& _( C2 q, }* F6 H0 C- y( {
                /* Program the source and dest addresses for master DMA channel */
5 W4 T0 c. b" I7 a+ R  Q                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
* F. o! _8 i4 d/ K                paramSet.destAddr   = (uint32_t)(ping_buffer);8 w! U( n, }  s- X

: u' P" R4 w! b  a! M2 X) p                /* Write to the master DMA channel first. */
( n! R  [5 X' c7 o                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);. H! V& X1 @7 v3 e; G
    }       / H1 a3 q. \) e# I
& g0 G$ U8 U& U
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
, }' U/ p( |2 m* x       
, n$ Q$ G8 C6 A+ R3 M. D    if(result == EDMA3_DRV_SOK)
1 H& Z  P' W+ X: F; X    {
$ i/ f$ [- |+ @. Q1 Z* B            print2arm("edma3 driver init success.",0);8 A) b7 i7 `! Y- J) A: |
    }
1 X- `" e  c: O' M}
! p: L: t' E7 s& y' L6 i! j/ l. h8 f, O1 G5 g- H; O5 a3 v

4 o) @  G1 A+ C$ L% N, D8 u- mEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
: G! D2 F- s- A: l2 c: w5 h! d8 i+ @$ j  l* B8 w8 P, [
8 w9 Q6 ^2 H9 v/ ~+ W
分享到:  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
6 N/ m) [( o7 l" h$ j" O每次DMA传输完成后都要再次使能传输
! t' ~) \2 ^) J" c( ^# q1 ?# h3 {
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-14 08:39 , Processed in 0.038401 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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