嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,* W" `' V9 {+ R" Z( U
input mcasp_ahclkx,
. e3 {/ e" K1 `* iinput mcasp_aclkx,
9 b( O6 t8 k4 B$ }) Zinput axr0,- i( {, A# Y$ ^; C+ [( G
3 ^- M$ t; w' L; {* aoutput mcasp_afsr,/ Z! s/ K; ~9 u. K4 | R j
output mcasp_ahclkr,
8 q2 g0 r; t2 M/ E0 \output mcasp_aclkr,
# B4 A& [: Q8 M; \/ r0 d5 |output axr1,
9 W6 |$ w8 J1 Z) G- {
assign mcasp_afsr = mcasp_afsx;/ g9 ]$ E! ~; p
assign mcasp_aclkr = mcasp_aclkx;$ f# [( h- @' a
assign mcasp_ahclkr = mcasp_ahclkx;
7 H. U' B1 A5 I m" }" U7 bassign axr1 = axr0;
2 ?9 I8 o$ ?/ |9 {/ f- l
; ]9 m) X8 V! O6 p7 H) @& i* p在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
( J7 z2 h3 M/ G$ z0 y0 t8 T" N& M9 f
static void McASPI2SConfigure(void)
6 G$ Q6 [8 V; p/ A1 V5 S{3 M8 D1 i+ r1 I% i) D7 R- D |
McASPRxReset(SOC_MCASP_0_CTRL_REGS);2 \0 i6 [- b/ Z) v. c8 j
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */; V& d6 ]. Z5 S1 M
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
; n* W$ O7 E v# e/ l1 WMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */$ y; F$ I4 } G; {, F. n% O
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
# B; x# Q: b4 I8 n% Q1 EMCASP_RX_MODE_DMA);# k$ s+ M: h1 K/ Q
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,) n: b- i" k* u% `* y
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
, R/ L9 n1 T, N2 H% I, ?8 HMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
) l' H: V, p$ e" K5 M. M/ tMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);, \2 q0 Y2 \- {# H* v9 z3 l, @
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
/ q Y9 i) V' H% m5 Y) ZMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */+ b/ p" Q5 D, |( l5 f* c
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);7 ?9 C* \- ]4 c0 f
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
4 J3 Q5 [* {# _6 z9 MMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,8 H ]/ P; J' r5 T$ O2 Z
0x00, 0xFF);
/* configure the clock for transmitter */, o0 a' r" A7 L
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
3 O! U# d- ~+ Y& ^/ a( H; U+ qMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
! c' }3 I) } n& kMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,( h& r4 R) W- E9 ^
0x00, 0xFF);# l5 ^7 D$ {5 g4 M* a( q' Y, ~
9 w4 t0 Z7 ?# ~- H% d# e; z( }& _) s
/* Enable synchronization of RX and TX sections */
, |9 l: x. k/ S' }, S3 u4 cMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */; G5 }& C, k0 M0 ~. @& Z8 T' I( n' ~
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
; h9 \+ O9 q' z" b O) AMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*/ C' y6 G/ Y% E5 N- v
** Set the serializers, Currently only one serializer is set as4 r6 y* _7 u# ^+ g p4 c: ?
** transmitter and one serializer as receiver.
( u3 ]3 L3 z+ A0 W0 n*/9 {2 A1 i' N0 \! K- _5 |$ B+ D
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
& T% b g5 P u' F' \2 D" x' I2 ^McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*1 @# `. m9 P, G9 E
** Configure the McASP pins ) F5 S$ Z* n6 w C( _
** Input - Frame Sync, Clock and Serializer Rx
# ]% y5 G" Y4 A$ c8 K. e** Output - Serializer Tx is connected to the input of the codec 8 v. K9 ^- I& q# m8 Z
*/" P$ H( O9 D3 u3 J. J' j7 Y
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);7 q. a6 v5 g% i" m; H9 c
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));. L8 F; P- {# K' \1 N3 K; A
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
+ P: n* k2 ~/ d2 ^5 `( S" g0 q1 r| MCASP_PIN_ACLKX1 ]$ d- H9 `1 ?" ]
| MCASP_PIN_AHCLKX2 s) n: H# ^: y1 Z$ ^' c# e
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
" \1 R+ T! U' ~( M6 ZMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ; q/ S- n! c7 x" ?
| MCASP_TX_CLKFAIL
# \2 h; Y, Q8 H( C% x| MCASP_TX_SYNCERROR+ K5 e6 P: ]& h" s3 V- a3 d
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
; l8 [. g% Q1 f# q) l/ M| MCASP_RX_CLKFAIL
1 G& a+ u6 q7 L) h2 D. x4 J| MCASP_RX_SYNCERROR
4 z% J1 T, V) n y# A& }% ?# e| MCASP_RX_OVERRUN);; L) ]7 Q1 u9 S1 @9 b l6 j
}
static void I2SDataTxRxActivate(void)
6 Z. [, V1 v$ S$ Z5 f# x' b( _{
; K" R" p; @0 J' J2 m/* Start the clocks */. V4 m$ h& v2 ^( B6 e- J# N
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);8 l+ @" R( H$ E/ o$ Q% ^
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
* Q+ Y, z) W4 ?EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,7 m* f+ |( |0 ~3 J0 W
EDMA3_TRIG_MODE_EVENT);" [; q2 M Z% c
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 2 _4 o* Q; Y& b! g9 `7 Z3 O
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */- u9 z. \ T5 ?! v% \
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);4 M" i% I& s6 ~' a8 S5 o; M8 w
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
. E$ A2 }2 L6 d2 [' l. L; ?' ewhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */4 [% A! Y* P. g
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
* [- u4 d; ^( o+ f; d+ e/ _McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
: e+ H* I( W+ g+ H3 G! Y* C L, R}
( {, t1 h% h9 y
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
& c2 P1 i' A, T4 P' \4 z1 i* G
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |