嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
- w7 `' B% J" Binput mcasp_ahclkx,, n. I( h' B3 b  ]0 w# _5 l5 _( ?
input mcasp_aclkx,' L6 R1 Y6 H# T% W
input axr0,- x' _( Z/ A3 d" K

! q) N$ i# e8 w' {6 T' M, Y: coutput mcasp_afsr,6 l" _- E/ m  K5 h, C2 Q
output mcasp_ahclkr,
$ u- t& i& W/ ~# U, P$ Youtput mcasp_aclkr,- d- c! n1 r7 d9 [4 W: h
output axr1,. X7 d1 Z: R% a0 V" g7 m9 y
assign mcasp_afsr = mcasp_afsx;
) p5 G* z& ]. O) H4 nassign mcasp_aclkr = mcasp_aclkx;4 f9 p$ X0 j  r4 j
assign mcasp_ahclkr = mcasp_ahclkx;
, B' |4 g5 X0 Q2 P% n8 h: Zassign axr1 = axr0;

/ o, D( ?: m. }" |2 X
* o' j2 y9 p, S9 r
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
6 `1 s, V) _- k4 @! Z/ q: p0 v
static void McASPI2SConfigure(void)
: f- a6 k2 H1 E' f+ o( k{" l) F- B/ ^( q) y6 l
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
2 h) ]% q* B7 fMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
3 L: v& c! P( w8 o, PMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
( }! k% S+ E& z" E4 HMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */, g  ]5 O- e) D+ e6 U/ `
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,* M* j, O3 D0 r! [& F
MCASP_RX_MODE_DMA);6 _4 X, z8 `4 B* H" R  o/ ~/ J
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,: S- X: \% c/ M: e) A
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */( G& ?7 Y( }# y# D- K4 k
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
  T/ M5 ]- v$ j. t. n( y) hMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);# {( t: b' D6 Y' T' j8 F
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 2 M" v' s, l* T7 B0 j! |" T
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
9 A# [1 ]. A+ O5 D; M- L: |McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);0 r) L8 o" F: _
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
# d9 [2 u2 A  V4 K: V- i1 R0 O. G. @McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,* Z% ~: j" \+ Y; e' \% i  X- N
0x00, 0xFF);
/* configure the clock for transmitter */+ G, @# o& G. d, }, Q
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);$ y1 ^, R! u0 e/ e4 d( v
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
; D' I- @1 a( z% y6 [0 |McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
2 S* g& D# _( \" S" Q+ G0x00, 0xFF);
1 v# d9 {5 _2 r$ U) x% N; H
- A8 a7 Y0 P! R* Q1 o, q/* Enable synchronization of RX and TX sections */
- X. k- G$ f- X. Q7 I) v8 A2 HMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
- f6 @2 o- S$ V% H: sMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
% K8 C* b% G- E, e/ V8 `McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
# k) o5 k: s3 |2 D# s1 v** Set the serializers, Currently only one serializer is set as1 ?6 g1 G+ w. q1 ~# D( A: s& e* A& i
** transmitter and one serializer as receiver.
% E2 c" _$ e# h& `1 t* w5 d*/
! T% e6 T, T0 n) FMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);; u5 Z6 W7 l# k
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
9 h( [* X- J# j** Configure the McASP pins $ ?# k; m! q: H" ]; N2 S% D
** Input - Frame Sync, Clock and Serializer Rx
' m1 _* V) f" `0 ]# |** Output - Serializer Tx is connected to the input of the codec
# Q) q+ {9 Z$ B, O& S, h*/0 T# t* D' b0 ~% Z( S, \
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
( q* z' o) B. ?9 z* ^/ J6 K/ F6 YMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));. j6 R; `( P& p. m* D9 o1 T
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX# }6 `/ p- |& q
| MCASP_PIN_ACLKX
: I5 ?9 c6 O' \( \, r| MCASP_PIN_AHCLKX+ m+ Z& g) {4 z& N; t' t
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */- ?1 f" u( u) o! @
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
- Z" s! D5 \9 ~* K2 q| MCASP_TX_CLKFAIL
. w5 H7 R" z! u7 N9 \5 v| MCASP_TX_SYNCERROR
9 w) j: t' b  j# l8 W| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 0 n  C+ J3 v8 J) O9 D
| MCASP_RX_CLKFAIL
1 u( A. ?  k9 B6 _& S5 z( a| MCASP_RX_SYNCERROR
- C& j0 x1 _# A! m, L| MCASP_RX_OVERRUN);
) @# j. r/ w6 ?( r1 W}
static void I2SDataTxRxActivate(void)- ]! d( [3 R' ~" B
{
8 w7 `/ `! l  |9 e4 B/* Start the clocks */
! |" O. H  ^% a$ m# c5 t0 n9 dMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);  m9 i% _/ A; W8 O) p3 D. p3 t: _
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
/ n! }% u. K! G/ p: k  VEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,3 Y" f+ V. o; ]- c7 l; u, N5 g
EDMA3_TRIG_MODE_EVENT);
1 _4 e; t# j! ?. Q  u9 Z6 T% dEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
! w' [) w# N/ c; S0 LEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
% h  I# a0 r2 \* C) IMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
# X9 F# H* U* ?; n2 r5 Z$ E/ ^) CMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
5 |8 J1 J" I  ~- p, swhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
7 c7 F, K" h2 k* y/ vMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
5 I, X  x' ^6 _% K( K+ E; ^McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
4 A2 L9 n/ e; W}
' H* [( ~1 y# i5 d& }
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

6 L; C+ t4 L$ u' s% N8 g3 |




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