嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
4 J& I9 Z" x( dinput mcasp_ahclkx,
3 I% H+ s, p; o- L. B3 S: {input mcasp_aclkx,
2 }- k: W& C3 r% C$ l& U& i$ S, [input axr0,
$ }- B7 L' H/ s1 g1 e/ B' T. F0 }2 J3 T* W# n' K
output mcasp_afsr,6 n: C& x; F2 V" g$ z; r( L6 b" t- G
output mcasp_ahclkr,
  X& C6 ?1 b' S+ ]output mcasp_aclkr,: m2 O! N; o+ r% U% U9 I
output axr1," `+ h' k& j4 F+ T
assign mcasp_afsr = mcasp_afsx;6 H, `: u( A4 K# `
assign mcasp_aclkr = mcasp_aclkx;
& {: A. J# ~5 @assign mcasp_ahclkr = mcasp_ahclkx;' x5 ~" I" P. m' h$ L& t7 E0 a* i
assign axr1 = axr0;

0 J' w: p/ ^# m3 ]1 a4 X& m* l0 r& I
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

1 f* ^/ N/ @" l+ D3 }, y% f7 v
static void McASPI2SConfigure(void)* X' |8 ^( r" Z3 ^3 N
{
, y: I+ r3 B1 L6 `McASPRxReset(SOC_MCASP_0_CTRL_REGS);
4 o- \) {. z' J9 m4 n- U0 DMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */; ]( Z! R$ D* e, f
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);) `0 a+ t0 l9 ?  j  A1 p
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
' n1 _' f. _& M5 sMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
1 Z$ I' O- ?1 J, b3 IMCASP_RX_MODE_DMA);
) y$ y& p2 ~2 g9 I% B1 P7 l) LMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
+ V3 |' `+ J, ?MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */: h# Y% @( Q, [' M
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ' C9 {5 f* W1 N  W' Z2 @$ P: H
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);7 f0 Z& a0 W9 F0 t
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
# x4 X' ]5 n/ Z" o+ gMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
) B  i. h4 x7 B4 zMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);7 d+ N3 \' J5 |  H
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
; g# ?" c9 U+ d* k& d' CMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
' q$ n; \% p* ~6 _1 G0x00, 0xFF);
/* configure the clock for transmitter */6 i6 J! R3 U  `* J7 z
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);7 N+ t% P4 _5 t' C* n+ J# c& A
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
- A$ Y6 r1 I, |2 E: h5 WMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
  x5 _3 Y# r, F  }+ X6 j* g0x00, 0xFF);
& b" |  k* o" p( A, O, I" V8 f# N4 |0 a- G6 P, B$ _
/* Enable synchronization of RX and TX sections */ ( s8 s: R4 ?/ u- _; l
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
# i' [% w/ C3 D7 B4 iMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);' q8 s% |# z# y& m3 P
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
8 C# j+ J7 z1 g9 ?: V2 E** Set the serializers, Currently only one serializer is set as  R' z& {) u$ P- O
** transmitter and one serializer as receiver.
& C" Q( {" C/ ^  Y2 E" P' c*/! z& @# P; I7 B$ _" k1 q6 |
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);" U0 b) k; M- d& Q1 O$ t; P" \* P# P
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*' y( s- f% @% Q( s; g9 |
** Configure the McASP pins
. z7 c- X; M: \7 ]! Z, E# F, }** Input - Frame Sync, Clock and Serializer Rx  G  T. L  H; p" x6 z
** Output - Serializer Tx is connected to the input of the codec
0 R) D4 R: W- t*/# o* Y. t! A5 K. D" Z+ Q0 s/ e
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
! X& G7 I+ \6 s' ]# J, CMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));$ a9 o, W0 I; t
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
  U+ J- ~) A9 p  A  Y% }" z| MCASP_PIN_ACLKX2 c# P; @0 z8 I/ \# `8 ^
| MCASP_PIN_AHCLKX4 ]& U, l2 k! c% Z# u/ b$ d. K
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */  N/ e5 [! A- K/ `% k4 z* ]" _1 z
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ' T' L7 ~$ I! M1 @2 w( H& l; z5 ~
| MCASP_TX_CLKFAIL
5 [2 C6 |& H' v- W2 A0 {8 p' W1 S" A+ N3 v| MCASP_TX_SYNCERROR' W- b5 M$ x( b  t
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
: R, t$ k9 [/ k) R+ Y6 P' D! s1 z- {| MCASP_RX_CLKFAIL! y6 M2 L2 b3 U1 K+ j$ g7 D: U
| MCASP_RX_SYNCERROR
5 v% L9 ]6 @) S$ [| MCASP_RX_OVERRUN);
) n2 ^" y5 R: H" e0 E2 Z$ O, h}
static void I2SDataTxRxActivate(void)
) S2 Y8 H9 j  @% j4 G) y{
: ]- _2 ~4 r( O' ~9 R1 I$ E/* Start the clocks */- r9 R% z) U& `  o! T  m5 b
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);3 _- _, h7 e- r: y
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */- J- P& X1 ]5 _  Y
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
6 K8 v- ~: i% S* j6 ~9 z" K9 pEDMA3_TRIG_MODE_EVENT);4 ~9 g" ?6 U; p& U* r
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
$ w# y- o9 m  d- t% S% OEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
+ K( |/ j- r7 w  R; j  {% A" b# MMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
+ `4 a& [. P9 E% n( u7 W' sMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
! _' B' c7 O  M1 A( y/ u& P2 l2 Uwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */6 y0 G- S* n/ K7 u" l* w; J
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);& f7 \4 }% n8 ?$ c
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
. s7 a$ ~; p9 K3 P0 X3 `, Q6 B6 _}

8 D) q7 n- E# }: b$ ?
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
1 i! w' D8 M$ C. U8 C8 T) \





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