嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,- }6 P2 J% I  p) M! r$ `  R
input mcasp_ahclkx,
2 B, r9 L6 `$ G: C# y& {3 t" \0 cinput mcasp_aclkx,; A/ |! G, I: I8 j5 C
input axr0,
$ ]' I. d& Y1 P+ e) ^9 b2 Y' V; i) ]1 U' H
output mcasp_afsr,
3 J9 r  a- u% A/ R# S3 h2 {! @0 @output mcasp_ahclkr,2 l) ]' O2 H8 W9 q0 `) V0 }
output mcasp_aclkr,1 [: H9 H6 x& @2 i8 J! O
output axr1,
' M' q7 y) r0 G8 f
assign mcasp_afsr = mcasp_afsx;
; i1 C" H8 S9 @4 passign mcasp_aclkr = mcasp_aclkx;
, u! s; ^, M" I2 m9 }" q  y$ l0 ~# Passign mcasp_ahclkr = mcasp_ahclkx;
& N) G) J# ^* u- M; }% Z/ Q2 bassign axr1 = axr0;

$ n# f. J- \6 a) ^5 z1 ?9 S, x, o0 S$ N" K. A3 p% R/ y$ r
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

& Q$ g  {( H% U, Z, \: \6 P
static void McASPI2SConfigure(void)
7 ^- o& k& l. @) J# e! j{
/ W  |, E3 ^( r$ c4 z: mMcASPRxReset(SOC_MCASP_0_CTRL_REGS);9 O5 R. v1 Q, @4 W
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
$ i7 Y' w+ o* j6 t: lMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
- j( Q" m9 R4 m3 w* y2 A# k5 aMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
8 V6 Y  z0 |  T/ JMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
* v2 j  D. l0 g1 `. eMCASP_RX_MODE_DMA);0 X0 l5 A& A5 |, f3 k
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,+ s# T4 a4 e) v: }# l* U9 B, E) G
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */0 Y* _# q0 y+ y) K5 n
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, . e+ i3 e: j9 x$ X/ _
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
3 T% q. {9 h1 T* K8 oMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
/ H# Z) C( o" x  Y; E, X+ IMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */5 E& z( W$ X/ u8 g
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);2 Q+ f! M$ d6 u/ B$ a7 G) Z
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); - H% ?) k$ `9 j) y
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
3 n8 L, T" z* t. w0x00, 0xFF);
/* configure the clock for transmitter */
" C# j5 i# K3 EMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
& h' l7 r6 ^+ p- c) U& D8 pMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
% Z# \7 e5 ~$ _McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
) `" p& M% b0 ?3 H: z4 [0x00, 0xFF);
: t" Q% b* u6 S1 V* a5 k8 s: B: a1 @/ F( c9 Z( N+ I
/* Enable synchronization of RX and TX sections */
4 Q+ @  I& P* ZMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
% `. x0 h5 n) kMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);0 F' E, I2 d8 q+ p& v% u; K
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*# o1 q& H& D6 N# U' a- K+ Y; h
** Set the serializers, Currently only one serializer is set as
8 K4 e4 }  A0 `9 f9 a" z" s** transmitter and one serializer as receiver.
9 \( x* K1 q+ p/ W8 R*/6 y6 T- B$ p1 E! ^) b, h/ I9 ?
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
. r) l) v( H- p( f) Y, LMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*5 _+ \/ i8 K4 b$ D( h" S3 s# i
** Configure the McASP pins 4 Y1 g8 l. ^/ x
** Input - Frame Sync, Clock and Serializer Rx
+ `2 Z3 n3 \& j& o** Output - Serializer Tx is connected to the input of the codec + N, ?9 M" ?5 g' |+ A7 U9 D7 q: Y( c% z
*/
# ^1 ]4 O' y- _1 M1 HMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);0 c7 \/ ?  e! O
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
# X# {! C5 \6 Z7 v( a3 T& {9 yMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
% ^7 O8 L0 p) ~, o0 z; m. i| MCASP_PIN_ACLKX
$ _( n) S2 V3 r' }! E% O- r1 M| MCASP_PIN_AHCLKX
5 I7 I9 u/ Y& e/ h6 N' r| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */, C# s+ W3 ^- X5 z. e2 b
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ) v- a5 ~6 e( e, b
| MCASP_TX_CLKFAIL
2 J3 ?5 e: D* n9 `+ Q( z& N| MCASP_TX_SYNCERROR2 ~5 P9 x5 B  D$ m* V7 v
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR . H+ s& V6 S- p
| MCASP_RX_CLKFAIL
1 J- H1 C  Z# F2 I3 _# R4 c" W| MCASP_RX_SYNCERROR
2 H, n1 p' _' F- w| MCASP_RX_OVERRUN);
) t/ Y: ^3 T/ a* ]+ f2 e4 D}
static void I2SDataTxRxActivate(void)% g7 b; g3 ]  g- s  n" S
{# n7 M! d8 E4 n4 D8 [
/* Start the clocks */) l5 h3 p! C) \  E) e, {: ?
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);4 b! f0 n5 ~$ |9 P& k* ?2 o& m8 ]
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
! D# W$ o6 t" J/ r8 d# [5 |EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,) h( I  b" p* Y- I. L
EDMA3_TRIG_MODE_EVENT);* y$ \3 i; n$ x& g: R* N
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, - `# \  ^# k, F" D" {) z
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
! p4 j$ x5 k2 EMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
0 _9 d( G) j+ t! `# m! \; uMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
" @0 X/ j, d5 K, R$ Hwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */" ~# }- A1 ^5 T8 _5 i7 z1 z
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);; Q, o. x8 W2 X3 g
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
; f' f$ i0 p6 O/ t+ B; d}
( b( b- u! o$ X/ |) Q/ r: d
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

4 [( [2 G. b& b! A* c, i




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