嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,1 E y8 D9 p( V/ w8 n; f! K; M
input mcasp_ahclkx,
3 ?6 ?6 A9 e& e- i, r9 G3 yinput mcasp_aclkx,
( b. F% c5 T! M$ \% r0 o" A0 ~input axr0,
' f! J% ]5 a o: o% T1 Z3 s8 l% h6 q/ B9 o
output mcasp_afsr,
, O0 ^# Z& M7 A9 ?! ]output mcasp_ahclkr,4 T+ R! z! k0 @) }& l* B
output mcasp_aclkr,* \2 v+ `' T! c4 P! D
output axr1,
, N9 L6 r) R( b: e: X# P; u* U
assign mcasp_afsr = mcasp_afsx;0 h2 c; d; \/ P, U. }
assign mcasp_aclkr = mcasp_aclkx;
8 L3 d9 q4 ~, C! Lassign mcasp_ahclkr = mcasp_ahclkx;
' @$ {- y7 k" r p- X9 s5 uassign axr1 = axr0;
/ Z4 ^% [0 u) U% ^* _
5 s) X. D/ \9 u, g/ n: W: O% r在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
0 C: Q! q: `1 J* B- V7 d5 r1 ^
static void McASPI2SConfigure(void): U9 [, ?4 f- S
{
) w ]3 g. h- G. l( z7 j, o {McASPRxReset(SOC_MCASP_0_CTRL_REGS);1 o* K" l, ~. }2 A
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */ X; Y& [! W( v! |% p# v
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
2 |& j6 W! }; e4 l ZMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
6 U0 p. k, M& s' CMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
( p6 r& X7 _. ]6 ]$ xMCASP_RX_MODE_DMA);
! ?# K3 X# I5 \" kMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
+ l) T7 u' }- I3 yMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */5 H- t( Z5 k7 i
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
6 r4 |, P: W$ Z5 `2 y7 T) L& UMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
4 @$ I( {, i+ O, ]2 n+ vMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, : _+ _" r4 c' W- I/ X4 E
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */5 R6 }* N3 F" P) U0 _7 f/ l8 k
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);+ u# {9 v' {3 Y# g6 u
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); & F7 Q9 P+ J5 d0 v
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,4 C' n' E' \5 e0 c3 k% |/ w
0x00, 0xFF);
/* configure the clock for transmitter */
( e9 r3 v) X! Y; ]* c! l: |7 tMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
/ q7 s: t, e$ L/ O: @0 \7 VMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 3 H% S# m. T- O( |9 C; o( j
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32, G6 z# W7 |, ]2 Y! q- f7 e* g7 v
0x00, 0xFF);4 d6 D# y$ t$ [4 I8 X
7 W3 X9 e* P4 u) a
/* Enable synchronization of RX and TX sections */
5 O" B6 l2 ]9 D: A1 _" FMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
. Y' c( u" \4 X, W+ UMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
, i! ?9 G1 }5 N; o- D3 TMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
1 c5 i, m8 V! Q7 R, d$ h0 A** Set the serializers, Currently only one serializer is set as
8 D. S" N- G5 J5 _: t7 D) ], M** transmitter and one serializer as receiver.. b$ I9 Y. ?6 Z
*/. e* b: ?7 C' H/ Y! I- N
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);" g. G7 e1 ^. } u& I7 G6 ]
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*! ?* `3 P5 |1 E- Z% J
** Configure the McASP pins
; E& w* }) `# M** Input - Frame Sync, Clock and Serializer Rx
7 ^) _; [7 n2 w/ ]+ W0 W** Output - Serializer Tx is connected to the input of the codec ( B. Z+ U# c& T4 D+ z9 X. Y9 C) l
*/
+ s9 k( I- Q7 J0 \' ]; \McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF); E% r& E$ s: ]) ?( n0 R) R. a
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
) |; Q$ ^0 \ N' b* ~" Z9 @/ ~McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX2 s# m- m% J) {
| MCASP_PIN_ACLKX
1 _4 k$ B9 h+ O* r/ c8 _4 Y| MCASP_PIN_AHCLKX
$ Q+ ]3 r9 Y) F# [| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */1 r: Y/ J _- M: c7 z: V
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
+ @$ G9 y( K1 t# n4 e& G| MCASP_TX_CLKFAIL
' w/ x$ H8 V. m" j( f/ p4 T$ m| MCASP_TX_SYNCERROR
. m7 V1 r$ X7 V0 F. ]1 W7 h: ^| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 2 Y% p* a! x$ z+ i* k
| MCASP_RX_CLKFAIL- K1 F! y7 k! f
| MCASP_RX_SYNCERROR " v% b8 `/ ]+ u; O: K
| MCASP_RX_OVERRUN);' A5 Y$ a1 }5 O# d* s$ f4 \
}
static void I2SDataTxRxActivate(void)+ p2 `, r% N4 h) z3 |
{
1 r8 z& t7 [& d; q8 o/* Start the clocks */6 K, m9 d( G* B6 t$ `" X, N
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);! K7 W$ Y9 d8 n6 J x
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */, f0 G. [6 r# v
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
) g7 z8 u/ D* x. H% pEDMA3_TRIG_MODE_EVENT);1 ]2 |4 W1 U# c3 W6 |
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
6 p H5 a5 W [/ u4 LEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
1 }" Z; |4 k6 [ a0 G4 ]# x" MMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
' l1 G5 t& n% s7 L. }$ F5 Q' G1 WMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
& O# F# [8 u# J$ Y6 b" wwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines *// Y1 E+ a+ [6 t% i1 H/ c- Y
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);1 I+ w% n+ H) ^4 i6 H
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
1 b5 g) D0 T+ e- Q8 ? A. m v}
$ L( y- t: \$ m2 M0 M
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
& h( }* s' \& J* {; a
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |