嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,6 _6 j1 v  N8 a: w& v, R
input mcasp_ahclkx,) o4 B! c/ o4 Y% \: d8 R
input mcasp_aclkx,
- p$ O( m' ?" |, `  ginput axr0,
! [) H! N* b( p
1 T8 [7 X5 z: c. `output mcasp_afsr,( h# O  L0 T: v; c3 P
output mcasp_ahclkr,
- ]( O% @% x( n1 Z4 R( J9 Ioutput mcasp_aclkr,3 m) o# J! @  @
output axr1,6 D. E' w0 C* P% ]: r" w) d
assign mcasp_afsr = mcasp_afsx;
- m1 m8 u8 p% Q3 Tassign mcasp_aclkr = mcasp_aclkx;/ X- I9 v) r; U# q! L
assign mcasp_ahclkr = mcasp_ahclkx;
7 c# A- R- k* D6 p- t9 Yassign axr1 = axr0;

( E' b' L) Y+ G' X0 `) {
% z$ h' f' y8 T. I
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
" p3 O+ r: w& c3 ^8 Q# C8 H
static void McASPI2SConfigure(void)$ i  H6 V( C4 I# ~; ^6 k8 m
{9 e+ @$ }! X- ]- R. T2 k
McASPRxReset(SOC_MCASP_0_CTRL_REGS);6 I1 ?  q  x: {" O$ x( ^
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */+ u+ A1 u# I( w7 g
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
& k( Q, m! `+ b$ A' |1 wMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */2 M  D4 k+ E) z" a" L
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
# K" v* b( `8 S3 A( O7 U) QMCASP_RX_MODE_DMA);
+ \& @; U; z# h# `McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
2 O5 y0 |2 |1 {' p# X/ K4 C4 wMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */8 J1 c& c  M7 a  O
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
% ^0 u6 q0 q/ x6 s3 y. {5 tMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
7 W& v" f2 X+ b, WMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
, t( D, |; o3 j4 kMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */4 P  \/ c! I- ~, o$ s1 K! K
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
" \! k! m. \$ T, ^% F: WMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); % `9 l5 U. `2 P. ?4 }
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,2 T- Q+ J8 n3 a/ Z  |; W
0x00, 0xFF);
/* configure the clock for transmitter */) C2 F" t7 J$ P3 x$ @3 C; U
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);% z: }+ O5 _/ {1 n8 W" f- r. W
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
* W+ }1 z9 H- K  ^0 Z3 i# E3 F+ |McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
- N! F! E" F2 \8 d2 G/ F4 n0x00, 0xFF);
* P9 C, z" \( N+ _# d; s6 O7 H* I/ J9 S
/* Enable synchronization of RX and TX sections */
( n  a$ C3 b! F5 N! \9 JMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */6 _* z8 U! m8 K( g6 \
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);( p5 l% v+ g: y: u
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*3 P5 ~: \1 d* D% u0 \  q5 |! e) L
** Set the serializers, Currently only one serializer is set as" T, A. h; V  H
** transmitter and one serializer as receiver.
; f4 |  I4 [  r7 O6 O*/6 q) u& k6 `) G, T+ K
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);( |. @* X& }) t' z! _( ^5 [* _
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
9 o' U: J: |/ k** Configure the McASP pins
8 X, k( N7 B0 m8 o# S& B** Input - Frame Sync, Clock and Serializer Rx
, s6 d- I0 t9 E** Output - Serializer Tx is connected to the input of the codec
/ i. F& ?7 j# \) d, E*/
& r+ i+ Z6 c! D% `; WMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
' S$ H. |2 N. f& I, V, a4 ?0 iMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));! k7 ?: R' [8 G8 P& U8 t
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX2 x% E  Q7 }& C( f  f6 f
| MCASP_PIN_ACLKX7 c4 k* H, }1 U
| MCASP_PIN_AHCLKX
5 M) L, i) D, u# {5 \. A; d& h4 ~$ W' R| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */7 v/ o/ B# q7 P/ ]: d
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
: c9 z+ `- _6 ~1 G6 g| MCASP_TX_CLKFAIL
+ Y8 ?/ Z2 c- s# o| MCASP_TX_SYNCERROR
4 q! e! h% v; \! f; z  B) R4 l| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 6 i' J3 P, P! o# O' t1 e9 Y
| MCASP_RX_CLKFAIL+ y  r5 D; F" I' T
| MCASP_RX_SYNCERROR 0 F. s0 n) J2 ]; A
| MCASP_RX_OVERRUN);
, o% G6 Q* u) P  J$ k}
static void I2SDataTxRxActivate(void)3 E- `+ _: w$ }8 \5 D1 Z: {
{
% ]4 m( Z; j! N8 u3 W' }2 \/* Start the clocks */( w6 S: S0 t, w9 r5 E
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);  z( X% b# y: z; P9 N# z
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
. A$ J( V+ N; k3 iEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
% I& I: @3 t  i" C' A" P, B4 ?- UEDMA3_TRIG_MODE_EVENT);' }  _- {% K9 h( e8 @! H3 L
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
* B& j# u4 J3 V" r! bEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */- _7 B' l. M7 o0 Y
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);% g- D* x$ @4 F* b  s8 u6 q! [
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
! \" T  H: j( b; m5 e; \while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */; p4 P* K) v; x( H
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
( F0 H- g0 A. m) |McASPTxEnable(SOC_MCASP_0_CTRL_REGS);; v' C* m6 ~* B
}

: T8 L4 F* ?% ?9 r6 h* g
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
9 N" j, Y5 c$ L; Z, g- z8 X7 {





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