嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,, P. q* T% i- Z- }+ T
input mcasp_ahclkx,1 E! R1 B! `9 P! n' `
input mcasp_aclkx,; E5 o: k8 c. g# Y, X
input axr0,6 U+ }! ?( Q# I7 r; _
" W5 ^0 B- h' D+ y9 ?
output mcasp_afsr,
9 W* J* \0 o4 v: Boutput mcasp_ahclkr,
* P' l$ D. D* A7 }+ g- poutput mcasp_aclkr,
# A2 d5 T+ f+ [( koutput axr1,
4 j- Q4 b: n+ w. g
assign mcasp_afsr = mcasp_afsx;
  x( A+ A, j! P1 I0 q9 t1 [- Aassign mcasp_aclkr = mcasp_aclkx;
- G* @2 n: r) s5 L1 L* ~assign mcasp_ahclkr = mcasp_ahclkx;
) i$ s1 Q$ `  K; cassign axr1 = axr0;
4 ~" ]6 L1 d( N, y

5 p0 P" |+ s' u' n
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

$ z& k1 P* [" i9 N6 U* X, v2 D
static void McASPI2SConfigure(void)
) ^" x" e* X7 r0 m- o{
7 C1 G% Q6 V6 z6 X( f" r( a7 IMcASPRxReset(SOC_MCASP_0_CTRL_REGS);% j# h9 T1 I6 L
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */+ f$ c9 u- Z0 y+ u- ^
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
7 y4 {% j) K# b% E8 b! R" wMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */1 h2 y+ z, `9 n/ n, D; g) X" _
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
7 [# k- \4 l8 r% o$ m- iMCASP_RX_MODE_DMA);
6 Q3 k! Q, e5 d, w2 y" Y# jMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,: F  n1 f7 `% c/ J' u- _- B
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */4 _# I+ N' h1 G3 }
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 8 w. D; r9 L( f4 F9 N; J; d8 i
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
2 a: R. j  {8 G6 xMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
5 h- C+ W8 b) e8 @MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */3 I8 l; Z$ v! o$ a5 ^/ P
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);! X& X% O' z4 O( t: }' V$ B: k! a; H
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
  E) Z0 d& F: W  yMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,$ W! e' R/ Z1 i# K2 Q
0x00, 0xFF);
/* configure the clock for transmitter */
/ @+ X0 r. k+ B( r6 B, dMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);: A' @/ J( x7 o5 N- J
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
) C: Y$ p- Q# W4 }3 dMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,; R( l5 w/ h# T. `. P
0x00, 0xFF);
& e% x; Z! T4 q. j! G+ Y3 ~4 D* k+ a& z
/* Enable synchronization of RX and TX sections */
- q9 v2 j7 c" Q3 x2 DMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
" ?* D! O, [! H' \  N9 LMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
+ ^$ i7 I" ?/ |3 Q0 q6 HMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*: U7 G, ^4 E: b
** Set the serializers, Currently only one serializer is set as* @2 x" P* D! p6 b$ @$ y2 ~8 _
** transmitter and one serializer as receiver." u2 Z" Y- V8 h: n1 f
*/; o( U3 ]" Z* R3 ]# c& O
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);* T6 m8 X. B; ^' w+ X5 F
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
% o0 A' n- c, R- s! z: t** Configure the McASP pins
- l. }7 D9 S9 z$ b4 I% ^9 c** Input - Frame Sync, Clock and Serializer Rx$ _4 I1 }9 {' ~: O6 B+ [
** Output - Serializer Tx is connected to the input of the codec ) x( V5 L8 }% O( d
*/
, a  g+ B' X1 j- ?  Z4 D* AMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
( X0 y( s- r% c& }& cMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));! G% x" T4 }+ G' x( P1 t- e, _
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
3 [4 J) [) H! n, r4 o| MCASP_PIN_ACLKX+ `+ t% Z$ e5 C" x2 R+ e+ n7 {5 v
| MCASP_PIN_AHCLKX. t& ^5 I2 y  J& R' }) B2 w
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */. @( I% ^: n2 q; T
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
5 l4 l; m1 S  q  a. x6 q| MCASP_TX_CLKFAIL # l. G! V) l. ]$ a
| MCASP_TX_SYNCERROR& ]; H) `3 _8 f- l
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
/ l- {% N5 R" g| MCASP_RX_CLKFAIL
6 p9 s3 t( S+ w% Z| MCASP_RX_SYNCERROR - p9 e' W3 ~9 r
| MCASP_RX_OVERRUN);
8 p0 J4 U2 m: w( f, q) r}
static void I2SDataTxRxActivate(void)0 y, s/ ^+ e$ m
{5 m7 Q- s% @0 J% b
/* Start the clocks */
6 z4 \" a+ Y+ `% d5 z: N9 pMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);8 e' f' u& S! U
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
/ M  e: \# A0 V; U0 p" HEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,( U+ Q4 E5 C+ t; q! m9 T
EDMA3_TRIG_MODE_EVENT);
+ T* Q: @4 C) H* ?- D3 Z5 }8 S9 Z2 XEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 3 N' a& Z$ H  R, X
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
) o" [, s/ Y6 ~2 R& L; g$ _McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
. Z7 d5 d  ~+ a6 F/ Q' o4 KMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */( H6 q3 c/ V' K" }3 U- O
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
( ?. m" p! L. d# {( hMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);5 ?4 Q! w/ f, ^
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
+ w; T& v+ D. L5 r6 \/ S6 |}

" o) y& R0 A0 V( [3 h2 q, q
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
# X% \6 R3 H- ]) Z: p3 z) @





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