嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
: R6 V% s/ G5 f" ]1 A4 Ninput mcasp_ahclkx,/ i' Z! G$ j6 l6 B6 y6 |- A
input mcasp_aclkx,
8 e% w: I+ h0 ~7 A2 ~* ~6 Tinput axr0,
, d0 F* \0 x- O4 i, V, b3 b6 Q- r, s
output mcasp_afsr,1 p- `8 k9 q# G# U
output mcasp_ahclkr,3 G) c/ Q) L2 B- Q
output mcasp_aclkr,
8 c6 B2 M7 F5 |output axr1,, t9 w3 e2 Z) ^# Q
assign mcasp_afsr = mcasp_afsx;
+ `4 i5 {$ z% l! W4 L. o3 Passign mcasp_aclkr = mcasp_aclkx;
* D- ~7 @! y. g6 w% T6 Fassign mcasp_ahclkr = mcasp_ahclkx;
, D( ~) [% B- {/ D$ cassign axr1 = axr0;

: x- s8 S# g6 b) n# F. i: k1 b# A( v' q7 l7 o# _8 [% F
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
% Y- [. Z! z7 m
static void McASPI2SConfigure(void)  N, m) J. t. M1 b1 _  H
{# @+ y" T6 H1 n' ]+ x( C
McASPRxReset(SOC_MCASP_0_CTRL_REGS);& o' w/ R8 E- u  m: M
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
4 D6 o. f4 [- o& _8 Q# x: C+ XMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
" K6 B  [( ~  W: k2 A- m( VMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
4 K5 u9 W3 n0 c' c) @" j/ zMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
6 a/ N5 N9 @* _MCASP_RX_MODE_DMA);/ a" I7 V( t, n( t2 _5 u2 t/ G
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
7 E5 i  {" L* W! A6 Y; }1 l$ T( p6 LMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
* h! _- s) v0 T8 z( w& J/ yMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, . \$ e8 g, F- }1 w2 ]/ {  R8 k2 Y
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);! J5 b# p# O6 C) Y- I0 c
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
1 d! P) F9 Z1 ~$ m) sMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
1 j* ~# z4 E/ ]3 tMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);' a* x/ x5 Q( {$ J2 W* W& P
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
& t! |- X$ G' D5 G5 s9 FMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,( @/ L" j9 m' F4 F' _/ ~
0x00, 0xFF);
/* configure the clock for transmitter */
2 o& Q. R$ Z' z3 z+ lMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
' E$ A9 c0 |. g* ?/ D, Y- A: X: pMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
5 S! W, t- T% T# K; CMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,) y* R) k( K" [3 U# v  A
0x00, 0xFF);2 Y8 f' l; c# I9 a% n7 O
) c* y" v( B: {1 ?5 t6 |
/* Enable synchronization of RX and TX sections */ & X! Q% l, R! A3 C4 A- X1 i
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */  M( k' h3 S: R6 `
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);  ^4 w( E* _% v
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
4 H+ X4 C' D. C** Set the serializers, Currently only one serializer is set as
& W1 |7 w- B+ E4 [** transmitter and one serializer as receiver.0 c1 _' p) Q2 u: b! B6 R% \
*/1 T* W+ U  v0 l1 a
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);6 e+ B" }) F! w
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
: }4 T7 X5 ~% C$ j  s- G** Configure the McASP pins 2 x$ W; ^5 h: o, D3 t% J' j, V
** Input - Frame Sync, Clock and Serializer Rx
' B# m: @' w; O- x4 ~7 F% M** Output - Serializer Tx is connected to the input of the codec
8 w0 L/ J3 i) A*/
0 E+ Q/ M/ g6 QMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
9 u0 x( i3 \; ~6 ~& I, eMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
$ D0 z8 ^$ q. u1 |8 s/ Q& ZMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
9 Z$ @8 t9 s3 U9 u# F& _$ K3 x| MCASP_PIN_ACLKX1 h$ \& @3 g4 Y) l$ `4 h
| MCASP_PIN_AHCLKX
& N. c+ Y& J4 k6 d) w+ k3 g| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */4 _' P5 l, M1 ~; n
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ! M3 O% y% p+ Y2 L8 Q: G' {3 f7 a
| MCASP_TX_CLKFAIL
1 F5 J1 y; ^0 _' }| MCASP_TX_SYNCERROR
1 Z4 S+ O7 b) p| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR / _/ J! t: h8 B/ z3 N' l
| MCASP_RX_CLKFAIL
- M" x- Q7 Q  z" o" }' n# [| MCASP_RX_SYNCERROR
3 z9 L3 S/ \. x1 {" N( Z* D| MCASP_RX_OVERRUN);8 G6 L; H* @6 B
}
static void I2SDataTxRxActivate(void)
* V% W% B" L- w3 `% ~7 J) @3 G{
, g" Q  R. |$ B1 {) K9 p, {/* Start the clocks *// @* X" F' e7 d3 A
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);! W" h3 R5 S  T) U- P  N6 w
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */) o) v- r, g. O3 z
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,! i; L2 G! K# t8 ~: i
EDMA3_TRIG_MODE_EVENT);1 a2 u+ Z% {  d! b/ R" }: H
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, " C" S4 ~# u- i" P0 M# Y4 S; I. x
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */& J+ ?4 u; Y6 {2 v! r9 M
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
- K5 b$ ^" o/ W* tMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */- H5 \) k+ v  H* W) q
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */, }+ u# v$ t8 |) Q% i( K0 J2 o
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
: D* E. O+ u  B- fMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);" _+ a" c; C1 m6 v* u4 ?0 y5 l
}

" e: _0 j& q5 P2 F: \' {) E1 h
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
. {' s+ ~; L2 ^5 m. c+ k. _& e





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