嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
; s; d: @( W% U8 ?3 R8 xinput mcasp_ahclkx,
/ G+ E/ [0 V6 l# H& Kinput mcasp_aclkx,! \  Q9 L7 R; Y4 O
input axr0,- `8 s/ O9 p: M# O

: i& c! D0 x- w/ [- |8 Boutput mcasp_afsr,
, J1 V: h; j8 a  g" s: ?+ H! Eoutput mcasp_ahclkr,; P$ ^! X! H6 @6 Y6 m
output mcasp_aclkr,
  X8 f/ B, R6 [4 X" Ooutput axr1,. {3 S- e2 x: V% c+ L  i6 ^. W
assign mcasp_afsr = mcasp_afsx;
! O1 _* u! f8 ~' X; F/ J! F5 f/ Fassign mcasp_aclkr = mcasp_aclkx;
+ m# F) [' X8 `9 e$ sassign mcasp_ahclkr = mcasp_ahclkx;
+ ~6 Y( y) s6 U# X0 W8 K$ oassign axr1 = axr0;
6 J$ p! Y+ y3 s5 x3 |# B
2 _+ ^* y7 u5 {  F, I
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
' v' E7 V8 u! c. x6 Y4 e& _
static void McASPI2SConfigure(void)
+ R: X9 L% u6 g+ _# K{
: x, C4 g4 g; c! t& I& A2 cMcASPRxReset(SOC_MCASP_0_CTRL_REGS);2 C: w4 V4 `/ ?$ r2 c# |' l
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */3 H5 E  u! ?! P% x
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
5 H5 V- c) }% h& d: uMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */& q7 P0 b9 G8 }- E
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,$ ^( H  d/ M( Q2 H
MCASP_RX_MODE_DMA);6 Z( B: l* b. l3 A; t& i; a0 E
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,5 z# p$ E4 ~: O) D$ z
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
. |8 b9 H( S$ D) O3 X& DMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, , r$ n) O' s. h
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
' l  u/ ?# m2 D* o. JMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, & v4 X5 L' p& `$ K- g3 F6 Z
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
" \" K/ n, M. D' ?& L) [McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);3 R: Y/ j/ X0 u6 g
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); % I1 l5 Z% h6 ?1 d( Z
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,' R8 Z7 R+ S, b- o# |$ N
0x00, 0xFF);
/* configure the clock for transmitter */
! ~! Y4 k& U" J2 j' sMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);  o; o* x' g8 v# F
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 3 F1 q# K) _9 X. B: j( m% B
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
3 Q' V5 f3 C0 `+ K0x00, 0xFF);
3 b2 X2 U/ [+ `! Q7 F  v
3 h$ \4 a, o7 i" h& Z! @/* Enable synchronization of RX and TX sections */
% [  w# b: h3 g; l3 @McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
1 ?* J1 ~" i! E. E# o8 v- J. OMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);0 h: G6 Z3 U6 X2 D
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*# S2 U, ^- n3 n$ J1 \+ e
** Set the serializers, Currently only one serializer is set as
, N4 f" c+ I  D( c* `. n** transmitter and one serializer as receiver." B: R, n; |7 u, e  a
*// S6 o. n# R2 `& P
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
% l7 u0 F: }1 ?2 z! H( VMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
$ m4 R  T" A% @) @6 w** Configure the McASP pins ' {( Y, Y2 F6 W- N% j) \: x- {# @
** Input - Frame Sync, Clock and Serializer Rx
/ p4 A: ^( Y+ H! i3 g0 [" O** Output - Serializer Tx is connected to the input of the codec
" o/ T8 W( }2 B*/9 B/ N* p8 o4 r
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);2 E# O' z/ v% }& u3 p' [* a
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
& L: `' p" P2 _# Q- q$ @$ y5 kMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
6 o7 ?5 M7 G1 w| MCASP_PIN_ACLKX
+ u. o, ~3 E7 w5 l: x| MCASP_PIN_AHCLKX
% w7 U3 p! k$ T7 Q6 [& C* m| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */+ o$ A. X8 j+ o, n' i* p
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 9 |' c9 {) r0 P9 W& m
| MCASP_TX_CLKFAIL
4 n9 I; E4 i; l+ Q| MCASP_TX_SYNCERROR+ _4 A% G3 l4 \
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
+ @. M+ L3 k# f% e7 o) ^| MCASP_RX_CLKFAIL. e4 f: ]5 o$ r; m" _4 {
| MCASP_RX_SYNCERROR
) Y9 p" f6 B/ x$ Z. T! `# D+ J! O) e| MCASP_RX_OVERRUN);7 a2 h0 M7 ]" a9 a
}
static void I2SDataTxRxActivate(void): Z3 z7 [; Q9 R' v9 X& Q
{
! u1 x, S2 @$ h: A9 u/* Start the clocks */
, Q% ~1 Y1 i/ [/ B5 xMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);" ^, f* W& Q* W% P: V4 d
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
% B$ r  f. {) _; b% NEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,3 s0 u: Z1 F" P2 W' n
EDMA3_TRIG_MODE_EVENT);3 }" C* z/ s4 J' L
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
' N% Y/ O1 j. n0 n8 ]EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
! u' S* J9 z, ?4 L- yMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);3 c/ q& N3 _  T4 C
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */" q, {, e# W/ `  O) R
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */$ D* ?- o* l  k+ ^
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);) q  V# h1 g( V# Q" [5 ~' X
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
# }5 ^$ @2 C5 e/ }, b}

* v, q& {7 W1 W1 y
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
+ n  V% K* I8 I+ G$ O





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