嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
, ~7 _* I( r4 b" B; Q9 Zinput mcasp_ahclkx,
6 a: B7 S& |. v# }input mcasp_aclkx,
: a5 d& @; }8 Q+ w4 K# Sinput axr0,
7 {% Y& z! P7 v! }; G6 Q3 o6 e0 ]4 C% m* B' ~) w6 r
output mcasp_afsr,+ k0 L7 k- A, w, |- ?# _4 M
output mcasp_ahclkr,+ a( T% m2 y& }
output mcasp_aclkr,
* a  U" H0 d3 n( r' ?, w: H7 _output axr1,$ d8 V3 U  Q: e# x0 y
assign mcasp_afsr = mcasp_afsx;
: z  S' ^6 x- }$ F# fassign mcasp_aclkr = mcasp_aclkx;' z" i" M% [- S. @- _6 U
assign mcasp_ahclkr = mcasp_ahclkx;( Q: x+ B, F" R3 m5 H* V
assign axr1 = axr0;

9 m& {$ T9 h. C0 W1 q
2 B4 `3 [. M2 H! c/ x, H$ k. @
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

8 y6 g1 u) K9 h6 H
static void McASPI2SConfigure(void)
% S4 f2 t9 J8 O$ ~" k6 @  v3 r& s{
! R  w8 [, S+ x" K9 C# l- b$ HMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
& |1 N& g, L/ g- MMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
/ H  i; Z9 v( Z- [# m( h9 R' W9 |  N/ nMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);4 g, X8 X! {3 n/ ~7 n, e
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */* i+ D: o' J' ^) I, `/ h
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
/ a) Y$ F2 e9 M1 h& n9 v6 R$ YMCASP_RX_MODE_DMA);
* |. U+ \) Q8 z, u; O; x  r: |, iMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,) c$ L. J2 V; G+ g% r- X+ g
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */2 Z7 \5 F; J7 S  o6 F2 u" @: U
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
- a9 d) R+ i& x1 G% F9 nMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);! \4 X7 l$ P& d, h$ ]
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ; W5 ]3 j4 H' n
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */3 m0 r( Y8 g$ r2 q! {& O- g
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
. _; |& @. D: Z) T; g/ e6 f6 zMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); - k4 k3 F& A+ w. Z4 {1 }# X
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,: C, ?3 @; y' }* y$ M9 e- M
0x00, 0xFF);
/* configure the clock for transmitter */
' @0 x' a# b' d8 P$ x5 CMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
' @1 y0 W, W0 O. y" i+ TMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); " s- a& E3 X2 o
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
& z- i) O( R* s9 {6 e# n, F0x00, 0xFF);
1 j/ k+ A* l) R0 t' h% D2 M" R3 N
/* Enable synchronization of RX and TX sections */
* F/ _. I: i1 o* x1 SMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
+ U2 v4 v, w& JMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);) i. z5 V5 i  k5 E# p$ h
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*' E% A% H" q- F$ L
** Set the serializers, Currently only one serializer is set as
2 Y( l. E: }7 K** transmitter and one serializer as receiver.
' l; x7 J& C: _2 ~: a*/
3 S! o* O1 E# o" _/ pMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
. ?( n- V( d3 D7 _, {McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
8 y. N: c+ Y# l** Configure the McASP pins # \4 |# g' X$ O4 B8 E. I
** Input - Frame Sync, Clock and Serializer Rx
3 _2 U1 H) w3 j) y; t4 U' _6 h5 o** Output - Serializer Tx is connected to the input of the codec 5 P5 q. D  _4 s) Q  `+ _: d
*/
' z$ Y( h# g9 Y4 b* j3 _McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
5 Q+ Q- ]5 E. l' I1 J8 E% P0 R  c0 F( SMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
! l! \% X8 a' T2 C4 ?5 k6 ?( ^7 mMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
9 B9 [3 S+ P7 R# @2 r4 W% h  X% g| MCASP_PIN_ACLKX
2 L. b+ v' Y( \; P, {| MCASP_PIN_AHCLKX5 _9 n) f. i- G" b
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
# v5 U3 E4 U8 X' \9 P) ~McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
  G2 d3 Y8 C- F, f6 O7 Q| MCASP_TX_CLKFAIL
  a) f4 a5 S, C! T( X8 r; u  Z| MCASP_TX_SYNCERROR
! Q7 M: o0 I+ H' _| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR . |# ^0 ]2 R4 X6 M+ O! r# ^0 v5 W
| MCASP_RX_CLKFAIL
  p: D0 J, B" t' v' [6 b% @5 z1 t( l4 j" B| MCASP_RX_SYNCERROR
: f6 L. J& Q/ Q. P( ~% Z| MCASP_RX_OVERRUN);& b8 J+ E. K- s. T3 w* B+ M; s2 {, q
}
static void I2SDataTxRxActivate(void)
* F/ D: c/ X. m# C{  ^3 _, B/ X- t- M% x8 M& S4 k
/* Start the clocks */! B; _1 W1 }: [, x# t8 i+ G8 C& P* h
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
/ |" J/ x" j. ~3 ]( d+ XMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */, [+ ~9 E  k, c+ W# k. N
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,9 `1 U$ N; y# b! {  d$ T$ s
EDMA3_TRIG_MODE_EVENT);, p, p7 L% }+ Y* O# v
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 5 Z2 m6 G5 V) g  X
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
9 y0 Z" m# x. J! f; t  PMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
( w, q# [8 t) L5 E) VMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
* K( e8 o8 a9 b8 f$ M( Gwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
3 J2 e: r5 U7 L/ n1 p" H6 C5 c: I* JMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);8 P0 n% B, _) A+ a- c* H
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
, ~, L$ S" P/ t6 U}
% R5 n$ O; u9 g
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
7 G: W: Q0 d% L0 z





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