嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
6 _7 u! I( E' c  F* L$ M& S! [input mcasp_ahclkx,
9 M+ P! m. U/ L, \' b% |9 X2 Kinput mcasp_aclkx,' s; S3 h2 N, y2 x6 j: e
input axr0,
6 Y9 B4 H  O9 N; x2 P6 ?
: b- h# A1 k  v! J# e8 U, R7 V, T% t: ]output mcasp_afsr,9 E/ t) ^  H; c3 {
output mcasp_ahclkr,
) @3 k: b( s& f: h. b" w& [, [output mcasp_aclkr,
$ Y8 y# ~$ C0 n# w0 a) Voutput axr1,0 c, |$ B9 q; c, d
assign mcasp_afsr = mcasp_afsx;3 p* ~( v! A  j( {' _$ J) l8 N. z
assign mcasp_aclkr = mcasp_aclkx;0 _! E; X4 p  C+ \
assign mcasp_ahclkr = mcasp_ahclkx;5 `( [# Z; y& U  s/ E
assign axr1 = axr0;
- r2 m( N' I% J+ v

; V  y/ l0 p3 @' V( B
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

  s+ V3 e- u$ j+ S0 z* W9 f
static void McASPI2SConfigure(void)
+ e7 l3 |. D; K6 M$ b{6 J% ~3 Q( v/ }! J3 A- ^$ ?
McASPRxReset(SOC_MCASP_0_CTRL_REGS);% v) w8 `4 V& P4 q7 V: V
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */3 ]$ X& G% m, @( H9 F% d# n
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
# \) z: Y2 |: @; V4 e- |McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */! H9 A% `7 g, B
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,$ d3 _% a, u0 ~6 P& H
MCASP_RX_MODE_DMA);
8 ?0 G; b6 T% [# K3 r% @7 iMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,* d' I; b4 Y0 Y- r  F
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
9 V- i* B; t9 C2 B$ F8 M" NMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, % }; E: Z9 ]6 c+ a; v6 R2 B
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);. p1 J1 O# Y* K$ H
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
6 v# `0 I- @+ b$ I: }3 F2 }MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */& v- T3 |' u* D0 ~1 r- e
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);" X" _$ O2 F# ~6 j3 K+ `1 G; J8 J, n
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); / I) F6 S2 ]. {4 s
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,8 X! y; Q- ?. G( s3 P. d
0x00, 0xFF);
/* configure the clock for transmitter */8 ]8 o9 N. j/ ]9 M' h, ^5 o
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
/ F3 Q+ Y$ S: i# _McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
  ?3 I& k4 I7 Y; \- q1 G' ]McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
# |( ?- C5 O) o7 ^4 g& O5 H0x00, 0xFF);
# i4 l; M/ M( R) l  G) a
% |" `( Z3 C9 B% i( C# Z) t/* Enable synchronization of RX and TX sections */
! _6 e0 v3 g4 @6 _! h  A: j# `McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */! f+ Q9 A0 ^3 [% `: b( S& I4 t
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);- a% ?9 _- E% q6 Q9 b( E
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
5 l1 ]5 u5 N: s** Set the serializers, Currently only one serializer is set as4 W9 A( G3 I  j2 n
** transmitter and one serializer as receiver.7 ]$ A4 t' b  t" Q" F! V
*/
! t- y  S' k8 D! v& L! }3 uMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
$ ~; f# h8 }7 `5 F; zMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
9 t7 D5 z/ {- |! i- y/ Y& ~( U( h' V** Configure the McASP pins
0 w0 O+ M9 M) U" I** Input - Frame Sync, Clock and Serializer Rx0 \# y6 j: m# N0 m8 {
** Output - Serializer Tx is connected to the input of the codec
& D: g0 V7 w" Y) S: A*/
  H$ y  {$ k/ A# M* [McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);3 G& U2 _9 }$ B$ a
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
0 p) v: f7 [2 u7 [5 b+ F9 I6 @+ PMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX0 L" Z' ^! @0 X% e- ?. T; [
| MCASP_PIN_ACLKX$ [: Z( r2 i7 ^4 k  F6 T: d
| MCASP_PIN_AHCLKX( ^6 ~& g: F7 L! x* U
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
8 [' B9 g0 D. F3 e2 }( S( L, OMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR / b9 U4 ?9 G. s: S& ~
| MCASP_TX_CLKFAIL
; v" D0 C# X: W  o: F| MCASP_TX_SYNCERROR  Y0 t2 _+ v4 c4 l, e0 s+ O/ F. k5 _
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR / d8 J" I& v2 i( ~5 l1 s* D) K( b  l" S' A
| MCASP_RX_CLKFAIL3 B  `# J. }3 k1 J' g& I
| MCASP_RX_SYNCERROR
# y0 U# @! e0 d7 W7 ~| MCASP_RX_OVERRUN);+ H7 M7 y9 Q  e6 v0 d
}
static void I2SDataTxRxActivate(void): ~9 [! M' J7 F2 x, F
{
3 }# [1 O+ Z! P/* Start the clocks */
' B  W* T4 L1 xMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
$ X3 ~: _7 A5 K6 h7 A! WMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
/ }' `2 h: ]" d8 ~6 r  p* e( I% p9 uEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,7 O( i: U: q# M  U- l: b( K1 a  W
EDMA3_TRIG_MODE_EVENT);: s* H, k# G5 q) l7 w9 t; V
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,   X  X( c' I2 `, H3 z
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
% H* k2 B3 T$ _8 _9 {McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
5 k# L3 q- i7 v6 m* X$ RMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */8 l, X1 b' w5 t! O' h+ N
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */7 v. _& P' O( G* j
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);7 s; g3 n& j. z$ J
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);2 @; i3 f5 ~, ^1 D
}

$ y. A0 H3 P8 u: D$ J# I
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
/ B+ L) S: x( x+ u; [





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