嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,2 [, ^$ ^; p% m3 c% P& j
input mcasp_ahclkx,
) F2 ^; a/ ?7 j$ f: G) {3 binput mcasp_aclkx,
/ V3 K; ^: Q' Cinput axr0,& }5 U9 ?: s! B% ?8 L

- l2 H, j! J/ W, J( ^! f7 t+ Routput mcasp_afsr,
2 k2 G( t7 `) U' d, Xoutput mcasp_ahclkr,
! f) v0 _, r9 P$ Routput mcasp_aclkr,% i( o% _1 s4 e! Q
output axr1,# W5 {2 S8 v5 D0 u. i" ?, S
assign mcasp_afsr = mcasp_afsx;
$ I  u' T! K% E* i% `1 Bassign mcasp_aclkr = mcasp_aclkx;
9 B& A! b) c1 p& j* J. hassign mcasp_ahclkr = mcasp_ahclkx;, J' @# T* D4 h0 x+ u9 I
assign axr1 = axr0;

2 }* d9 X) K8 N- r! L/ K
9 l) d( U4 i8 z; a( _7 `
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

/ q, u$ A3 _  P8 n4 `5 H6 V
static void McASPI2SConfigure(void)
( W4 V7 C7 F2 `{
! ~4 f- t5 P+ ^McASPRxReset(SOC_MCASP_0_CTRL_REGS);
3 Z$ s; [2 U: H( }) [8 UMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
) M) i3 V* Q& |9 i, M" oMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);8 e% n  T+ X8 n" ?# }6 ^/ r
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
# S0 U6 J) M" m; t3 n3 _% IMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
! g; p9 V1 j! G/ BMCASP_RX_MODE_DMA);
8 ~3 j( u& y5 z0 }McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,% v5 m* ?) I  F: f; ^1 D+ ^7 X
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */1 V. X0 ?1 T) Y2 S6 F7 [2 Y0 C, c
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 8 [. Q1 D* W6 n
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
( }# x0 \( ?* T( KMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
* m; b( g4 l; M& g; m8 QMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
5 k0 ^! W% p' z- ~* Q3 H- NMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);8 O- u* j/ Y; [+ \. ~
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 1 p" _+ O' h! B8 r# v. G
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
7 ?! d* T; s9 X2 I# V0x00, 0xFF);
/* configure the clock for transmitter */; Z. H; y( J: j7 h, V' ^* q
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
8 ?! \/ U! ~. s- _0 ~7 `McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
9 ~, o$ M3 d* B" g* r) T/ {- C: TMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,1 v* Q5 v8 _' z: G) }1 w
0x00, 0xFF);9 z2 P& G, v$ y- ]" g- @& A

( s7 M5 x. Q* _- q  d5 {5 x/* Enable synchronization of RX and TX sections */
& J0 [& M' B& S" _% ~. ?McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */- R, Q2 f: {9 T$ R
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);$ Z( i6 i; ]% |# Z" A* B, p
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
, V! \5 k; G4 o3 P) P: h** Set the serializers, Currently only one serializer is set as( U* h- r9 G- k4 ^$ b
** transmitter and one serializer as receiver.
; L$ F* w+ L4 k*/
9 j( f7 b9 S( [0 _1 y2 qMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);' ?6 ]9 ~& N. X' }0 n2 t
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
5 @1 w9 I3 i# W" l- `* X9 T** Configure the McASP pins : R/ d$ C" _7 M) V1 H" ]
** Input - Frame Sync, Clock and Serializer Rx
& o, F& }% V! d" X- M3 q3 `) B/ ?# Q** Output - Serializer Tx is connected to the input of the codec
8 v$ ]5 |6 ?' t* w9 A*/6 ~/ i) P; G8 a; I2 ^
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
0 H! _$ E: G6 LMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));- p' [+ m' q$ K+ u4 @" A, ]2 Q
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
/ L1 R( p- ?3 s9 d0 R1 W| MCASP_PIN_ACLKX
$ _9 ?9 [; r5 h4 k; \; [| MCASP_PIN_AHCLKX
. X' y: }9 {2 R" l, p| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
9 j% w8 `) L3 I' T8 b  UMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
" q  H' w! W& }& h| MCASP_TX_CLKFAIL 8 E1 c' f3 e% d" O; `
| MCASP_TX_SYNCERROR: v( y. r7 l' I6 J! ?6 m7 G
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
) Z; n; y8 ?5 U7 a+ V| MCASP_RX_CLKFAIL
* J) ]+ u; l7 e$ d& q, E/ o8 Z, D| MCASP_RX_SYNCERROR ) S0 e) F) i6 E3 A. h
| MCASP_RX_OVERRUN);$ O( A7 E9 `9 f; u  P! T8 |
}
static void I2SDataTxRxActivate(void). C8 f$ x, B8 }' N; B
{
9 u" ?+ @& L. N3 R! y/* Start the clocks */3 |( P3 }5 B1 O  G% j$ q$ e
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);+ Y3 g& ~# R0 N
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
0 V2 r2 z7 S3 `! e6 S' cEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,& o5 b" C# W2 I* f
EDMA3_TRIG_MODE_EVENT);
; O- n0 W6 M7 j; @EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, - `! ?; A0 ]  Q: Q9 v  T8 s
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
0 H% L2 M0 u! ^# l! Z3 XMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
; W- D# [+ V, g2 N3 {2 r% ^+ rMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
! x. i1 b1 B  y) O" s- [" nwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */9 L  m' [. a; B; }3 d1 r( r
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
+ u, h1 ~1 M; l( dMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
% S1 i% U  J  c! `8 V, q}

: V! i- t2 u+ i! Q! Z
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

3 Y/ o3 H2 u; ?5 v$ i2 [




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