嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
0 I9 [& o+ f9 H: B" S- cinput mcasp_ahclkx,: R9 V5 G) f$ f. _. H2 }6 Z
input mcasp_aclkx,
. Z. z. ~% y0 ], G; V! _input axr0,/ T4 t' h: @# O

1 s9 `; b6 Q8 R8 g4 r% boutput mcasp_afsr,3 Y' u5 V/ A0 l; m' F
output mcasp_ahclkr," a3 w8 O, `: c% X$ ?2 g
output mcasp_aclkr,0 Z, x8 C' ^9 r. d& n' n
output axr1,2 K$ P5 t9 X0 R7 a* j
assign mcasp_afsr = mcasp_afsx;
0 G+ S2 w5 M: Q- Vassign mcasp_aclkr = mcasp_aclkx;/ W9 V# R  \3 s& N
assign mcasp_ahclkr = mcasp_ahclkx;) U% i6 Z0 A0 j% j0 N
assign axr1 = axr0;
/ G3 X1 c8 s4 \

2 z7 _# w1 l/ K* ]
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
) L( k. ], {1 s( R
static void McASPI2SConfigure(void)
6 V5 o7 }' r' |  G{+ R# F7 k2 E% ]- b9 z, w. L# H9 F
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
7 h/ d0 [2 A6 W5 oMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
: n' i7 `! W/ O7 SMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);3 @0 I# R& c6 S/ ~
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
% @8 k0 j, S1 VMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
! O3 j/ y& @  _8 ^; R: KMCASP_RX_MODE_DMA);
% e2 O' L0 V# V$ d; C9 a9 Q, ?McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,6 j2 z( d/ O+ d6 P
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
9 r. |7 X' F% G8 vMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
* U6 L9 R* R, {! g& BMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
' u/ z5 L1 t' N2 Z+ h4 EMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 0 \0 r; U" V* Y2 u5 r) v' _& h
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */" |$ d5 H* j5 ~
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
* h6 ]! G7 F. D. a7 ]) z1 _4 qMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 6 P' t" |3 J8 k) @& C+ u0 A
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,1 U5 F% {  D" J, {0 D' b, x6 c
0x00, 0xFF);
/* configure the clock for transmitter */
) ], D7 p' T, ?  sMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
, X, F) P" K2 v2 d& O! B" SMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); / w+ r9 v/ ?. \0 o7 p: l4 T
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
6 l! ?( P: k) U) _2 C( U0x00, 0xFF);2 B! i9 r, n3 `* n- i0 h+ u
$ _  k$ a! b! @+ t. u) ^/ x
/* Enable synchronization of RX and TX sections */
$ U, i7 ?' j( C- J& }) _& S' H* tMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */" @- J" G, u7 X# b
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);# E+ ]8 N5 f7 m. l. F) N5 V3 X, q- x# x! r
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
' L# _1 u. j% O** Set the serializers, Currently only one serializer is set as& M: F  I( P" g" T4 S+ W
** transmitter and one serializer as receiver.
- W+ d4 l" v" }*/
3 w/ J; `4 y( U' ?% tMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);) k% z5 O/ X1 Z! b4 x2 u3 _
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*; F. e# \! ?$ `& x6 o$ o
** Configure the McASP pins
+ j, W6 j' n4 f3 G( p" r* e; f8 l** Input - Frame Sync, Clock and Serializer Rx+ A; a. ^: X6 F8 |- g/ ?# Y
** Output - Serializer Tx is connected to the input of the codec ) O& b. }) z/ T
*/" v  ]" X5 Q8 }3 m* F
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);2 g6 Q( V7 w' n3 l' Y
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));8 Z# G6 L0 H$ r( T
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
' F7 z$ E9 v6 j6 w| MCASP_PIN_ACLKX
0 h4 M2 T. i4 V! J5 ~) H- ~| MCASP_PIN_AHCLKX- Q! q& q5 |1 {( Q8 O5 y0 J- ~
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */' p% I  w, I( q$ n7 X% ^
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
+ _* t! s9 Q4 P: i, V. T| MCASP_TX_CLKFAIL
+ i* U) C/ T" n0 ?| MCASP_TX_SYNCERROR* _5 C3 \3 c5 z( y% g: j1 y3 k
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
! `# o/ Y: M) {$ F" `! {& K, `# X| MCASP_RX_CLKFAIL$ b9 Q3 h- b% t/ C
| MCASP_RX_SYNCERROR
+ ^) ?) h, \; T! t; p| MCASP_RX_OVERRUN);
+ J, f: [8 ]5 i' Z# l}
static void I2SDataTxRxActivate(void)
5 Y1 }$ ?! s( c5 j0 o/ P8 p( E/ R{
8 \1 m0 |3 c2 i; t! L/* Start the clocks */
5 K& g; g9 R5 lMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
7 Q) u+ i+ e+ |* ~$ LMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */9 z$ R% {0 O" l4 U! j2 B* v
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
% S& M6 u; f* C! I6 {EDMA3_TRIG_MODE_EVENT);
+ D; u4 ~0 f2 j1 B7 m( N1 pEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ' Z" k8 f. a+ j
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
  B: Y2 e5 F0 h' cMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
9 R+ m9 }* ]6 ~McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
" K6 \# K. P! ]0 I$ D6 ~5 ~while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */8 w% O+ G. t# q1 L
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
* O% T3 f/ g0 C  S) |& uMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
% |- C2 e# _) C8 ?. t7 b4 r5 S}

3 t, i0 c# x, M, C; h; Z+ w1 f
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

+ X1 C4 P5 X% R% k. v. W




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