嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,4 }/ @' H5 K* N) v5 ]: s6 i& @1 b, [
input mcasp_ahclkx,
8 m5 g7 ~, J: a$ M1 Vinput mcasp_aclkx,& H: [& W9 i7 z+ a& j8 [
input axr0,* |. |, Z% u4 U% h

0 ?: h* ~% l5 [output mcasp_afsr,
) L4 D! H+ P) _1 M# F$ S( ]output mcasp_ahclkr,
& N' h8 @  o* A  {" _output mcasp_aclkr,
: v$ N3 O3 @) Q1 Ooutput axr1,
' J9 I& g. P9 a4 A
assign mcasp_afsr = mcasp_afsx;$ k3 X( Z7 b+ ^& ?- S; G6 Z
assign mcasp_aclkr = mcasp_aclkx;+ n8 F' h( ]. K8 b' N3 e1 K/ D
assign mcasp_ahclkr = mcasp_ahclkx;! @9 X: q% W: F- G+ \
assign axr1 = axr0;

; h, M1 B+ e( Y; ~  X) ?2 V$ c$ ~$ x2 [1 Y: o
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

, G0 n3 L, E: l& u5 C- S. ^
static void McASPI2SConfigure(void)
; P  G, u1 n2 X+ i) z+ @{/ G& y5 S9 z4 _3 ~) |9 @' ~- F7 o. l
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
( Z7 v: g" j+ z9 U! HMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */. h& Y7 f! `& A
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
; {  G5 a/ S, \McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */3 I4 g, B1 e7 j& ^& N
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
' C  r: ]& b# s$ H" }. kMCASP_RX_MODE_DMA);
8 t* A8 c1 c9 q8 e' gMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,% i. {; W2 @5 S, N: ]6 N9 h1 F
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
" G, H1 G" z$ |/ [McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
% u, D7 S& N- ~- GMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);, g  L  p* c! i
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
: \5 a2 \( h6 e! f' h) uMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */% m1 |( Y& G! t4 I& {; @3 |- @
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);: [/ c  |5 l5 v' h7 m1 i/ }
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
0 W! Y; A8 Z/ ]( {/ D4 Z% v6 f3 kMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,' X9 Z0 f: w" [; L4 p- s3 s; `
0x00, 0xFF);
/* configure the clock for transmitter */3 W5 K0 i5 K: F; J
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
7 R1 f/ O2 j: T, Y. C7 A8 r) qMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 6 j- K6 l" z5 b( Q' G0 e4 A  X
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
8 D% L! e( c3 E/ L) }2 I0x00, 0xFF);2 p; E+ C6 u9 O
& i  b/ U8 d- q) f! E) M
/* Enable synchronization of RX and TX sections */ % B" o5 j. o0 G/ G/ A7 b
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
9 N7 e4 I2 f& \5 D" e0 nMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);$ F3 ?" R* z6 v5 j4 ]) ^
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*: T. c1 D* G& G( P3 q+ @9 U
** Set the serializers, Currently only one serializer is set as
# s6 `& ^( {, ?# Y" [! e0 b** transmitter and one serializer as receiver.
4 |9 f$ R) n- Q2 X" V, r*/' ^  d/ m! R0 Y. v5 @6 I- a
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);3 R) m! d/ |0 Z' M, L0 b
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*& m: e) H8 E+ N9 y) p! y0 }
** Configure the McASP pins ) {# o- G+ D' L* _2 W4 V9 H3 b
** Input - Frame Sync, Clock and Serializer Rx; Y  I+ K4 Q2 e5 d# S
** Output - Serializer Tx is connected to the input of the codec
+ T  q+ Y' E* u+ n5 @' l*/" q! W" }' N; k
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);6 s* P3 D" v3 i# F. g) T" v
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
$ u3 D- ^9 N/ H. h, jMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
" b$ g) C6 B9 e/ E| MCASP_PIN_ACLKX
1 }! {# `+ G& a2 ^9 g| MCASP_PIN_AHCLKX& w: J% y) s' C6 [
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */; Z. r, T6 w6 {' ?$ ^
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR / o. {3 {" ^. A4 }9 T$ H; u* X8 q
| MCASP_TX_CLKFAIL ( ~# J# z7 H3 ]! e' G! }
| MCASP_TX_SYNCERROR8 g2 s0 M+ N2 ]. X* W4 `
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
6 ?4 h; H+ w. @* ~| MCASP_RX_CLKFAIL$ r9 o8 @" W, ?" U" E5 a3 L
| MCASP_RX_SYNCERROR 2 k( j$ L# E9 O% V- W/ @
| MCASP_RX_OVERRUN);3 R+ J# a. j. \# F" n' C6 u
}
static void I2SDataTxRxActivate(void)1 D4 a' c+ J) m* c
{
; @$ J+ Q# `$ J( o* x! \  t) y/* Start the clocks */
0 y( n& I3 D, b, V9 tMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
! J# c/ l  O5 `2 u/ XMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */6 z$ A2 g) |6 [
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
) O& U/ B6 b- c4 E! ~5 ~! bEDMA3_TRIG_MODE_EVENT);
$ t9 r! O( \+ y/ @8 r( [EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
) M3 m. g- Q/ N9 ?* r7 H( `4 [EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
( o  Q) `1 T0 T4 nMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
2 z* j3 ?8 z2 a7 [& E# W' v- jMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
. @# l) m3 b6 @' j3 ~+ U. ~while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
7 j, \) o6 F$ j% m8 y: ^McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
' ?# z7 }* |. ~. FMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
# `' x; ]" |" D& L( _}
" Z, |. z$ Q; I: k% G
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
( O9 I. L7 M' f; ?; x* j! [+ Z( m





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