嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
( I0 P5 ?# F0 E4 g$ v( }( G5 Q+ ~input mcasp_ahclkx,7 d5 _. A6 h3 u
input mcasp_aclkx,
  a4 d7 B! p. J  Iinput axr0,& x- ~$ x& [- L- g+ r& i" ~
+ j# D# k% y' T5 }
output mcasp_afsr,& W" Z8 N( Y0 ]+ V
output mcasp_ahclkr,
, j8 s3 B( @4 e! m" S0 Y% Xoutput mcasp_aclkr,6 l3 E( I  T' \; U
output axr1," z- j. r8 t4 |0 U% d; p
assign mcasp_afsr = mcasp_afsx;
: {* `6 U4 N7 c1 B  bassign mcasp_aclkr = mcasp_aclkx;, D  a6 _$ C* g& K. [
assign mcasp_ahclkr = mcasp_ahclkx;+ \/ Y. B1 Z% p- f  S3 N5 o
assign axr1 = axr0;
0 c! m) g0 ?( _$ {2 p

+ d% o3 U" y; f- }. g
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

) W: T. x0 b0 \* t
static void McASPI2SConfigure(void)
4 {! @. y% Q/ f7 C& q{
5 f' Q( |$ ~& X- g% V" F- mMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
1 P; W* q8 U5 S: hMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
# s6 Y  _! O" l. n3 r7 O5 p6 _5 `1 HMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);5 e4 R+ ?1 U2 H& l$ M% n
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */4 X6 @# n+ @2 ~! U% e
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
, z) Z  k7 `1 S+ X; E0 \& XMCASP_RX_MODE_DMA);$ m( h# v$ Y' j# A$ e6 j1 t* J5 l2 i- K
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
0 X. }  L# E4 E$ Y# t( \MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */) U6 k9 x+ S7 ]; N; H2 ]0 r
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 9 f" q& `( n, N/ U1 P. D0 e
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);- L* [1 j4 ?7 N9 [* I  c
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
, d/ n: h; K" G; vMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
' i$ h/ e$ q; f" A. T7 wMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);/ T7 r" x5 h* b- k
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
4 M( `5 l  q2 |, ]McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,3 H& w) B2 \7 a' s0 e$ A/ e
0x00, 0xFF);
/* configure the clock for transmitter */
. J  `0 d+ |: b8 ?McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);. J5 z+ O) U8 o. s
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
' ^; ~, J. y* oMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
% r( d* x# Y& T4 c5 N) |0x00, 0xFF);
) Y4 c4 N" k& \4 K0 N. t1 I- l. P8 w) q0 T$ p; X
/* Enable synchronization of RX and TX sections */
7 L, h! S7 F7 c/ zMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */% C% g0 [1 x" K1 g
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
2 w5 M+ f$ ^1 T. S$ k2 m+ i& y) V5 vMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*( s$ _7 M+ p. X6 k1 j- g/ p" ?/ B
** Set the serializers, Currently only one serializer is set as) U) |+ \+ `' U/ T- Q; Z! e
** transmitter and one serializer as receiver.
, A0 I; Z: s' o9 w*/
% g# L6 x9 z$ G2 B3 xMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);: B, [, `' J; z
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
2 N. X: X4 Z0 f$ e( r) C2 j** Configure the McASP pins / P  I3 W2 T* m
** Input - Frame Sync, Clock and Serializer Rx
8 M- n3 g1 h( Y/ }$ ^( ]; P** Output - Serializer Tx is connected to the input of the codec
/ O9 R0 V3 w& V  a*/
# \2 q( X9 p' p! T; q0 RMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);0 R! @' F; v9 J  y( g0 ]# S
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
7 r$ E5 j* n+ r, l! }" sMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX0 f' y: Q! o2 ~4 x( D3 R# n0 x
| MCASP_PIN_ACLKX% k* V6 K7 o3 E6 q2 h
| MCASP_PIN_AHCLKX
6 E8 P9 x7 i( v/ I1 T$ V| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
* X3 K& t: Z8 @) nMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
0 R3 K& N; a6 u$ w1 Y- R. Z| MCASP_TX_CLKFAIL ! t' R4 G- v. z4 u/ N5 z' E
| MCASP_TX_SYNCERROR) T7 b( R7 z& v$ D
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
3 r8 [0 G# W3 M0 i8 w; O# _| MCASP_RX_CLKFAIL% o: c- t$ _4 m9 U# X
| MCASP_RX_SYNCERROR 0 D8 D# {( r4 a
| MCASP_RX_OVERRUN);' ]% i6 a" i- Q% m( ]
}
static void I2SDataTxRxActivate(void)/ p+ {0 m8 l" m( a, l
{
& n  |5 J* E% b! m/* Start the clocks */  i1 B' H$ f& A0 k2 y' y
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);2 B8 M0 g! k+ X1 L
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
; J! T! t$ _. r/ f# o9 s+ d- C( D$ jEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
. E9 N$ m9 `0 f7 x0 V! T5 jEDMA3_TRIG_MODE_EVENT);
- z0 j/ _$ g! O* [EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
" B: ~8 |; z; b& N4 s/ s) `2 UEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
4 w9 J$ ]( T( F, Y1 x9 x3 tMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
0 A) s% k, D& H. b  }' _  eMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
( x; x( k) T) \: {! P3 Y6 @% Gwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */0 B2 J1 ?+ l) R6 C
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
: Y7 Z/ N  G( ~2 t/ C( r. ?0 h( }1 o+ RMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);4 h# j2 S/ V: t1 ~+ v1 N: Q
}

% I% Q9 J( L% Q! M$ }
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
% n7 W2 S# G3 L8 y& c. v





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