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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

edma3中断只能进去一次

[复制链接]

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
跳转到指定楼层
楼主
发表于 2015-4-22 22:01:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下:; j0 s' I8 p0 B
#define  PING_PONG_ACNT          1
' \9 `' d7 i: t* ?  q+ Z#define  PING_PONG_BCNT          8*32*40
" {( J& E3 \5 y; \/ Q& }8 O- G//#define  PING_PONG_BCNT       1
8 G' |. ?/ E6 B, ~3 p2 s* V7 J#define  PING_PONG_CCNT          1
+ G; K/ ^1 G- U! Y. C; I- t0 m# B- R7 |#define  MCASP_BASEADDR          0x01D00000; w  B8 Y" ]0 d. ]  \
#define  Mcasp_RXEVENTQUE        (0u)
: X1 ]0 T; F7 o% E8 T
; M5 ^& N" x% {( R4 d/* OPT Field specific defines */" X7 w8 A5 C& J9 ?1 {" P
#define OPT_SYNCDIM_SHIFT                   (0x00000002u)( _+ M5 N& Y+ B* a) Z, N- x% k3 }
#define OPT_TCC_MASK                        (0x0003F000u)0 c4 [& H; Y  {+ Q
#define OPT_TCC_SHIFT                       (0x0000000Cu)
2 X: k+ M9 G& ?/ `5 [0 ]; G#define OPT_ITCINTEN_SHIFT                  (0x00000015u)
! u/ j% o. _: T7 z% U5 x( n#define OPT_TCINTEN_SHIFT                   (0x00000014u)5 k9 Q! T: s3 X  Y% C& w  O) o  B2 R
, `% ]4 D) |# X! F  L, X. ~# W
char ping_buffer[PING_PONG_BCNT];
9 Z9 c; e: P( S# E8 M6 S5 Ochar pong_buffer[PING_PONG_BCNT];
/ F$ @6 U/ M; ]; W: u/ l1 R6 ~. L5 |
, v  P2 Z& a1 g: }
. V& t$ w" A# I  A6 M, g) P/ |0 M

/ B3 o/ U" m: F) P: p% g: Qstatic void ys_edma3_init()
7 O9 ?9 |( }, H( r, N; V. L& _{# Y2 `% c& `4 z& n
        EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};5 ], G6 Q( X! V, Q
        EDMA3_DRV_Result result = EDMA3_DRV_SOK;( B' K" }. {3 m& W4 x4 [* }
        EDMA3_DRV_Handle hEdma;! W' b; V$ \/ g. T
    uint32_t chId   = 0;* }# c4 o* z: f* O1 \- N
    uint32_t tcc    = 0;. K2 Q/ K: D; T/ x

( G* a# g* o5 m    print2arm("edma3 driver init...",0);
5 a8 ]; R' W( W3 j8 A: j- X# J( b* o3 i- R3 O) l4 U" s5 N/ y$ ?+ P
        hEdma = edma3init(0,&result);
9 V  z9 p+ f/ m% j6 _, D        if(hEdma)
) K' @1 V% D, S& i3 o5 a5 P        {
4 A- Z- A! F$ C8 L; }                print2arm("edma3init() Passed.",0);
! D1 i% @* L$ n, _/ H        }. {- U9 @3 U, g. h
        else# w' b5 ~4 G) R- P  ]% J8 S
        {# n, }/ x4 g: r
                print2arm("edma3init() Failed.",0);
2 @8 t) a# E; P% ]$ M        }
$ {, w1 h3 R& g' M        9 X- h" N( A9 N% d' ]. l9 Z/ q# v
        if (result == EDMA3_DRV_SOK)) r# W4 e2 ~- ~
    {
8 q9 P6 a7 t& M0 o" [, I                result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,
3 H0 N7 z4 L1 V1 m                                                       (EDMA3_RM_EventQueue)0,
% Z9 p2 I" y  C4 j8 F5 \/ p                                                            &edma3_isr, NULL);# O' P! r+ D! m6 e1 V5 U  r
    }- b( ]- v( n) O% K3 h) @
        ! q3 o# T# ^5 _4 {% ?$ P
        if(result == EDMA3_DRV_SOK)
