嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
1 W6 k$ I8 }# G- w8 q2 _0 A7 dinput mcasp_ahclkx,2 o' _- \; \* F4 ?1 [/ |; N: g
input mcasp_aclkx,0 L2 ?, q* x4 h$ m$ d/ g! x0 K
input axr0,- @! J1 S% d- ~( ^0 Z9 r7 Z
( v9 f- S+ A& f
output mcasp_afsr,
, r+ R5 Y7 A* h; u) xoutput mcasp_ahclkr,& n& C: j' d4 L
output mcasp_aclkr,
: n6 p" ^& @& z3 _0 ]output axr1,9 A) g/ ?, a% m' ^9 w" i
assign mcasp_afsr = mcasp_afsx;' C* K8 R# v$ p+ L6 j
assign mcasp_aclkr = mcasp_aclkx;  p6 v  P2 D* ]% Q5 I, m
assign mcasp_ahclkr = mcasp_ahclkx;
2 Y3 [# X, w0 J# nassign axr1 = axr0;

* U# I  n4 N7 y' h" Z8 H" H/ e* \6 f2 q4 Q
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
5 u7 }" E! }+ g3 t" k
static void McASPI2SConfigure(void)
. [' T3 G* I" s0 p, }{
6 t9 M3 v% A& j. E, ?McASPRxReset(SOC_MCASP_0_CTRL_REGS);; E5 w$ G" K$ \" L0 x/ K3 C
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */0 L2 H) t3 g6 K0 b: v1 _
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);6 @3 y6 T' U, R& `: A
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
1 l  d/ e# V& U+ S1 EMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,- r0 d. F" d4 |( H* S2 {; l
MCASP_RX_MODE_DMA);
) [; c* I8 W/ E; IMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
" C7 D7 D6 i  M8 y) eMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
6 g- C# Z8 z4 }5 C" GMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, $ f6 T# S( v( S! I# V/ n
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);! P7 P6 v  T5 U2 K
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
' P9 O% s/ m+ ]5 d$ [& PMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
& r) Z6 U: [3 C# {* VMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
% K6 v$ J) D$ S) t4 `( e4 B2 g  bMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 9 y0 \6 c  b5 z, Y- t4 v$ K7 j2 ?5 b
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,4 r7 V& k+ K7 Y
0x00, 0xFF);
/* configure the clock for transmitter */; a5 d$ `- ?: k( ]. h0 S
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);- {# j% N3 v1 t9 D
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); : Y# t& f$ ]: Y+ K* y, m  `
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,$ D: \( W& x0 g8 M* f
0x00, 0xFF);
" S. u5 N5 S: g  y
# }4 S3 t7 x1 J7 G% K$ _! e/* Enable synchronization of RX and TX sections */ 2 ~6 H& u3 t- }& w; K5 G7 L2 G
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots *// N7 j: n9 L- B8 E/ ?
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
0 c" F8 U. @6 r  b1 kMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*1 R/ F$ |7 X* W% l, o
** Set the serializers, Currently only one serializer is set as
2 F8 S+ _! o* ]# k( ?: E** transmitter and one serializer as receiver.
6 c) K7 z- a/ ?*/# ~9 V, {: \5 W0 ?- K
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
3 }5 E0 c: O+ j5 a( a3 KMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*9 U% F! \# X7 j8 E, ^9 R
** Configure the McASP pins , Y* G) P. `) H! Y! A) L) ^. m( J
** Input - Frame Sync, Clock and Serializer Rx# e- \; n( r& e  m, y* ]
** Output - Serializer Tx is connected to the input of the codec
( {) v8 L' F6 h! w4 I*/
2 w0 R# ~% j& [McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);9 D: L  @; J. i4 v8 I( W
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
$ A% W/ U4 V5 [4 |) fMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
: |  j# u: d$ U3 c7 y+ x: k| MCASP_PIN_ACLKX' h0 c$ l! B$ y& z
| MCASP_PIN_AHCLKX
4 x* {8 w+ D/ {4 P. M# `/ U8 S| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */( p. ?+ T# L" O3 W2 L& X
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 7 L9 F; [+ |3 l- ?2 D
| MCASP_TX_CLKFAIL
0 f; s- `) u6 Z+ S- s! n| MCASP_TX_SYNCERROR
# o& E3 t$ p* ]0 d$ X| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
( M1 j! K& m, n8 t6 z| MCASP_RX_CLKFAIL* g, q2 X0 O% B" {  |+ M
| MCASP_RX_SYNCERROR 5 \- b% r8 b# N' @6 P
| MCASP_RX_OVERRUN);
  d& q1 A( K+ q0 `4 L}
static void I2SDataTxRxActivate(void)5 b6 ?9 D$ x. f' E) i1 {; D
{* t) D0 f# b8 p! X
/* Start the clocks */
9 x) w, z! V7 z1 R/ JMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);' S5 P: Y3 I- H9 m: I/ c
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */1 O+ O7 ~7 m7 Y5 L8 f
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,$ A/ S7 a2 i2 h% _5 Z& _5 ~7 b
EDMA3_TRIG_MODE_EVENT);
5 V/ [6 ^2 G' \# e+ _) ~EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 9 e  R( {: h6 }
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */( _5 [& T" H5 V6 S, W
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
, o  A5 B. [6 _/ w9 ]/ {McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */; K6 V, t8 [  _, m: }" Z* c
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
4 C4 j  H" C" n& q' I+ hMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
# p$ `% l- K5 d6 i2 s* HMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
8 p4 Z4 w* O& Z  V+ a}

5 T8 K' p+ z5 o2 J" w7 ^& @
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

6 ~8 R1 S1 m0 q% y6 U9 }  P




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