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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:8 u5 D; ~& s* h" {- _4 i- |
#define  PING_PONG_ACNT          1% i# {! T/ y" [, V  n, z
#define  PING_PONG_BCNT          8*32*40
5 D5 c( c* J+ ^2 d//#define  PING_PONG_BCNT       1 5 [4 ^) M  {  e1 Y) x: |
#define  PING_PONG_CCNT          1# I, n; x5 L7 c1 ?8 x: N) w
#define  MCASP_BASEADDR          0x01D00000
' o6 E& G* L2 e1 J" s+ h8 _, Z#define  Mcasp_RXEVENTQUE        (0u)8 R. H8 w: c+ n/ k! h& b$ F; M

9 P+ U3 N0 `* ]/* OPT Field specific defines */4 C0 v7 u( D# f2 R
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)- y3 y8 L, f& x0 B2 ?, P
#define OPT_TCC_MASK                        (0x0003F000u)
2 H- q0 `! z3 I#define OPT_TCC_SHIFT                       (0x0000000Cu)
  n8 l* `4 N( y- n+ S5 P#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
8 A8 |8 c% ?8 h#define OPT_TCINTEN_SHIFT                   (0x00000014u)+ X* g( U4 m6 F$ O) u2 t' s, M" j
- j; X$ U2 O6 r$ C
char ping_buffer[PING_PONG_BCNT];
9 {/ l. @0 A; i  wchar pong_buffer[PING_PONG_BCNT];
$ `8 X! t- e- E9 o5 l3 L3 O  }  m5 C( K/ k8 z, G0 o; I9 U
* g3 X- B: s8 J
8 m) O3 B1 B! Q( U3 T
; ~& K' g, U! h; V& K: j1 p
static void ys_edma3_init()
/ ]$ x' o& P& w' w7 ?! r: x% W{- O) r* e/ h7 d. H
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};/ W2 P6 ^* j# j6 T( E
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
$ o* F" o, ?/ G( H) F  Q        EDMA3_DRV_Handle hEdma;" a- a" F& j  e
    uint32_t chId   = 0;
