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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:
& d: t; t2 M; b3 z1 E" g#define  PING_PONG_ACNT          1
/ {* N7 t; N3 g#define  PING_PONG_BCNT          8*32*40
- }/ @# X/ [3 K) t7 W6 r//#define  PING_PONG_BCNT       1 9 `% J6 q. u0 L* m! n. {
#define  PING_PONG_CCNT          1+ L0 E+ f+ v. I$ r: S3 Y
#define  MCASP_BASEADDR          0x01D00000
: k  c2 x" x6 H) j; k( h% |#define  Mcasp_RXEVENTQUE        (0u)$ X9 j2 C/ e2 D

) D# k! \5 Z; k* j; `, U, p' x/* OPT Field specific defines */. J+ J) M3 G( z
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)0 U; Z6 T& M! i: M& Z1 F  Y
#define OPT_TCC_MASK                        (0x0003F000u)
3 i( |. S3 I0 k8 O: ~#define OPT_TCC_SHIFT                       (0x0000000Cu)
) U( f. t; w+ A! q& ]$ w4 E#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
/ s/ o% f% I. ~#define OPT_TCINTEN_SHIFT                   (0x00000014u)5 q( R' Y# L. K% x0 i5 \5 ^

0 H; D" {! H$ I- t: t! |char ping_buffer[PING_PONG_BCNT];& c* _/ z5 Z& |7 v$ w, x
char pong_buffer[PING_PONG_BCNT];
- a+ g" M4 H" A$ X" Z/ Z) V0 M& i1 M; r" S+ X0 ]
* u! X- A# y; x$ m

- x1 e5 b& |- ]  }% \" ^1 g2 q. _$ j( A1 S) O8 l0 i, B$ m; N6 S
static void ys_edma3_init()
# L/ c! a: T" i{
4 {! D" i0 N- v3 v# B3 x        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};' w0 k9 x4 F8 @- q
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;
4 \' y7 u6 f4 L4 r% T        EDMA3_DRV_Handle hEdma;' m# U# x) y. K% b( X4 R# N& i
    uint32_t chId   = 0;
, n: f" e; J: b* ?$ H    uint32_t tcc    = 0;
: c3 G: O% V# h7 y% @0 t  Y- C1 N4 t
    print2arm("edma3 driver init...",0);' n5 ~6 T7 s9 M/ s  F% t5 u

" T0 L; ]: D. }: Y- w6 h' Z        hEdma = edma3init(0,&result);# z0 b8 b' Y) L1 h
        if(hEdma)* s5 v6 n: ~9 t; n+ C
        {# l; q1 T. g9 a
                print2arm("edma3init() Passed.",0);( o$ G+ \+ k6 s9 Q- x
        }
2 [2 r" p; e# }7 ~4 ^/ k        else: s/ G4 j) z$ U$ g  i: ^) b" C( J- V' x
        {
2 |5 h4 k7 E2 {9 m, K                print2arm("edma3init() Failed.",0);1 D$ ?0 `$ f. Y% P
        }6 ^3 ?1 h- a* O, D, N4 M2 _+ y) e
        1 _7 D' c+ p; v1 ^4 T) \
        if (result == EDMA3_DRV_SOK)
% ~  z2 J8 I7 q! n" v' @4 j, {) o    {* x% {' _& n* J1 I: F  T' O
                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,0 Q% J( E, r0 c/ s5 [. G
                                                       (EDMA3_RM_EventQueue)0,
! [5 g6 i+ ?' h, B  [                                                            &edma3_isr, NULL);# I" W; G8 ]$ m9 Q3 ]5 e
    }& s# T# X' v- [% J8 m
        0 p! F& z6 ~- P) |& T0 |
        if(result == EDMA3_DRV_SOK)
5 d1 ~" G3 |5 @' ~+ v        {
; j) x, V: t) G$ s# H0 m4 M                paramSet.srcBIdx    = 0;
9 Y9 g1 J, h9 N" o                paramSet.destBIdx   = 1;3 |* |( l( T% K5 o
                paramSet.srcCIdx    = 0;
5 M' O& k( j6 c* K7 b1 }# l                paramSet.destCIdx   = 0;5 C: T% c! G1 c) p" d& F% t. B
                paramSet.aCnt       = PING_PONG_ACNT;* }5 X+ j, Z' E' z" i* k
                paramSet.bCnt       = PING_PONG_BCNT;
" K- Y- s2 }. X                paramSet.cCnt       = PING_PONG_CCNT;
- T- H) @3 A% N  b2 `; N               
, y7 X* C  V8 ^4 R                /* For AB-synchronized transfers, BCNTRLD is not used. */& W! |  j- o% F- w! ~
                paramSet.bCntReload = PING_PONG_BCNT;3 z8 H" Q' t/ h

% [3 X( ]  M, n# N6 n* |                /* Src in constant mode Dest in INCR modes */6 t# L$ i- B8 H. m" z/ P4 D' l
                paramSet.opt &= 0xFFFFFFFDu;2 D6 L8 M: G2 X2 @; {
                //paramSet.opt &= 0xFFFFFFFCu;" B& ~0 R6 X* {! T5 K+ Z0 c9 r
                8 y7 P5 l+ Q* E1 l5 K
                /* Program the TCC */0 v0 b6 S9 a2 t+ i* k: p$ C1 ]
                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
- x; I5 w  }6 J- s
0 K+ q7 O+ P0 k. O7 G' J& f7 ?' M                /* Enable Intermediate & Final transfer completion interrupt */
5 t/ T4 L/ n' l" E9 \                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);
* L% q8 Y' F2 J' y$ i& w7 ^$ L                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
2 B) x* S  R2 b! E8 i; M$ i% {1 x" z" r& R2 W! _2 Z
                /* AB Sync Transfer Mode */
& j, w$ `6 V3 j0 J                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);; u5 m. y' _9 @( J( d
               
) E; H" S; x: u, p6 e1 K3 A  X2 P                /* Program the source and dest addresses for master DMA channel */
- X- _% Q  u3 A% s                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);( O! ~7 Q+ |: D8 ^1 @& O% W4 C
                paramSet.destAddr   = (uint32_t)(ping_buffer);
) j* c* r1 c7 P5 S* Z/ ^9 e/ P
* x/ d6 |: ?3 n. j0 F" q# k% R0 J                /* Write to the master DMA channel first. */0 t% z: H2 E/ l) S7 ^$ }! q
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);! X& r) c  p- }" X6 g
    }       " ]( N$ ^+ N% M2 H. m$ |, Q
6 s) v' W7 m8 ?# U/ O6 k1 I/ f- [
        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);+ u/ R3 c- ^. _' O% V
       
" k  p6 ?  W5 {1 O+ A    if(result == EDMA3_DRV_SOK)
' f" j  ]/ {* s5 ]    {
0 ]7 X! n. Y: x5 c) F+ Q            print2arm("edma3 driver init success.",0);3 W( \' r) |. o4 w& G3 \3 D1 u. a- w) Z
    }
; m! `/ ?% w& H1 i5 s3 k}
/ R5 e% A5 S9 s2 j4 H4 A) N8 d4 r* K2 O" a: m0 O
  I7 m" }- z. q' `
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。
3 Y3 S6 k' y' p  b1 b1 N
9 F9 _2 ]4 |  {1 o8 X7 k' Q2 `/ E+ b
9 J3 S. o2 D7 p) t
分享到:  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
( L% o- e# s4 E每次DMA传输完成后都要再次使能传输
  A" o" X; U' u. ?( S
原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-3 02:42 , Processed in 0.059361 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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