嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,8 y* x1 `& V9 D; q8 U5 q( G
input mcasp_ahclkx,
/ U$ a/ j) s9 T+ I" Z/ b. t" C$ k& oinput mcasp_aclkx,1 i7 Z* i' K: F9 ]5 v
input axr0,
! P2 E1 S, i+ I& ]5 n* l5 d  B  W  m+ }5 D
output mcasp_afsr,$ L2 \0 p; _0 `/ c3 L7 x. A1 y
output mcasp_ahclkr,1 g0 B- \1 b6 w( n1 j
output mcasp_aclkr,
9 C( M7 ^9 l; C2 e# o( Toutput axr1,1 ~/ T/ B) z6 p3 K/ P
assign mcasp_afsr = mcasp_afsx;
7 ~6 k2 K; E9 T  f, P; y/ xassign mcasp_aclkr = mcasp_aclkx;
! K) S4 c9 J$ i0 Z& Lassign mcasp_ahclkr = mcasp_ahclkx;
5 ^3 m9 u: x& b; B" H* n3 Massign axr1 = axr0;
, K, K( j" D8 L8 H* [$ y& p( n, v
0 u3 j+ Y8 w' u6 g; h
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

9 f  O$ A2 W. k/ n% f$ U1 x4 Z
static void McASPI2SConfigure(void)
6 y5 B6 e  u4 j8 o: w$ {{4 P1 t. Y- x6 C! P( }7 V
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
) E" G  I0 z( M0 A& |/ V- E% sMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */+ F5 f/ ^" t6 R% O' |" R, X
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
8 J/ b) ?2 d+ K. F) L0 v6 xMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
( s! _0 y6 s+ C/ tMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,5 S1 y# x1 G0 ^* I, Z+ t8 l5 w
MCASP_RX_MODE_DMA);
- i' d$ ~% w, T6 w1 _McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,! K; ~* y1 n7 E" s+ a
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */# o; k  O9 w$ k0 t. ?
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 6 E  ~# m. w& \9 u; \
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);; F7 d! z1 A% J+ r, F0 }7 m% W
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, : o' l2 R( y  ?6 ~; T# z
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */* w% T) ?7 K, o8 d$ W! x; ^
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);% t6 b. p; ~* Z+ U+ Z; K5 z6 \
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 6 ]' n7 o- O& `! \& G" L4 H) H4 S  l
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
8 u% `5 K- s+ }* o! {' F2 y0x00, 0xFF);
/* configure the clock for transmitter */
9 H/ b; \6 r+ c, C, u; X# zMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);6 o+ H9 |! l$ U) _/ n( l
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 8 V3 u/ {( c4 r1 v$ q/ G
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,' v4 o; W) x2 W+ \
0x00, 0xFF);
, Z. Q- t& y1 Q% k. x$ U* H! P- q, t/ N! ^3 }. O
/* Enable synchronization of RX and TX sections */
) x3 V- g/ g: R- Q, r0 lMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */3 I3 N3 H6 K3 F) \" A) |5 f( X
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
2 b3 M6 H9 P0 }( m8 k% `McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*. F$ e. E7 \1 _3 @# z% j
** Set the serializers, Currently only one serializer is set as+ p" Z. I6 \$ K1 m7 I9 g6 U
** transmitter and one serializer as receiver.
1 o4 D/ ?3 W7 w  Q0 r*/
' m6 j/ d: E5 w# t4 E& E) cMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
5 o& E/ g) {/ u4 v* z5 \! l  y- q4 o9 KMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*) ]% c" y7 y% g/ U% E2 U& H$ S
** Configure the McASP pins
  P  z: Z: F1 L9 C** Input - Frame Sync, Clock and Serializer Rx
2 ~! M1 ^# ]% @2 j4 a3 x2 J** Output - Serializer Tx is connected to the input of the codec : j3 G( \. _: x
*/- p8 h; C% P1 @' }# W: S' d: a/ |
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
. d/ _$ w* E. p. eMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
8 N8 ]) \. j4 D, L/ @McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
; f) v1 Z" z8 |5 z| MCASP_PIN_ACLKX) s. M: v# C  S6 Q
| MCASP_PIN_AHCLKX. E) s* [5 E( I$ \( _+ r- e0 [
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
7 I! V0 Y( g9 J; F) q5 D8 [9 a; m8 bMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
, q/ h/ k+ j: l, t4 ~4 M. `& k2 B0 k| MCASP_TX_CLKFAIL % b4 |8 Z7 A4 V  b0 A* }( m2 @; D
| MCASP_TX_SYNCERROR& E& z8 n4 i: h2 R) [/ U
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
: s3 {8 @5 D! i9 g: l1 a2 a, X' l| MCASP_RX_CLKFAIL
& I3 R$ X7 o4 J/ [) E$ d| MCASP_RX_SYNCERROR 2 s1 w7 O" G3 B/ \8 C
| MCASP_RX_OVERRUN);' l0 m& }- L& S
}
static void I2SDataTxRxActivate(void)
, J% v: |4 F& o( q( V$ J{
6 _5 D) ~, J. W, N6 N" P/* Start the clocks */
. {" A! u. K- o" E3 `; xMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);& ]+ s: E( [( ]* D+ \' b
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */6 A. n4 b! ^# J9 q
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,+ u. Y3 n, j& p8 R$ D
EDMA3_TRIG_MODE_EVENT);# k) M0 G! ~. v& ~4 \: k
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
5 B# P6 e$ ~( m+ @EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */  _3 E* @. o9 m; B' u
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);+ g2 v3 P2 g: v; u2 [2 @* P( M
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */' L0 Z* ?3 _; e2 D; s
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
- ?4 X( t/ h. E7 q1 T* ?& M7 PMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
6 |2 X; L$ i; M* T6 a8 ~0 \, e1 ~McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
& s6 m8 G! U1 c  Y3 E}
- o4 p3 C) p) ]3 O: Z! v) M
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

! @* v; A6 Y1 F  }) Z' c+ \




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