嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
, S. V/ g& y- o6 Q; A5 U* [* einput mcasp_ahclkx,
3 C; U; [  J% Iinput mcasp_aclkx,6 z+ A8 ^% Q$ e6 _
input axr0," M" R' J1 a3 }. w

* X0 E/ i! a9 u; Q: voutput mcasp_afsr,
7 S$ X1 P# ^% A# P8 s: [2 poutput mcasp_ahclkr,
/ L) Z" y. A+ M3 w' toutput mcasp_aclkr,. i7 e- T% @& j
output axr1,
1 h  E+ U7 y4 M1 d. F. F2 e7 f6 K
assign mcasp_afsr = mcasp_afsx;
9 w2 H1 y8 A/ i7 t, L) _assign mcasp_aclkr = mcasp_aclkx;
$ K1 Y6 @8 v: Aassign mcasp_ahclkr = mcasp_ahclkx;
) K0 l$ J& V; A* A) Oassign axr1 = axr0;
. y* l4 d: g+ ~1 H! P& D. w
" U- G+ f: G- J2 K' [
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

0 Y) f8 |0 l+ \  Y/ ~0 l( w' B% l
static void McASPI2SConfigure(void)
3 Y0 d: ~& Y, ^0 z' k* n* W1 S{) s6 C' B2 A' X6 L% ^+ h
McASPRxReset(SOC_MCASP_0_CTRL_REGS);8 g/ \: v& ?1 [, U0 M' r% Z
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
5 V  _4 P; P; Z, l) [& O; n; UMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
( F, C% J! p$ o: q  n7 T  CMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
  \1 L7 v: |( _: YMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
0 f$ ^3 E2 N5 B: K6 ^" [0 [MCASP_RX_MODE_DMA);
7 H; c: J) W4 n; G2 ~McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,8 m' z. Y4 R' T1 L. ^. D
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */6 M9 B0 R# X! a, T& I
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ; L4 D  C8 ]2 V1 C# B5 a7 ?; W4 g
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
+ @6 s; B6 d# EMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
% n# }$ ^! s5 B3 p8 xMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
. C! B9 e6 C' TMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
/ Z2 X! D4 @, U$ Z' d& V* {McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
, X6 @* Z; s$ d$ KMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
7 D5 n% J' U" N" V1 j0x00, 0xFF);
/* configure the clock for transmitter */- P: @; P2 l" G! g) F
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);. y- |# E, \# e/ M# A( _; V/ F
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);   j6 Y6 w) P! j8 j" i: a# @
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
5 F+ l  R' {$ o0x00, 0xFF);
+ [# }" A) Q) g4 N8 }7 h9 V2 W9 b; a
/* Enable synchronization of RX and TX sections */
* V+ ]" Z( H. h; e3 U$ fMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */$ g9 J/ X3 O' z
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);6 ~- i8 _$ h6 g. M; @3 k6 h2 S
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*" M. u) p9 J$ }1 [* _- y
** Set the serializers, Currently only one serializer is set as$ s% |( f" u8 [# |3 u, j) ^
** transmitter and one serializer as receiver.4 k: @" n8 r& ^, B! z1 Z0 i" p. y
*/" ]" g  Q9 B& d. B2 R
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
) ~0 I  x; @/ u2 vMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
# p: g# f: t" H; h! m** Configure the McASP pins ; X, H" I9 P# `% C7 s
** Input - Frame Sync, Clock and Serializer Rx
! C" c  v, D8 r  ?5 @5 n% i0 B** Output - Serializer Tx is connected to the input of the codec
6 c4 C- _: T0 F7 o5 L2 C- ^*/
4 W: D3 m/ ~# k5 v/ hMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
. }# B, ^' G, _: vMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
  [! E: C* w4 x" M; c& u) bMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX& ]4 ^3 r* n; ~+ f$ E' L' `5 t
| MCASP_PIN_ACLKX' D' z+ u1 C2 O) t
| MCASP_PIN_AHCLKX
& ]! d* i. V/ E* X| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */* l+ ~; j$ D: u; Y, a- a8 u5 f, Y
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
$ ]' T8 o8 V& S. B( U& O- E7 o# e2 l| MCASP_TX_CLKFAIL : F1 ^% e4 {* [; U7 l8 h& L
| MCASP_TX_SYNCERROR
6 w; p& p6 a' b( |, ~| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR ! e9 g2 v* _* j6 w! e* {
| MCASP_RX_CLKFAIL$ D9 k, A8 e+ Q" X: Q
| MCASP_RX_SYNCERROR ( p* p3 J/ n5 E
| MCASP_RX_OVERRUN);' s5 b4 ?0 C: O1 F* F
}
static void I2SDataTxRxActivate(void)
) Q$ c5 K8 E: Y- C+ l( P7 W{9 m- t8 c- k7 D3 r* b+ b
/* Start the clocks */
, x: g  x. n1 TMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
& B- n5 |! G7 \& [McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */* P# \0 Z' o; g* _
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
: S* q) ^- q, f% CEDMA3_TRIG_MODE_EVENT);% T. h2 l9 h- B: r
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, . \7 P# |1 c; E' o6 O+ A1 `; {% e$ F
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
& S( n9 ~1 N! I' f/ fMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
7 g- c; G& x0 G/ T* m- EMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
- O! A. p% d& B4 c3 _) jwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */! i' V7 R: K2 a2 A3 w
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
  d4 a- D4 B* ~2 K" E5 ZMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);; ]) j$ |5 f9 _+ C/ o
}

; @# T' h& W$ F) K) S6 |
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
, s& l2 m- A( l5 l4 v





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