嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,' a( v+ D/ H, P
input mcasp_ahclkx,; s  K8 D' C, t# a5 q
input mcasp_aclkx,
9 _  B+ a$ C- u8 qinput axr0,
: y- [" p0 ~9 }& j. p6 a$ r$ ~8 R, K7 t
output mcasp_afsr,
/ Q* O( i1 d, E' j; \$ x% e* k% loutput mcasp_ahclkr,
# I% B* ~2 Y9 H8 l2 Ioutput mcasp_aclkr,) ?3 K% Y9 H( t
output axr1,3 W+ S  e: l' p. S% w
assign mcasp_afsr = mcasp_afsx;# m, {; V$ A$ \1 x* V
assign mcasp_aclkr = mcasp_aclkx;
- }1 L1 L+ D5 C8 P0 _$ j3 `0 s# q+ j" Passign mcasp_ahclkr = mcasp_ahclkx;
/ Y1 f4 G7 Y: Massign axr1 = axr0;
: Y' d2 M# A& h6 ^2 ?- [; y0 I
' J; ~/ X/ f: S7 x% W" [4 x: u" V
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

6 S$ l3 [" @4 b5 z8 T
static void McASPI2SConfigure(void)4 w4 l, f7 r- S" l+ I4 |' _
{
0 P- |( X  H# _& _0 i3 F/ a9 K; RMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
! d, t3 a/ n( k4 `. p) z9 hMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */: }' H8 K( m6 \9 }  {; H. y
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);  _- x  R2 P8 _' P% b) H
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */! m% r; K; |- }+ R' x
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,% C! q2 w9 a/ z: n, y9 _
MCASP_RX_MODE_DMA);6 W' H6 U. H; R$ l% [
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
' `. n: |* Z' yMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
1 \5 y: ]( @; J& Q1 l  ZMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 6 O6 L: T$ Q- Z& |- G" L
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
9 w3 d1 O$ r- p9 uMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
( k( L  M" L3 J7 o! C: _; ?5 f; KMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */' t. A: u2 `8 `7 C- D2 v2 W2 Q8 u: y
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);2 y0 D. P% f7 W3 s
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
- u- \. G, D8 u  D7 P+ c: c. O; TMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,* v! e1 N; B! u1 K' b+ M" l
0x00, 0xFF);
/* configure the clock for transmitter */
6 }! w8 d! R% F+ JMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
) b% A3 R4 I+ L! kMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ' _! P- Y6 x  v; J9 c
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
1 Y3 D+ O# n( P. ?  Y, f  A0x00, 0xFF);
! L, U/ V  d2 i6 E; E- L( D, T! u/ K$ w$ q$ c
/* Enable synchronization of RX and TX sections */
4 w% K/ f& M- M+ R! L6 YMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
; `" u" _& Q; P( V9 z. L# z. D6 [McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);" n0 v8 J8 w" E5 Y% J
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
) N; `8 u1 r) M$ q" p; ^! B** Set the serializers, Currently only one serializer is set as
& Y9 M0 z$ G% Q4 a** transmitter and one serializer as receiver.+ N& ]6 y: N+ _9 T0 ?; t7 m
*/0 w3 W& i  H5 V
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);- t) T8 k1 f& y5 a' Y, N- Z
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*$ v: l0 H& r0 j. f9 I
** Configure the McASP pins . s1 W2 L" j' K, c  I
** Input - Frame Sync, Clock and Serializer Rx: R% Q$ a0 u" X' l
** Output - Serializer Tx is connected to the input of the codec - l1 D( ?2 u1 H' l& O- i3 V" X
*/
1 @  W/ ~  p- X0 ]McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);. w7 O3 d! \( k3 R" P
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
; \$ N1 p; T. ]8 W3 uMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
; F9 S% i- k7 z# k9 o| MCASP_PIN_ACLKX' \4 F0 T( d2 Z" W% H* Z& y1 e
| MCASP_PIN_AHCLKX7 Z8 Q' [: R0 M! @  ]/ x
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */4 Z: a7 s3 W+ ?
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 2 v3 {# k, C1 k- [% C' Y6 m! z
| MCASP_TX_CLKFAIL
$ f( ?' O  B& r| MCASP_TX_SYNCERROR; @1 ~6 s9 y0 n8 i6 E6 q
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR - w8 T" Z4 d) @5 {3 l0 S  {  i* r
| MCASP_RX_CLKFAIL
0 Y4 h" T8 I" L5 i; A0 Q' K0 k| MCASP_RX_SYNCERROR
1 T( T0 U& p2 l| MCASP_RX_OVERRUN);/ g  x& L3 X! [5 P/ |9 `; }) D
}
static void I2SDataTxRxActivate(void)6 q. r: M) U! C/ H7 ~# ^
{. T) j# I9 H; v; }- z: [
/* Start the clocks */
0 L. j) k* H3 f+ w" S; RMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
, |: _) e2 F' r- h$ k6 EMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */& G* v- c3 u8 c% X' s
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
, k8 k! ?4 i2 o& N& AEDMA3_TRIG_MODE_EVENT);
& _+ r! @& g1 e( }% U; C( |EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
9 D$ ?/ n8 n; l. i' pEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
# p( i. S, `0 CMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
. }  s9 I& f! |3 W) ZMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */# \1 s1 [1 B" M: N' N
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */# t' L$ u2 f5 `8 }; F
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);  G% t+ y/ c; Z. b, z. ?! l# K' o
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);7 v# c% s9 D4 ~6 ]" f1 a
}

% N3 o9 a9 K, Z- E. Y
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

: s* E& c! V& M2 X9 Y0 f+ g




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