6 S8 Z: p( ~' Y    uint32_t tcc    = 0;  x. N3 p! U6 C( b. I. ]

9 t9 L" k% H/ l    print2arm("edma3 driver init...",0);2 j$ _; ^" S) g8 w; R+ G- k
2 a+ x, h% Y; O3 f7 D& h
        hEdma = edma3init(0,&result);, b1 i% v3 F. W) b  _
        if(hEdma)4 L- Z- y8 c7 M; Z4 W
        {( [6 S. a/ T& W2 ^; u$ F1 N
                print2arm("edma3init() Passed.",0);: A3 y$ ?" C- [; @* [$ z
        }4 w0 i& t! P; I' M3 I
        else3 t7 \! J+ k7 v; N& t. B# Q  M: e% k+ s
        {2 |) B: E, ~: U+ \' x6 W! [; E' y
                print2arm("edma3init() Failed.",0);
' d8 L, P$ I" W% Z  m! L$ g2 J        }. k; V: P- g- I2 r, o
       
) ^2 G8 p" j' n# T8 ~        if (result == EDMA3_DRV_SOK)4 N2 M9 r3 w" _9 s
    {( j6 e& f! e7 N% J$ |! J' ?# `
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,# M7 H/ ?! }5 h) N6 C0 T2 H
                                                       (EDMA3_RM_EventQueue)0,; b4 M5 x" S3 Q' v
                                                            &edma3_isr, NULL);
6 ]2 z( n2 P  k7 t. B0 \    }
  ~/ _- q$ e# Q6 D$ s       
7 Z& e% j8 J/ t$ B7 ]$ H        if(result == EDMA3_DRV_SOK)
- N  k7 P/ ^- d& [; w9 }/ G, [        {+ R: w  G, C! j) p1 r0 [6 b& v
                paramSet.srcBIdx    = 0;  c- T# u4 B6 @5 ~% N/ w5 ^- t
                paramSet.destBIdx   = 1;9 B" i1 n$ \9 W; O, h( h- m4 m9 I
                paramSet.srcCIdx    = 0;2 m, K% O; M0 C* z. o
                paramSet.destCIdx   = 0;6 V' @3 `6 k8 ^5 X4 |/ H, I
                paramSet.aCnt       = PING_PONG_ACNT;
7 x: N* c( a9 ^( z0 Q                paramSet.bCnt       = PING_PONG_BCNT;  P8 @" S  g6 r6 o% A# {  x3 I
                paramSet.cCnt       = PING_PONG_CCNT;+ ^$ D6 }1 ]; v7 W  S
               
# T+ `; h2 m& j: j4 p* V                /* For AB-synchronized transfers, BCNTRLD is not used. */
. ~' p; S+ p' r5 v                paramSet.bCntReload = PING_PONG_BCNT;' w, ?' f- d% X) z$ Y

2 }, [# [. a+ X8 i3 }& [9 Y                /* Src in constant mode Dest in INCR modes */$ G# l- ^8 B8 |, ~
                paramSet.opt &= 0xFFFFFFFDu;
' t2 v# K: i4 k- m& d1 \                //paramSet.opt &= 0xFFFFFFFCu;
6 F6 g7 G; n9 Z  m) {                * y( b* c) L- P( T/ v6 ~3 u  X
                /* Program the TCC */
, C* {3 ^% G6 N9 e9 ~7 q% {                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);9 i/ T4 p- k1 N& W) g7 B

, h9 X0 ]" r/ C7 z, x( V" {& l                /* Enable Intermediate & Final transfer completion interrupt */
0 @- |, b) l" Q) C, J+ B# i7 a                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);' e- s* o: [2 A# Z
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
5 |7 R+ J: W5 L: z! O, e& @6 {
3 P' V# Y3 g7 A* @7 G4 u                /* AB Sync Transfer Mode */
  Q2 ~3 C3 `# I! G                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);3 n2 F: U$ x5 A3 X* h0 d
                + X6 }( ]; G9 l7 O
                /* Program the source and dest addresses for master DMA channel */
; d6 y( M0 U8 _& J                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);
0 r% K. E9 N4 f' r, p                paramSet.destAddr   = (uint32_t)(ping_buffer);
) M  W  e% I* e$ q: ~6 A& T2 i0 X1 k' T
                /* Write to the master DMA channel first. */
8 `9 P6 f; b6 L* _6 o4 C. f                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);- D: w' b' u) ^5 j6 Y
    }       ; l" S/ n5 ^7 @, z( c

! }/ O' {- v/ v7 H) H& c        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);
: D/ a. n, x( _+ y9 D! d       
" k9 _# }0 @) r. r( I4 V0 ^3 z. @    if(result == EDMA3_DRV_SOK)
! E1 {( g3 a6 E" W2 t    {
8 J3 ^/ n  ?# ^            print2arm("edma3 driver init success.",0);, e  t: T- r1 B& a: @8 @
    }
  I" h  s3 N2 l% K, ~}0 A9 I3 d4 d! t# v7 k
. }# K) D  }" B' l
: K1 y- ^& p) r/ U+ h
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
1 A% L) c+ H) K2 m2 Z; _
* `: T6 N  c3 G: M9 I3 M* |" q
6 ~( @; ]# x: ~/ S' T: w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
板凳
 楼主| 发表于 2015-4-29 23:25:56 | 只看该作者
Lewis 发表于 2015-4-24 10:47  E4 I; o2 E  w$ i- ~( s& G
每次DMA传输完成后都要再次使能传输
8 f4 A( ^5 {  d' H' ]+ `6 ~9 B
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2015-4-24 10:47:00 | 只看该作者
每次DMA传输完成后都要再次使能传输
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-13 10:15 , Processed in 0.038622 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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