嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
; [/ e; U  C9 w5 V! ^0 Oinput mcasp_ahclkx,, M! [. Z4 J" W
input mcasp_aclkx,9 n, `9 ~1 u" b8 d( i& R
input axr0,  V4 @; |& G2 A; j

# d9 [5 P/ a; i% eoutput mcasp_afsr,5 d) L% n' y* k+ [) Z
output mcasp_ahclkr,+ u# }! ?7 V1 w  Y/ ?9 g
output mcasp_aclkr,) y4 h3 e' N+ n# y0 X% g
output axr1,# k+ I& @) n' l) }: x
assign mcasp_afsr = mcasp_afsx;
+ p: G9 F) R3 N/ {/ yassign mcasp_aclkr = mcasp_aclkx;& u+ Q( f0 |$ y4 U
assign mcasp_ahclkr = mcasp_ahclkx;
+ W' N" \  D: v4 kassign axr1 = axr0;
$ O% F/ M% V: w% R5 N8 F- _
# g* `. G6 H* z" g3 ?+ u
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
2 k; ?" }8 `* D' O) }3 j
static void McASPI2SConfigure(void)
0 w( ?! l1 C% o3 h5 I2 Q" j{3 q0 u9 o+ Y+ P5 ]0 j8 H- }! |
McASPRxReset(SOC_MCASP_0_CTRL_REGS);( f" l$ V8 O' d+ l( R; q
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
# R, j8 I' |+ l, SMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
, v1 J* E7 `  C1 _3 zMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */  \5 o, k5 r4 I( T  z; C' y
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
/ m9 p4 W- m* F2 j6 U8 S. B0 FMCASP_RX_MODE_DMA);
% P2 I& t2 B, U: ~/ CMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,$ G' E/ b# o1 F  @* P) W5 V3 L
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
# V# x  b% e, c1 V6 MMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ; g, I: O! L  c6 p9 m) {8 j3 y
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
0 h& h/ P- |" o, i4 K! YMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
2 l5 _2 e9 k1 W6 b( `% s9 lMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */! d& U# R3 F. n
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
% P4 H, j( z  P; h6 I$ RMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
( u: l) u! ]' A% vMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
& U5 j) U' h$ r1 h0x00, 0xFF);
/* configure the clock for transmitter */
' \7 _4 `0 K: S. D* ZMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);8 M0 q; u: J7 t+ x9 @8 F, ^
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
# E0 R% {. J, ^" N* QMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,* O  J( E- u+ l; ^7 u+ h
0x00, 0xFF);/ |. [  e/ I9 z1 s
% f* [  D- [# ]
/* Enable synchronization of RX and TX sections */
6 i  E8 G: a: }4 w% cMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */' y( O" O/ A4 }6 v$ W
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);, X( P" ]' l/ t1 w
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*: \* ]8 R( t( R: A. r
** Set the serializers, Currently only one serializer is set as
" G1 r: @9 t, @8 Y, v* }7 j** transmitter and one serializer as receiver.
! P7 u# V! {7 h* T*/
: l; b! p+ {  `6 }9 m" y2 V' CMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
2 F0 Q# W+ P  Y$ q: x& Z2 MMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*  @" b$ r  }( D! w4 M+ [9 q, \
** Configure the McASP pins
/ e. S+ [6 `. t' ~& n** Input - Frame Sync, Clock and Serializer Rx
. w) B$ j6 p/ ?! T+ N** Output - Serializer Tx is connected to the input of the codec ( m' ^) u6 z8 i, B# E3 N  j3 D7 B1 _
*/  d1 v) k9 a" B
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);$ q  m! E4 b+ c
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
8 c( F4 j3 q! [; p2 GMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
! \) i( K) v# ]4 Z5 N0 N. A* Z. \; }3 l| MCASP_PIN_ACLKX# A4 ?( A% o; F
| MCASP_PIN_AHCLKX
5 }* M& `, P) q| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */! q! J6 i, v% V' |8 Z
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR % n8 o( @4 t: M0 T% K! g0 e
| MCASP_TX_CLKFAIL
  w7 |. l6 `5 k) P  T| MCASP_TX_SYNCERROR
5 Z3 J" t/ _9 K$ K* q8 y: E| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR , u/ r! f& O( z+ D$ Q
| MCASP_RX_CLKFAIL: D) L, {5 O& v/ |, t
| MCASP_RX_SYNCERROR 0 p9 q, K7 E5 R1 B6 N; i) D- i
| MCASP_RX_OVERRUN);) |$ \' C) t8 c0 ~$ V' }
}
static void I2SDataTxRxActivate(void)0 p* Z. W  s4 e$ c9 h3 f
{
' J' I2 e* A- _& s$ N4 A; A  c/* Start the clocks */  m4 t( e; Z" f6 |: ~
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);( P( [# L% |* N
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
3 P  P, }$ [1 m; U: n+ b! C# s$ Z! D9 jEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,! b7 C8 C: f& [( |* _- X
EDMA3_TRIG_MODE_EVENT);5 ]3 a' x* n* t: g  N
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ' `  p& P* H7 P! B; J# D5 k
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
7 K6 ?1 ?" u( B" S9 oMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
. w8 T' R# ~% Z- P1 I4 eMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
$ ?# Q* ^9 i/ E- v( S0 ~# cwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
. q1 q5 |+ o/ e, y* ]4 G. WMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);" z6 e- q6 S- C8 S0 a& \
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
6 h9 C+ @4 w8 A, |$ |& h7 d}

5 R! g5 r3 J0 S5 N$ G& S6 ~
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
, Z' J  T, x! M8 R! p5 P* w% @7 [





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