嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,8 f4 ~0 o; d' i  q* W0 M" R! t9 v
input mcasp_ahclkx,
- n) o2 K( @3 j2 v& n+ cinput mcasp_aclkx,* f# ~, E7 {: i+ b0 ?6 `
input axr0,! G; f& ?9 r0 }% B
3 V+ L. W9 F1 v
output mcasp_afsr,
/ m: z5 L' k3 W, A0 ]output mcasp_ahclkr,
) ?0 q9 V" ^3 V+ S- B4 Eoutput mcasp_aclkr,
8 K& v. T( \  c! h2 u  p# aoutput axr1,
9 Y! b. e$ ~4 C$ n
assign mcasp_afsr = mcasp_afsx;
: m4 W3 t( v9 q$ j; ]3 cassign mcasp_aclkr = mcasp_aclkx;
! @3 U8 _0 f: ^9 r9 N  c3 C  Xassign mcasp_ahclkr = mcasp_ahclkx;
: [+ C! i& @0 M  {2 F9 yassign axr1 = axr0;

7 T; C/ j. X; g5 U; L8 A0 C6 N3 A$ L& K- l( V. Q
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
4 n( J6 h$ h% ]. [: q2 k
static void McASPI2SConfigure(void): w9 ^- W3 r0 p  T. D3 `
{* ~* ?! d0 s/ c5 J" H, k
McASPRxReset(SOC_MCASP_0_CTRL_REGS);+ G) |# U& z3 m3 J- c) |
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */4 l! D3 n5 e: P/ }
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);3 Z# ^7 M: u0 m# ?2 S/ o
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
' ]5 U( b# |5 X- ~# Q, e4 T; n: fMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
" o8 t0 @! y2 r" XMCASP_RX_MODE_DMA);, H" }3 h, M1 y: }$ W7 I  T
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
% L6 m/ P& D3 L) F) AMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */, Q* ]4 T5 Q( J( |" j& N
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
( J( G. ]0 ?  `. x( QMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
8 D: ~% Q* K& {2 Q. i. yMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 8 p: U7 _9 O4 d$ D& \
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */2 X1 r, N  {( K/ L; r7 o
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
3 P& g: h( a0 R' M" Z/ K$ d* u" wMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); $ F& u$ l  b. J! H* s4 R/ y' C
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
& a3 y: l$ A& ]0x00, 0xFF);
/* configure the clock for transmitter */
; T1 ^6 g6 J' @McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
. B& c, r$ R' e0 U- N: o$ Y4 j" M2 vMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); # }! m* ~) r: ?0 w4 r2 ^1 S
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,$ N( q" w$ x' x; F$ F1 `* ]9 y
0x00, 0xFF);, |8 j" B  Z9 M0 l. o

8 M* _$ A# N5 f3 f( O: J  x/* Enable synchronization of RX and TX sections */
8 y6 y7 T) w5 {; `/ h* F- PMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
" O0 \( W! W) t& M& k' I5 Q/ ]0 o: [McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
. j3 l% g) y3 N4 B4 [/ |McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
& r; A. l9 c5 d& i5 H0 P2 i/ w% |** Set the serializers, Currently only one serializer is set as$ `4 S  c  W8 T  t, ~9 G! d7 V% `' G
** transmitter and one serializer as receiver.8 s1 c- W7 v3 W$ J" u0 H
*/
  T3 ?* |4 \2 Z' vMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);5 F; z5 p" M# E
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*( c* J! o, C7 t' O/ L
** Configure the McASP pins / {! |7 m2 C; r% s9 c
** Input - Frame Sync, Clock and Serializer Rx
' d: F& D; t6 [) \4 d' b7 M0 l& w** Output - Serializer Tx is connected to the input of the codec
0 A$ V9 R3 W+ L- j2 k  B. k*/: j5 T" n' j9 C7 h
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
6 t8 [+ q6 r+ `* T8 IMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));( X3 b. _8 z; C+ q6 x2 b# t
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
/ W  J& U7 Z: s% y# l$ A| MCASP_PIN_ACLKX
8 A; L. u" p8 V7 ^2 U) S/ |. }& h| MCASP_PIN_AHCLKX
6 b- s5 [' P! J, \, N| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */+ X7 w* M. _3 k# x. {9 k% a
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR - e1 F7 V* _0 Q$ I, I8 R
| MCASP_TX_CLKFAIL * F! j# ]# Q3 o7 B% Q0 }
| MCASP_TX_SYNCERROR8 v' e& x7 f& v4 r1 j
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 7 p( Q) I% ~- G( |& i
| MCASP_RX_CLKFAIL
* {# d% L0 H3 ?( z# ^| MCASP_RX_SYNCERROR   _) i" i$ d/ `! [8 a/ G
| MCASP_RX_OVERRUN);
$ _  W+ g' ^: o" R$ u& x}
static void I2SDataTxRxActivate(void)
4 {5 J$ t' }- E{
* |9 A+ w$ N6 \& b+ Z. p/* Start the clocks */
6 U# B( U. `. w# e6 l4 ?4 C+ K6 KMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
+ V0 F0 F! c, M( n% J# l% [) [) R9 l# JMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */% s7 S0 z1 g3 M: ]9 D' j
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
' i& {+ }- b9 {" e2 x8 lEDMA3_TRIG_MODE_EVENT);2 m& k. z8 s9 ~: ?1 ^  U9 g4 N
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
8 r) ~4 L( h5 F9 @% cEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
( [! ^3 k: [" T9 U" oMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
( w( }2 d+ n: ~4 ~McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */# e8 P, t$ H4 y+ u1 G
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
+ p) F8 x! ?2 Q8 l$ T+ s8 ]) xMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
- k# |+ ], d. s; W0 E& c" IMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);& v& [% S* A( D1 n- K
}

- B* S# m5 y. \& m% s
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
8 k1 L" v$ x+ o7 c( A





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