嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,& F; b- M% ?' e9 E% ?7 G$ m) ~
input mcasp_ahclkx,' Z2 n0 D5 t, O* l6 y$ q/ |; T
input mcasp_aclkx,
2 x- O  `7 l8 J6 @input axr0,, f( W9 Z! e0 ^# C' V

; z/ g, h6 l' U5 V+ _2 Toutput mcasp_afsr,& I7 n. j% Z1 D6 e6 d
output mcasp_ahclkr,' C4 i1 W6 L, D5 M; v5 T, g0 d
output mcasp_aclkr,
( b; f6 P2 p6 O; s! B3 }output axr1,
' [$ p8 J8 ?, b0 U  \9 @+ a3 Z/ w1 f
assign mcasp_afsr = mcasp_afsx;
2 L. E- R' [# \assign mcasp_aclkr = mcasp_aclkx;
" N9 P9 ?) C- V( i, }assign mcasp_ahclkr = mcasp_ahclkx;1 r+ M8 n0 t1 g+ [
assign axr1 = axr0;

8 z, P7 n1 T$ P6 y* M& N) `
. V6 i, m0 \( A3 s! _7 [
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

8 w5 Z' {$ c  x
static void McASPI2SConfigure(void)# f2 t' U: V0 N1 c
{
# P; f4 S4 `4 D9 p5 t4 P/ lMcASPRxReset(SOC_MCASP_0_CTRL_REGS);1 n7 M8 o5 ~4 b* G  n5 ]* y
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
! b/ f) ]4 S5 v$ d2 r* `7 tMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
. @- K! E$ {3 S2 |; K& c) Y2 g8 _McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
! b# X8 Q2 s' I9 iMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,. J! L6 ^& S% H7 r
MCASP_RX_MODE_DMA);% U6 H# N2 F) X4 C9 Y, ]$ ?
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,) ~+ K# P" J7 L# }! h
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
5 a* Z" r) k7 i! @McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ; \3 t" B6 q& N' b; ]! x( y* k8 y
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
% r% M- ?- r5 r2 R2 [& T3 e$ ]* }McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 9 B% r" m3 T/ x; K" s/ W/ R
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
5 D' c) i6 l; y5 o% LMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
2 f, A$ ~. U( S/ N7 G, |- VMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); & X6 R' U0 F& k8 ~
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,9 G% P8 q8 p6 {* L. m3 z
0x00, 0xFF);
/* configure the clock for transmitter */8 v" U' X- i# M0 k# W, _9 J, f3 u" e
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
# ?! y1 [) Q' W% q( T: t/ XMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
8 e- c9 ~$ h. ?7 V4 UMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,7 z. w7 e5 w: q2 R6 L' ^' O) i3 w
0x00, 0xFF);; y- X0 v$ J5 Z, A0 ]

  y% j7 C: u: z& F7 V3 b) X/ b/* Enable synchronization of RX and TX sections */ ! F3 D( Z9 L: q* Z- _, ?
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */6 m3 A4 W1 p0 l1 a9 q$ n) p4 d) Y
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
9 C' h3 t8 c: K! r0 `7 ]McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*& n: y6 k+ v8 q3 q7 o% J
** Set the serializers, Currently only one serializer is set as
# ?/ N+ F( v& _7 l* j3 N  }6 y1 H** transmitter and one serializer as receiver.
! Q- }+ r  M* M. m  m" R6 r6 b*/2 ^& p- y( A- L* V
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);7 E2 _5 B: `6 C/ L
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*# ]  w3 J' H( `/ M$ i. i) s; ]
** Configure the McASP pins 7 s7 @; _" H; B/ N2 ]2 J3 F% c
** Input - Frame Sync, Clock and Serializer Rx3 q# @& D4 L6 f. T* J+ w
** Output - Serializer Tx is connected to the input of the codec
; N$ P+ K" Q+ D4 k3 e*/$ K5 P6 q8 Q4 A& {
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
6 @! q: D% H) s( ?McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
* Y4 {! [% h$ SMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
4 ?. H: w& Y) ^( K0 U* s  N, N| MCASP_PIN_ACLKX
3 q! b/ Y3 b2 K' W  i! c  a; Q| MCASP_PIN_AHCLKX
6 j& E5 Z/ C$ r- i| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */9 ~) N: d* G% e5 o1 v2 [! u$ ]
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
5 K5 Q- J, i3 |8 j3 i; k! L+ X% L| MCASP_TX_CLKFAIL
+ P/ T7 P( e- h& N( L| MCASP_TX_SYNCERROR
1 Z+ w& k6 m3 k2 \. x5 p| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
1 J& |3 f+ Z+ g2 z) @* N| MCASP_RX_CLKFAIL
5 H. P/ S1 {* E7 }9 ]% [1 ]0 S& U| MCASP_RX_SYNCERROR * D1 D. I" A; R( G4 B
| MCASP_RX_OVERRUN);
5 n) h: Y' s, N# s3 x}
static void I2SDataTxRxActivate(void)2 o: O5 W% |; m: F- r
{
) S: {0 x* B( Q/* Start the clocks */
# P& x7 p& x3 l* H7 cMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
; K: t+ G) N% I% ?McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
! w5 n, A1 `8 a0 ]( bEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,& m. ?2 f$ P$ S1 _" ]) Y7 x' y
EDMA3_TRIG_MODE_EVENT);3 n! ^, R1 p. y  k1 A+ ^
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
; `4 r) a% `5 p6 y! q" OEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
3 k8 r) c5 Q0 v4 \- ZMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);+ i: Y' G& b; H
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */& K, x( ~$ E7 s. ?
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */* i# Y# K: H6 `1 l0 b4 S, e
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);/ W& d) o# T% Y, V
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);9 F/ G3 K. B1 l) D7 ]- \) U
}

9 ~. x1 n5 V+ `( `6 A; h# x
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

: V& c9 e, F& N5 }7 V




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