嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,2 \1 C% z8 m7 Z4 L4 e( b; j
input mcasp_ahclkx,0 b. @5 r) x! |6 _+ K% ^( b
input mcasp_aclkx,7 R$ ]$ W/ T, y6 ?4 ]
input axr0,) A  |( T; `# _0 |+ Q6 B
7 d  N  r2 V- B) Z' g  w) Y
output mcasp_afsr,5 G5 U: O% {$ Z7 {3 u% m! P
output mcasp_ahclkr,
; W) _- u8 z7 @output mcasp_aclkr,& z, h) s+ m& S# j* i* \- L4 w
output axr1,) z1 V1 t/ C% ~! \+ ?& Y
assign mcasp_afsr = mcasp_afsx;
9 K+ r: A; B4 B1 c" R5 fassign mcasp_aclkr = mcasp_aclkx;9 a. U# W) G, a, \
assign mcasp_ahclkr = mcasp_ahclkx;
* r' W. _: w2 ~9 z9 i1 x! Yassign axr1 = axr0;
9 S8 T6 x. K6 l; e2 g0 F8 h

. J1 f9 I) y; E6 h0 r
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

7 C- F- D4 a9 L. v% \+ k
static void McASPI2SConfigure(void)
6 E( I  i$ n2 T0 h) r9 n2 w{" J6 w: x5 m- }, V# }
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
( O7 g5 p: y; n9 JMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
* c% t5 s4 e7 N( P+ {McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
0 ^7 n/ p: N* f) yMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
6 |  B' x+ @! D+ [; RMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,4 E, i. O1 E" R, b9 b1 A
MCASP_RX_MODE_DMA);- y2 T! K6 s- y7 v; S3 |; j5 q
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,; |; k, H2 B% |0 A. I4 ^1 v* T
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
7 u/ Y8 z! N# [9 F7 }* MMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
  {& W/ y" [! N* o) |+ tMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);! @& j* T+ \# f
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 0 ^$ W# O  y" j+ S) q
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
  D1 l& W( U8 p; W  Y& KMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
, r; l( k3 t  E: \" |  Q: J! lMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
1 ?- L9 H  e0 o. z2 ?McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,- X* O* R  i' L# a
0x00, 0xFF);
/* configure the clock for transmitter */8 w/ N+ `; b* J' V, N+ w/ I
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
* T+ U1 n( h) j$ QMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); , |' X* Z9 P0 O0 e$ |
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,1 m2 y+ ~& g/ @& n# X
0x00, 0xFF);
; `4 \) j& r7 o0 Y
! k: @. ~- R( b" B3 H. m/* Enable synchronization of RX and TX sections */ * @( w! e+ [" Q; ~
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */7 ^7 ~; x) J9 m( c5 Y7 C
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);0 h) y% b0 C5 o! R
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
0 q" v8 v- _; V( m; i** Set the serializers, Currently only one serializer is set as0 Y" V' s  ^$ b( y  h6 \  [
** transmitter and one serializer as receiver.
7 o! a4 L$ x. ^/ i% f*/1 g8 s0 A8 T1 d5 t+ q/ ]
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
4 B  h: w0 n# o4 `0 b% I. f  `McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
! A( E; A# d. y, h** Configure the McASP pins
8 a- S  G$ F, Z/ y; B* o; g** Input - Frame Sync, Clock and Serializer Rx% N* e3 E7 ~" R8 q
** Output - Serializer Tx is connected to the input of the codec
" M% X  b  J2 \3 |8 G8 L' @8 a* _* q6 `9 C*/) m5 r0 m6 Y9 W+ g+ q( z/ }
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);9 ?. X0 m. n. x5 v7 y$ t
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));+ e! E. i4 {7 m: B6 l$ q  m
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
) F) n2 w; c# S' ~| MCASP_PIN_ACLKX
$ a* F) A2 E9 Z2 g* A; \| MCASP_PIN_AHCLKX/ I* E6 y/ H; M) p1 M5 L6 G5 F
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */5 h7 ~( ?& U& m, U, \* n) S
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 4 e  S8 L+ Y& f9 f  p. h3 l# i6 n
| MCASP_TX_CLKFAIL 6 \" f; g: C9 u7 V$ d: L3 B
| MCASP_TX_SYNCERROR6 e0 `5 w1 g% k
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
' J' Q8 v& z3 n% t| MCASP_RX_CLKFAIL! {' w4 B9 B1 A
| MCASP_RX_SYNCERROR
* f5 ?: @: C( Q- K6 ^3 `0 G# K| MCASP_RX_OVERRUN);" i6 j; @3 I) h) O- ?. C
}
static void I2SDataTxRxActivate(void)6 A* U$ w, S( X, l$ O9 n, \
{4 ^' ~2 z. n8 _7 ~
/* Start the clocks */! ]: M! F/ R0 k% P
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
  ~# p6 W" `/ ]* e- g) Y/ q& fMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */3 ?/ F' E8 a3 f7 Z! h: h5 b# k6 n2 C
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
2 N5 Z# T2 ^2 g  M7 \1 uEDMA3_TRIG_MODE_EVENT);
/ G; [  Q0 ~9 ^EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, & m1 `9 G* A4 U7 `2 [
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
+ W  z: A0 K$ B$ a" y: U( eMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
( G  V: c) C; g; S: `" n/ ]McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
( Z2 u; ~# o2 uwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */5 `- b2 }3 `/ T+ |! g" x! ]
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);. \+ ]4 X4 s+ Y3 I7 h/ \) d
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
5 Q# _  k" h/ ~; M! c7 P}
& h" b/ B3 f2 f$ I
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

, q7 w$ [+ i& Z




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