7 I/ a8 m2 L0 f6 Z+ C2 B% j) ?5 m        {, l6 F' n( H) k  M8 l1 H
                paramSet.srcBIdx    = 0;+ @  r5 r2 @: \& c' O5 V; _+ N) i
                paramSet.destBIdx   = 1;
  t5 j  R4 G+ i9 _2 j1 l% I; Z                paramSet.srcCIdx    = 0;
1 H+ M3 o3 S" M1 [7 }                paramSet.destCIdx   = 0;
5 P) E+ b- Q5 P. G                paramSet.aCnt       = PING_PONG_ACNT;
1 v) M) B% I  i5 X! v7 A  y                paramSet.bCnt       = PING_PONG_BCNT;! ?8 w8 r) d  A. {% w
                paramSet.cCnt       = PING_PONG_CCNT;
% \% v5 \" u# r                + O5 a' T8 e4 j- m  u2 i
                /* For AB-synchronized transfers, BCNTRLD is not used. */
+ L/ G7 p! x. d7 z* f, k5 `' L                paramSet.bCntReload = PING_PONG_BCNT;1 @: d7 ]6 h" Y9 v3 o
/ _) w; c* Y4 n- g
                /* Src in constant mode Dest in INCR modes */) N7 N( i% _& V$ ?6 a) y  y; ~
                paramSet.opt &= 0xFFFFFFFDu;
2 @( n) b7 V$ K9 b, Y                //paramSet.opt &= 0xFFFFFFFCu;8 E/ H' H- Q7 j$ `; ~* S4 C6 N6 j
               
4 B% Q) \% y+ D, h* w4 ^( r                /* Program the TCC */
5 s  K; ^$ q9 G8 S: y$ R" \. [                paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);
; K9 V2 Z! X7 J3 r7 n- C) P3 q
, W4 L' k- X# y5 _+ U: M9 ]                /* Enable Intermediate & Final transfer completion interrupt */$ w* [1 i0 g* R- B6 q
                paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);; G, }1 n7 k8 D" e
                paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);
$ y! q& n9 W: k/ b1 ?) T! A+ T6 O
9 `4 z. E7 y) Y; S' ?                /* AB Sync Transfer Mode */
8 ?# [- D: N9 X# u5 B( L                paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);
$ O8 U: N/ G( l0 n/ ?- h                ; K( _& S% g! @
                /* Program the source and dest addresses for master DMA channel */
) P  ]: i9 e6 H9 {+ H" W                paramSet.srcAddr    = (uint32_t)(MCASP_BASEADDR+0X029C);7 w& D4 F2 a4 E- @7 Q( \, M
                paramSet.destAddr   = (uint32_t)(ping_buffer);
+ ?5 e6 b2 _/ }. d3 ~
9 `6 _0 l/ I7 z: n                /* Write to the master DMA channel first. */+ Y' ?/ [! I0 ?+ A
                result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);
. b& |8 x7 |2 R    }       1 Q/ R! M* ~! c0 i" D

0 {# r& @3 Y* v( L  d0 v        result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);" @2 M5 {7 u8 G) j0 B1 ^
       
# Q/ ~4 F' x, S* `1 z    if(result == EDMA3_DRV_SOK)
$ ?2 [# ~# v& `# A    {
7 O6 I3 w6 E+ R' q8 {3 J! g* l; T            print2arm("edma3 driver init success.",0);
+ F( M5 }( w& \' v    }
  {6 ]- x1 s# u0 K& e9 W}
" ?" H7 ]2 {* z9 T& f4 F  ~" D. ~. [4 N9 l' T5 E1 ~

6 `0 p! y2 T' f5 X5 s( Y/ qEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。, v( M* J# X1 E0 a

* S. O. I) @0 I: d& x
( x; p' S3 J7 F* h1 q4 }% }$ r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

10

主题

30

帖子

158

积分

注册会员

Rank: 2

积分
158
板凳
 楼主| 发表于 2015-4-29 23:25:56 | 只看该作者
Lewis 发表于 2015-4-24 10:47
5 }# N* e6 D, }3 j: c每次DMA传输完成后都要再次使能传输

8 e0 K+ |$ F( M$ y原来是这样,我明天去试试,谢谢了!
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-13 13:18 , Processed in 0.038354 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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