嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,- Y+ ]* @+ t9 c+ B# z2 B7 |# ~
input mcasp_ahclkx,% L& F1 p  F" N( n' W! C; f
input mcasp_aclkx,8 w/ I% L9 W" P+ v
input axr0,
  y" l" {# J. j3 w7 R0 H8 @
+ U0 y2 M# B4 }output mcasp_afsr,3 @- Q$ U% p6 D
output mcasp_ahclkr,
8 C4 [0 J5 w' D7 aoutput mcasp_aclkr,
% f; Y* q; e% X) c7 U1 w, woutput axr1,0 f/ s7 ^; Z- S* F% \( c8 U2 v
assign mcasp_afsr = mcasp_afsx;
# A- t. p, P; h7 H% i& _assign mcasp_aclkr = mcasp_aclkx;9 `; F2 X+ ^8 y# X1 \6 ~
assign mcasp_ahclkr = mcasp_ahclkx;( z  d1 T  R. H" G, L! k* [7 d# k* t
assign axr1 = axr0;
2 q+ q6 d7 A7 P; B

, _' h) g1 J: |$ X' X2 I; o& F. Z
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
6 E( a0 X  B! V. o' A& t
static void McASPI2SConfigure(void)- F1 v1 J! \8 H# \6 g
{
' ~& G& Y4 d& v: [2 w; o( GMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
# N% {4 R7 P4 ^/ l  N6 k9 Y! _; y6 YMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
7 f/ e+ m7 u- ^/ yMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);! T/ R/ L# T8 i& o9 g3 j5 b9 U
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
1 x4 l1 K5 K3 v, r! mMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,+ N% X$ q) o: _6 B
MCASP_RX_MODE_DMA);
+ _: ^6 O8 U( N. iMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
& X5 c& G/ W  B2 I, jMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
) W2 g( l7 V$ Q7 m" x( hMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
2 @) B) N5 ~: D/ A- aMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);* [& X5 r2 Z( E
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
* R3 K8 Y/ |6 A& t2 Y1 DMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */& p5 Q& N( h; V: K* n/ _. C& \$ \( f7 Q
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);/ y4 O7 S5 Z# C1 E
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
7 B0 u0 a0 |: D$ D* t+ ~/ LMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
7 c+ R/ \( g) h% |6 W0x00, 0xFF);
/* configure the clock for transmitter */
1 G( G7 ]7 D1 o3 V8 uMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
% n9 c8 ?; u) y8 ZMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
1 W7 S7 y+ r# w9 ~8 W0 d4 @4 VMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
) W) t+ W4 @; j3 O( F' x. I0x00, 0xFF);) h* B- s8 e' m6 A

, z7 Z; ]2 s7 U2 ~; D  }( D/* Enable synchronization of RX and TX sections */
$ i) A9 _% {5 B. HMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */$ M7 x5 u# ]. t8 O
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);# G* v# H$ f: X4 o
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
9 w3 L* h" W3 l+ c** Set the serializers, Currently only one serializer is set as" T, X( }) V& [' Y1 o
** transmitter and one serializer as receiver.! j0 |7 i& \, ^9 @' ]" \- d3 X
*/) B6 ?2 E" G4 g" E, k# ]( q
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
% L9 T0 x; [  `, G' [1 C* HMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*+ j& ]+ p- V$ I# I6 v9 l
** Configure the McASP pins
* J8 O5 @. x( W) O. w4 g** Input - Frame Sync, Clock and Serializer Rx: i% [: J1 E3 Q8 S; c$ }
** Output - Serializer Tx is connected to the input of the codec
( `! D% ?  r- }  Z8 _' [; c6 ^3 _' `*/
; ~  B( l8 D1 P( q$ C; OMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
: p0 @( n, n% y' e$ o; h$ e" w7 DMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));) h1 N1 i: D/ ?4 x6 ^: o4 [2 p& ^/ p
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX3 \) q; Q9 y7 w8 a5 A
| MCASP_PIN_ACLKX# ]' g6 w+ z7 _" B
| MCASP_PIN_AHCLKX% s6 C5 L3 L0 @) ]9 L; \. c
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */' e0 m& a5 ~4 \# q
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 6 O# b4 G$ o; L5 m; {. t$ r: @' g
| MCASP_TX_CLKFAIL 9 c$ r9 `6 L5 l, p9 s
| MCASP_TX_SYNCERROR' V8 R# f5 C3 M8 g' D" J
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
2 E" h# G# F; y5 b) V0 H1 M| MCASP_RX_CLKFAIL
: a. Z8 U2 m" w7 M' }3 C' h; h% k| MCASP_RX_SYNCERROR
) e! i! ~* y" R' w% A" d. S| MCASP_RX_OVERRUN);! D) G  X2 w8 q1 y: q- i& A
}
static void I2SDataTxRxActivate(void)3 {3 g% q2 }" d# e! D" q% w
{
- B5 Z+ n$ u2 W4 u/* Start the clocks */
/ a: I% F" b" G) u  i7 gMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
$ m( l% T6 ~" z" OMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */# |0 G% d! f: L1 T* k, ~* g
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,+ ]' ~( [& q" Q' G$ J
EDMA3_TRIG_MODE_EVENT);
: P& C- n) t8 P- v* v; UEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
6 N. w: ]% N# G8 CEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
# ]* j& M( E$ j, Y6 o/ H9 F  `( s+ vMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);( b7 J  w5 r9 W5 d" G  P: L1 y8 r
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */9 J  Y5 B4 O4 n& d$ h. I) [
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
1 `) w/ G8 i  G- ]7 \/ G+ C  LMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);7 w2 A* J. a' L5 I) E- D. U
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
. T1 r/ F& j- |% n! C- D/ D. m}

  ?  P( n; O( q. ^, Z! I0 C
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
" S% e" n! y" G' f' S& I





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