嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,; `& h* }; f/ ]" u. ^0 j- H* x+ v
input mcasp_ahclkx,  o/ Y) W$ a( r( F: g7 v" `
input mcasp_aclkx,
8 l  d  U$ H* E+ tinput axr0,6 h* c4 F- N! m0 Q

3 S0 [. Q+ O3 q) Poutput mcasp_afsr,
! H9 Z  h/ n# f% f0 O9 toutput mcasp_ahclkr,+ a, ^; l9 Z( C! @( L4 i7 t. z
output mcasp_aclkr,* d) V* v6 |- f& u& e
output axr1,
: G1 A) ?6 I+ Z5 r
assign mcasp_afsr = mcasp_afsx;
5 A& `9 j$ K1 v( p+ i$ w# hassign mcasp_aclkr = mcasp_aclkx;% k, h" V4 b# F
assign mcasp_ahclkr = mcasp_ahclkx;' y, a( V7 {7 j
assign axr1 = axr0;

' \. _+ y& C7 D' w) m0 T
* {8 A0 D* f, V* \5 L& n& B
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

% w7 y9 @/ P& R2 U
static void McASPI2SConfigure(void): r$ h. b3 G- v0 K1 h2 B$ D6 ]& w1 v
{
, B! ?3 Q3 c! K; d# r* cMcASPRxReset(SOC_MCASP_0_CTRL_REGS);( t  J: g- X& d% D% b' h. [
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
8 \6 a+ K2 I( E2 h0 D7 I! FMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);( R* w, |* F, P# {+ U% u1 e
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
- W: x! V: H: ^; TMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
% M! k. O- H% q! L" F, FMCASP_RX_MODE_DMA);
) O' ?+ E3 G! d8 k% r2 B% o: v! XMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,2 C7 Q- z! o7 Q
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */5 ?; T! U4 K3 ^2 L4 S, I
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
; c& j( ?2 }( P5 bMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);- @$ I% s+ d0 E3 n% @6 s
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ! ?3 N  g8 }$ l
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
$ Z4 Y1 y$ w2 pMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);" m+ W& g2 ?$ G6 Z
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); , _5 d4 p$ |/ t! g7 _& j$ ?4 C" C
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,& [: U. ?8 V: O: V  C6 {& T
0x00, 0xFF);
/* configure the clock for transmitter */
: n% ?5 g. a" p8 s+ F+ nMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
/ P# K/ o8 ~' m. l9 I' E+ ~McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 3 D" u+ \0 R  p1 p' P2 ^9 x
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
- V9 y) L- {! Z% W# `7 B0x00, 0xFF);! O0 A1 ]$ O* r+ X! E% ~% ]; b
& I& u& U, ~' d* U2 V  P4 t! Q* ~  l
/* Enable synchronization of RX and TX sections */ / l0 p6 x$ S; R8 }+ Z4 a: w1 M$ }
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
2 k9 p# s3 B; A5 A4 a- }# uMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
8 p" @/ e8 X9 \5 [6 }, MMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
+ {* g$ N7 o' e. v% M** Set the serializers, Currently only one serializer is set as
8 C! ]) i- }9 J5 @* |* L% S** transmitter and one serializer as receiver.5 N* V3 Q# l9 s+ e) J8 l
*/2 p/ F' M0 l( y) U' u& @
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
4 U% c. A  E1 P* `) f+ sMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
# P' i0 N+ d. i# |: [** Configure the McASP pins 3 X9 r* m  Y! u3 C! x
** Input - Frame Sync, Clock and Serializer Rx& @% H" d2 B6 Y
** Output - Serializer Tx is connected to the input of the codec
7 H) x; E% ?8 p*/1 V3 ~# C# T7 Q% s
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);2 C0 m6 Z4 g/ T9 {; j
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));" a& [8 T8 q1 g4 U
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX- ^' b6 E. e9 m( {
| MCASP_PIN_ACLKX
+ V" |) K) J3 [7 n1 m, y) }4 R/ R| MCASP_PIN_AHCLKX& a; H6 ~! w9 p
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */4 x+ J% X8 e( C$ C
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 4 Q5 @+ X( q( ?$ h% b4 }4 u1 w" p
| MCASP_TX_CLKFAIL 0 e, T: q. U% _  p
| MCASP_TX_SYNCERROR
2 d# b  P/ O5 \  G/ U/ B1 o7 z| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
$ Q( a: Y$ G$ A; S% t" {* r| MCASP_RX_CLKFAIL
- ?$ e2 H8 R' D9 ~: e1 T( M6 [| MCASP_RX_SYNCERROR
( n- d" y* c+ n4 {7 w| MCASP_RX_OVERRUN);
" A9 q0 t: f9 i: U}
static void I2SDataTxRxActivate(void)
; k3 N7 z+ b, k8 ~  l" z, \4 f{
  A# h. m0 b9 r, R" `/* Start the clocks */) U2 Q9 `+ i" n
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
  e: b3 Z2 y3 X, y6 x7 D) uMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */5 s7 `4 g  L# L% F. h/ M& V, S
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
0 T# y! H. B$ {* f1 b8 x/ Y3 hEDMA3_TRIG_MODE_EVENT);8 C( p# K5 Q) l
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
3 t- d( Y- }4 [& D/ _) ]% }$ vEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
. C$ h& T$ @0 u, d4 f) mMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
# @1 S2 W2 d# F" `, B% u1 LMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
+ E1 S3 P4 U+ ?- kwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines *// Y- W) j: M& f. @' G# J4 u
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);1 {* h, K! U4 s# j5 [
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);" |5 {1 [- k) l
}
4 f4 Q9 i0 C3 K1 G& N
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
6 P/ t$ ?$ g  h0 B





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