嵌入式开发者社区

标题: MCASP自环配置。 [打印本页]

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
) N* u! K& f# ~input mcasp_ahclkx,
( W4 F- h  v; x4 D8 Q/ f) `input mcasp_aclkx,3 }/ f4 K+ N/ w. r) n2 ]6 d
input axr0,
* ]9 L: i1 e0 @5 }) d& U7 ]$ R# H- ~) |+ O8 N6 I$ C; x
output mcasp_afsr,
6 R  G6 K' E  O8 N$ Houtput mcasp_ahclkr,
1 j4 R( _; t' O2 Y5 N7 Y4 q  _) ioutput mcasp_aclkr,$ {6 d; I3 u- K& N& q5 Y+ Y' ?
output axr1,
  s( R! x! O4 M2 |0 R1 q$ c
assign mcasp_afsr = mcasp_afsx;7 m. T' H7 f; ]8 o& t# U
assign mcasp_aclkr = mcasp_aclkx;( U/ ?  _: m' G( T+ O( y8 `
assign mcasp_ahclkr = mcasp_ahclkx;
$ d$ b8 I# {( @. A6 Fassign axr1 = axr0;
- C/ l; x5 L  E0 k
1 z- I/ F5 n6 a! D* x$ b" Y, W5 ^
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
" e& R" V, l7 K5 u( J8 k% `, s/ \
static void McASPI2SConfigure(void)
, N6 I3 n: C$ P% A* U3 X: o2 _{
9 `" J- s4 @" m4 Q5 I* v- h# h: sMcASPRxReset(SOC_MCASP_0_CTRL_REGS);6 ^7 D/ d; S. Q, J7 O# m+ n, x
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */- L5 f( i3 j6 `0 o& z
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
, S7 n, e/ S' k1 n& oMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
& E0 C1 z- w6 ~+ p  L( k1 s$ j, EMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
7 z& P4 e5 ~, h$ x+ ~- P# lMCASP_RX_MODE_DMA);
% G3 I2 o+ @. D# dMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,  C' e/ G6 w5 l
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */# \+ h; \, S4 `4 L
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
8 l$ G2 r* ]* k( s& |0 W0 h! h$ v3 HMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
( a1 e+ b. `- L; ^2 MMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 7 O0 D. R0 i. l( x: v+ b
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
4 B3 l" e! ~. P5 D; A  xMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);$ [, C* n2 e" h* Z3 s
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); + |, q  E0 s- |7 Y' z
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
8 h! d4 F& b9 _# f3 K2 U6 f: D! M0x00, 0xFF);
/* configure the clock for transmitter */
$ s8 _" w; P9 FMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
$ B  [- q: z; t- ^/ m+ {4 M1 gMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);   S( `2 N& v( m0 Q; `' S
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,( D  r4 f7 }6 y3 ]) s7 q
0x00, 0xFF);
  @) m0 v$ V3 E2 Y. `7 t6 i2 q# ]; D  E$ F" ^) t
/* Enable synchronization of RX and TX sections */ # X$ P# `( ]5 ?- g8 F5 s8 L3 z
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */2 z/ U. ~; e0 `+ V  G: }8 N5 o9 K
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
0 g  T; ~: O' v4 RMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*' h- m6 ~: t3 n3 ~! h
** Set the serializers, Currently only one serializer is set as4 i+ v/ Z: P, l7 }0 s* j
** transmitter and one serializer as receiver.
3 f1 |' K/ o1 b" c& ~*/# y' U' K. q" q/ N8 c( U
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);1 p" W  \: r$ l& E/ i- P
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
9 w! V) x/ q9 K+ h** Configure the McASP pins
' j4 T' x! g: y& [% ?6 |. H** Input - Frame Sync, Clock and Serializer Rx
" T5 r9 W! r& X( c** Output - Serializer Tx is connected to the input of the codec 6 h* H7 y6 A" j% j) \6 ~& g& K" h
*/) i6 K# V8 M  J- t
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
/ c3 ]7 s7 x% w# I4 yMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));7 {' G( @5 j8 w$ F3 I% y- c+ q
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
4 {+ B' F0 t& K' L& T| MCASP_PIN_ACLKX& ~9 W& j4 m5 O7 H5 g2 H
| MCASP_PIN_AHCLKX
* v* k: h2 p' T/ Y1 i! p| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */3 U; B/ O% ?2 G1 L! ]6 e
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR , N" U6 G" V; f- b. z, {9 s1 ^) [
| MCASP_TX_CLKFAIL 9 o6 [9 H& N$ z- o
| MCASP_TX_SYNCERROR
4 m6 T- O3 Q# R' H, P, A| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR   @  V0 q1 S- D% Y) w" {7 S9 ^
| MCASP_RX_CLKFAIL1 T5 s0 \& K  B3 f
| MCASP_RX_SYNCERROR
7 @6 E, D5 ^; u' ~| MCASP_RX_OVERRUN);
. _2 N% |% @2 i0 ]}
static void I2SDataTxRxActivate(void)- K' a0 \% K3 p( p3 s  J
{" R7 k5 V0 P) Y
/* Start the clocks */% I9 u% E5 G  E; ?* h' ?1 q2 M& N
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
2 j) ]0 V/ V9 f( X% uMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */, {/ B' _7 [* _
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,  N; ]" u' _) }7 D. M9 J% X
EDMA3_TRIG_MODE_EVENT);
2 }8 V  @: c) T0 D- J5 w. H* qEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
" ?- X  j  O1 u  j# b1 N( o3 x! GEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
: V3 z7 |; ?' Q% ~# uMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
6 C' p$ j1 p7 E+ j7 h3 RMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */" t) C9 z* a, j4 ]" W3 E' u* a
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
6 n1 E% e/ \5 fMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);; e1 g7 g6 X  l( u! X# @% W
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
1 Z$ _: l. p* |2 B. c}

) B9 u" H; W/ X* t$ h
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
: M: @( r1 [$ m$ o3 C0 J8 ]





欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4