嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
3 b) b+ D. s3 d; {: G' Zinput mcasp_ahclkx,
- i P' `5 [! V# J8 ]% z Dinput mcasp_aclkx,
( {. |2 e! @/ i. Finput axr0,
( M. t9 n$ x! H8 M" A! k
7 n1 B6 k' k: Youtput mcasp_afsr,3 ]" [/ V6 k8 {$ ?& T' u
output mcasp_ahclkr,
# ]8 i6 a* \0 ~- O* |2 m' }$ Qoutput mcasp_aclkr,
5 S2 z( t3 w, x4 n" |output axr1,
7 ~2 r8 k4 c/ E! e) d1 ?( ]
assign mcasp_afsr = mcasp_afsx;
( |7 D/ ^* x2 }# Massign mcasp_aclkr = mcasp_aclkx;* x% t: K( f( g, W0 X1 p u5 g, `
assign mcasp_ahclkr = mcasp_ahclkx;' G) U9 h' Z9 E4 Z5 `& M1 g
assign axr1 = axr0;
/ [/ b3 a/ K x. _. n8 e* y
9 ]3 }- y) v! Q& F/ v在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
0 p. t4 f4 i/ R9 z' Q
static void McASPI2SConfigure(void) z) W/ e f8 z4 G0 K! J* X
{6 \6 E8 j+ P5 |0 I z1 O/ x
McASPRxReset(SOC_MCASP_0_CTRL_REGS);: g3 O1 D, ~4 _- J+ C
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
l- T4 f& c% f# ZMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
* i4 C4 `% n+ ?; p `, uMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
& H! ]5 K; u- M- {McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,; m0 o4 ~) j) b1 b) }5 a* \% t# H
MCASP_RX_MODE_DMA);% K/ f- l& n3 F" p' e
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
2 P; I# }/ h" E9 O5 n; aMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */. i" S4 ^1 V$ Y; G. w" M
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
2 Z/ m/ I$ g6 T4 t$ eMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
( [0 r' ]6 j. `McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
' F7 { ]" G$ Y& w* `+ NMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
( N2 {& S4 B9 aMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);6 Y9 _- i- u3 K! w% O, [) f' O
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
% I* |1 O& u5 j8 P! zMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,* i$ {0 ^8 d0 @1 y0 y7 Q: X
0x00, 0xFF);
/* configure the clock for transmitter */
0 l+ O& x! H% _9 m. q9 lMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
* p: L, z' K1 \; bMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); : q2 T. R. _$ f2 D/ O
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
6 f' Y! ]" ~/ v0 K6 B# K+ s. Z8 s0x00, 0xFF);
' w& b5 t& P1 J/ `6 s _, I' M9 ~9 J. ?. Y# O9 e2 H# L& C
/* Enable synchronization of RX and TX sections */
- ^4 M, Y5 e$ e5 D2 HMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
2 ^- S2 o$ K1 o1 D$ [McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);) { b# P8 Z* a( e' e. e1 ]0 H
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*8 k' P, `3 c* U
** Set the serializers, Currently only one serializer is set as2 X2 r2 C$ Q9 {. O' H, c; i
** transmitter and one serializer as receiver.
: k0 K' z6 h% q2 q*/; _0 v% N. a1 G9 C2 Y* B# z
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);2 e8 v! I0 z$ O' }+ V
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
! r0 q: O1 G: o** Configure the McASP pins
2 ?$ k2 }8 x1 ~% u! v** Input - Frame Sync, Clock and Serializer Rx$ J$ v( p" b6 }" q& v) i
** Output - Serializer Tx is connected to the input of the codec
" k: u+ H* Q1 u$ q+ G*/
2 J" h) h: j9 \. o5 }; WMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
; q' A% o) Y+ Y) |* I" k& J0 ]McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));$ I2 F5 C" m) J
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX% ]: F" B8 D7 t4 `) y
| MCASP_PIN_ACLKX% s2 t: J) H& X A! x. J
| MCASP_PIN_AHCLKX
0 A) c; ]" t& g$ o) I" { V+ u| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */* Y* W; c W4 b* M" x) \- G
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
% w4 g) ?$ o2 o/ @& Z! G! Y$ Q| MCASP_TX_CLKFAIL
; j' J# |8 l' [$ J, R$ X3 \| MCASP_TX_SYNCERROR+ r0 Q2 a+ E) s7 u7 q
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR & G* Q: m4 o8 m1 N
| MCASP_RX_CLKFAIL% u# B- j( k \1 m' }8 O
| MCASP_RX_SYNCERROR
; V4 \) e1 y) _, J. D, v1 x- ~| MCASP_RX_OVERRUN);7 e# @" p0 \ W8 E
}
static void I2SDataTxRxActivate(void)2 T" T6 I( }/ u: c, {; z( x8 j
{
: }& V2 j7 O: b* s/* Start the clocks */
3 T$ [2 W8 e+ O) m' {( PMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
7 o% e% S4 e5 b+ n. T8 X: W- yMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */* L8 \# x( m/ H& z
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
* ?" n4 @, q' V! h* vEDMA3_TRIG_MODE_EVENT);0 F1 j; j% I* [
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
j( t4 k1 S$ i4 PEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
- C0 [7 y6 V0 FMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);8 D8 Y5 s( y% I7 i
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */; f" Q6 X1 h& R+ P! c4 l
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
/ Y, r; ~. q4 w- _" G, z5 e( k8 X$ mMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);- Q4 w- |, H# }" u! z' V0 s
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);8 |2 h$ x' p* P4 I; E3 D
}
3 s0 A5 q ~# n7 ~: Q. g; b
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
9 o) ^1 ~9 k4 y! f: A3 j1 M8 I
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |