嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
2 d( V! g4 H- E( K% \5 P) ]3 Zinput mcasp_ahclkx,4 k7 J4 e6 U: y
input mcasp_aclkx,
  D9 x0 B! w$ `( N2 ?# yinput axr0,
1 V3 n/ _4 N9 ?; V7 ~
/ T" v8 j5 V* G+ H& R* Soutput mcasp_afsr,
, O0 r( @8 {5 |& i7 Doutput mcasp_ahclkr,
0 {) B8 V, d0 I- E" j: O! koutput mcasp_aclkr,& [2 e8 z+ k7 D- K
output axr1,
4 A1 @: n% k" _2 V7 z/ A2 X# S
assign mcasp_afsr = mcasp_afsx;  z, B; \7 d& A$ Q( p/ [
assign mcasp_aclkr = mcasp_aclkx;
# [! J: D% x! ~0 Cassign mcasp_ahclkr = mcasp_ahclkx;8 ^' J: i/ P/ {! e4 @+ ?4 B
assign axr1 = axr0;
0 p7 t3 w. L# L1 z

, d2 F$ c/ F$ J3 \* D
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
) a% O# s+ y$ \
static void McASPI2SConfigure(void)
! d' {- e4 D3 W0 ~{$ h' F) M0 M! {# f& _- p
McASPRxReset(SOC_MCASP_0_CTRL_REGS);, n. J4 v- i  ?
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
7 t! K) |1 o! [$ `; Q( h5 z! TMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);2 r5 `/ G! M9 g
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */! u( c  N8 X: E" \+ v3 k( J
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,% Y4 [/ v4 B+ f- n- A
MCASP_RX_MODE_DMA);! G: x3 ]* V- i+ {
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,1 ^0 [" x, L! Q! m) D- I% l( D
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */' r: u1 E4 @6 X; e; j  x3 B5 x
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
8 B! m* V' Z6 NMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);/ i' D9 j1 o& L( y
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
% U# l" w+ ], Y' ?: Y, Z* p- HMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */. l$ g1 }) j( C: C0 J  [+ d
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);2 _# T: @# V' r2 k
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
4 O8 z$ G2 x5 d  t4 {; N; uMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,5 W& L. W* G3 Q# Q, U
0x00, 0xFF);
/* configure the clock for transmitter */, U8 l# W. I. a: L; d
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
) \4 D& P& G1 ?% j$ VMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 8 E1 v. M3 Y  G
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,7 l9 }+ X$ W/ w5 ]' v5 h
0x00, 0xFF);) y$ F% I$ e& [6 q( r# z

* Q% I7 U# c( T/* Enable synchronization of RX and TX sections */
1 Z" _8 K. m3 s2 ~# K, t% j% ^) kMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */& H0 [: b+ }) E7 c4 t: t
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);  w+ N) ^! ]5 n6 j# I2 u
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*- _- P4 I5 {. _
** Set the serializers, Currently only one serializer is set as
4 U  _0 e, H+ C% S  X+ d** transmitter and one serializer as receiver.7 y+ R7 b! [; {4 K+ x* p0 T
*/) O$ Z6 ?4 s0 a6 d
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
; q2 d" y5 s* a0 ^McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
. R9 ~; ~2 C& l2 P4 e** Configure the McASP pins . [3 y1 X8 J# o0 r3 p5 g, Q
** Input - Frame Sync, Clock and Serializer Rx  J0 n+ h6 W. r7 k/ V. s
** Output - Serializer Tx is connected to the input of the codec
( V7 ^! m% W4 y5 F) k" B*/
5 l, G) a/ b6 g! R( a8 j6 Y: i9 t2 l  pMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);# |1 h$ w' G$ o% c" H+ H$ }; j
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
2 Y9 |- ~4 P- M3 b7 r  B% JMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
' D6 n+ D7 Q' l( p* Z* I7 [| MCASP_PIN_ACLKX
3 x" M' h" M2 L. e! L# H& r| MCASP_PIN_AHCLKX
8 }" a6 l# x% o! P3 i| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
5 @* Q/ o8 t  }3 U. nMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
0 {# |0 j# [; D0 Q! f8 O! B| MCASP_TX_CLKFAIL $ w0 ]5 x* o0 V! A% g
| MCASP_TX_SYNCERROR3 h- {& y, k  ?& p, H8 d
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
, n0 H  D( w& o, p1 z7 W+ || MCASP_RX_CLKFAIL
" v5 O( Q5 g. @2 q0 V9 e$ |5 [| MCASP_RX_SYNCERROR
* G. w8 \- e6 ]9 w| MCASP_RX_OVERRUN);6 y# Q5 h4 i& o
}
static void I2SDataTxRxActivate(void). Y, q1 o; ~8 q( L
{
2 B7 ]) K: b" f" J% I1 h8 g/* Start the clocks */
3 r& p+ v* {1 o  D8 K4 qMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
5 G0 R- |. U9 Y/ ^' g0 h# aMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
1 Y6 H; b9 H% rEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
# B5 R& C: p! B& R: [EDMA3_TRIG_MODE_EVENT);
& x5 C1 b1 W1 W2 ^# OEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
$ E( D" W# j9 ^, l5 PEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
: r& _2 S) h/ h; X. EMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
( p. f& e4 t2 u! w$ U  m2 y" @McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */5 n: f. L$ R1 R( d: f7 q
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
0 }0 \; x0 I# p, L( |% AMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
5 U1 x8 f: J: ~( L7 u1 IMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
0 ?! L4 G% T: A# k" m$ V}

! C/ m( z  U, k' B  W1 E. T+ e
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

! t* p" H, s4 ~




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