嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,0 L% F2 z) Y6 s: T) [# F9 F9 i
input mcasp_ahclkx,7 B: F8 C4 P% j8 r$ j8 x- Y
input mcasp_aclkx,5 h- B* s, \" S5 ?/ e5 o/ k7 P
input axr0,
9 a3 [) n5 O5 j! H8 [0 m* z, }. M; l) Q$ k0 S  k% h2 L
output mcasp_afsr,
+ A4 h' \3 m- M1 A8 r: h0 i: ooutput mcasp_ahclkr,. x9 ]) C6 {( M
output mcasp_aclkr,7 e( ?" l, [# C3 w! t# o2 Y
output axr1,
5 G$ W( G# L( u
assign mcasp_afsr = mcasp_afsx;
3 {% |( D3 ?2 B' }assign mcasp_aclkr = mcasp_aclkx;
  {0 T. c& H9 O% Lassign mcasp_ahclkr = mcasp_ahclkx;
, U& \; `6 G1 S8 l( dassign axr1 = axr0;
& L6 S! _- q% I: L8 f
0 m5 b$ ^" }+ p: T3 N2 s( s
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
2 G, k: y3 o+ {% |0 ~% J7 S; v) R
static void McASPI2SConfigure(void)& R; h# k$ ]% }0 s1 G
{
  x" w* ?5 G/ F( ?, }McASPRxReset(SOC_MCASP_0_CTRL_REGS);
  n, L$ T0 |: JMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */. R3 T5 ~, a  R) M4 l4 H: V$ f
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
0 A% |; {1 i3 Z5 s, fMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
1 v; |; t# ~" U* kMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,& l( J2 ~6 L3 i5 g
MCASP_RX_MODE_DMA);8 J0 A: _; q: v) A, h7 x
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
5 f5 D# l% Z" ~8 t2 m! \MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */- H1 A) l( S$ L% r( W1 l* |* g
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,   }3 p/ w. [6 Q& G9 Z
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);1 c0 q5 y( D$ h9 f
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
9 c6 Z; W) [9 m3 L' @1 o/ c: xMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
, C- p$ A" F% `) @& M$ s8 w. ~5 j  nMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
3 C8 B0 r8 A- ^! bMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); , j8 B# C- \, j9 q+ K1 p* j/ F, d7 R
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
0 l0 e6 N$ `1 q" f( w& h0x00, 0xFF);
/* configure the clock for transmitter */# f$ ?/ s4 K# L$ Z
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);- C: f1 @4 _% w
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
8 a6 C8 Y: b% u) e/ UMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,* n; L. W+ t3 R+ l/ ]% S$ J
0x00, 0xFF);' t# [- V5 T) [9 d4 V
. p% o7 D3 |; f
/* Enable synchronization of RX and TX sections */
! T! D, a; v+ K$ V0 T1 N5 w3 lMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */! f  M4 C0 K1 j% x, y1 c
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
- `" [. R3 [4 v" kMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*' p! B* `  _9 K- j) @6 e
** Set the serializers, Currently only one serializer is set as
/ T6 T& j# V: Z; t% @** transmitter and one serializer as receiver., A) P- h( p( \9 Q
*/
; I/ D4 Z3 [+ r1 o8 iMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
$ b+ [/ C; [) V7 d8 hMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*& h* \3 o6 P% h8 n& k8 g
** Configure the McASP pins
' x* v0 ]( [- q** Input - Frame Sync, Clock and Serializer Rx( D/ q0 b6 x: j: m$ S6 O6 H+ P
** Output - Serializer Tx is connected to the input of the codec
' p- Z+ L, ]* Z) b*/
3 d0 Z+ [* p% y8 K0 u* ?McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);8 D1 j2 l5 Y5 e3 V+ \9 p
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));+ x% S! E/ X$ A. I4 D5 ~% e
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
" a+ w) t# Y$ A' `+ p3 C| MCASP_PIN_ACLKX) B% o# m! b: ^+ d7 i' u9 T# i
| MCASP_PIN_AHCLKX2 @; w* y6 R" |$ t
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */" z( K4 C6 |! }. E
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
  x  h) n9 T# y/ y& W  w| MCASP_TX_CLKFAIL & ?+ k+ O) Y) X1 m8 P
| MCASP_TX_SYNCERROR+ D! b2 e% ~) {. I+ r5 w9 b% c
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR + t& W0 B! q/ s7 ]8 t
| MCASP_RX_CLKFAIL# ?& p+ z. X% {6 l$ d
| MCASP_RX_SYNCERROR : J; U# P: ]& Z% X
| MCASP_RX_OVERRUN);
/ m- q; y0 U- d$ c}
static void I2SDataTxRxActivate(void)2 f/ Y* t3 l- r# q# \
{: b: _/ L2 f; k( V# I/ b
/* Start the clocks */
6 d  h9 ?0 Z) x$ WMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);+ G) g& V% F8 O$ z+ o6 ]& l
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
2 l! ^' D0 s3 g  xEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
9 H2 w. Q+ G0 o3 f& AEDMA3_TRIG_MODE_EVENT);7 y: I8 N; {* f; N6 w4 r. N. J* y
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
- V: |- b) z* w# }EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */( }5 H) B4 ~3 h8 |5 {4 p7 m! H
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);* A/ ?9 l9 H3 p! H% Y6 D; L. f
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */4 V* h, t, {( U( {# F
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
" \; O- {) L, U% J3 ?+ s+ z2 qMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
; [% G' g+ P! A8 xMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
+ L6 `7 b  b4 y: e% F4 `( ?}
( u2 t& w& t, s3 |& v; l6 O8 H* k
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

& K& {& |7 D  O& c- T' _: H' P! r' g




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