嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,9 S! B- D9 x$ c. O1 c
input mcasp_ahclkx,
) x6 P* ?! J+ qinput mcasp_aclkx,. A  L! q6 i/ l# a1 _1 o. k. H$ ]$ l
input axr0,
& y/ A- F- f' I
+ J. w$ L+ u' Q; K) x* loutput mcasp_afsr,
8 X0 ^- |$ H* H3 }& g6 noutput mcasp_ahclkr,9 w/ E% {$ A; Y; n+ o
output mcasp_aclkr,, l, a3 I; u: G6 M3 |
output axr1,. o0 N0 b) ?+ o( f; m8 _. l
assign mcasp_afsr = mcasp_afsx;) ?) N2 h, X% g1 F9 x
assign mcasp_aclkr = mcasp_aclkx;5 G2 ]/ M: {$ u( t5 m! X% ?
assign mcasp_ahclkr = mcasp_ahclkx;2 G0 {7 P) ^, X% A5 R
assign axr1 = axr0;
  ]3 K+ I8 g5 @
2 g% d! _2 ?9 D
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
- y( h8 N* \. H. U* t! g
static void McASPI2SConfigure(void)
! G. m- o7 Y% ^/ v4 K9 g  d{
1 u8 K* F" V  }* }7 E. R( }: V9 LMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
( Y' d4 T0 B" X  ]% c4 WMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */7 a4 l  y5 U6 x3 F+ t3 p8 A; M3 `2 M
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
5 o! d/ A; `* o6 ?  iMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */: A0 a" o4 G5 K
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE," A7 b* R2 ^; A4 ?. o
MCASP_RX_MODE_DMA);+ d  g: u7 O4 D% |. n# _) j
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,( x- C: e" [& Q# A& L8 ~9 F( [
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
- {1 |: I# F# |2 C7 P7 fMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
* W$ s8 s2 N4 I5 e3 e" X0 OMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);! J; g3 h+ h* D
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, " @. o7 h! [( h; ]9 q- v
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
- b+ o: u. M7 g7 \' ?, L3 k! JMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);6 n1 y& r3 d5 n/ F" z
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); & n% z* J8 V7 v5 S
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,0 w- Z4 ]0 A7 \7 X3 P' O- B* f8 Q
0x00, 0xFF);
/* configure the clock for transmitter */# d" s' p3 ^& ]/ t
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
$ x1 x# U# m) ~+ o! lMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
/ L: v& R* R$ |4 v# l3 h' J) n+ JMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,/ @( F* v- _2 Q: N- v- n" ?: E
0x00, 0xFF);
5 Y+ l% ]# E$ K7 _" R
8 A1 b4 d" U& r$ w  Z8 B/* Enable synchronization of RX and TX sections */
- K* T, o! G" {4 KMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */$ v4 G" G, q4 g: I2 j
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);3 B4 E5 O$ j4 Z' d
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
$ ~/ R) x4 Y+ }/ b1 ]* @** Set the serializers, Currently only one serializer is set as2 B6 A) K4 P* g  _% T9 F
** transmitter and one serializer as receiver.
  a" Y0 y9 ?" N  H) ^*/
+ R0 ~% o  H9 [/ O' p, Q' t+ CMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
7 s) Y! I* d! g7 u3 Q5 @: e: q% y  ^McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
; f( c1 p+ [$ Q8 I** Configure the McASP pins
' |9 B! o7 d8 Q  V3 l** Input - Frame Sync, Clock and Serializer Rx
6 H- o5 F& D* w, [# s# f& v** Output - Serializer Tx is connected to the input of the codec
* B  n7 B" G! @*/" l' G8 a" K6 A. Y+ d& k
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);4 d8 h1 y" G( q, |
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
) `& j7 ~2 |. ^8 ~' H$ ZMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
3 r# r3 C9 e% R| MCASP_PIN_ACLKX4 q9 {+ x( w3 @; q+ M1 S3 g' i0 Z
| MCASP_PIN_AHCLKX
) s/ V# J; U2 h* P. M, T7 W1 W| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
( c$ F, r2 J! ]* |$ ~7 ^McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ! r" w/ n! \- ~
| MCASP_TX_CLKFAIL 7 s+ n+ x! O) S% Q6 \
| MCASP_TX_SYNCERROR7 W: p  `- L3 b. k/ D
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR . Q+ E" Q, n' L( Z. M) b- j
| MCASP_RX_CLKFAIL; ?, F3 [- O* }) k. B, t
| MCASP_RX_SYNCERROR
% z" ^4 p! ~5 e% d6 Y| MCASP_RX_OVERRUN);# d4 V- F+ X, e9 ~0 G& N4 O1 }/ \& Y
}
static void I2SDataTxRxActivate(void)/ Z4 `$ ]: E. i! m- }
{5 d/ j! A1 h- |+ @4 t4 R  q% u
/* Start the clocks */7 @4 s6 }- Z, Z5 H
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);2 S2 \3 Y3 R* i1 _2 F- K
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
) `  j  z3 O2 B% VEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
/ a! Y5 S+ Q% f5 m2 L" T4 {* qEDMA3_TRIG_MODE_EVENT);
6 _8 @+ I% B, V3 [; j; v* X8 JEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
8 d$ {/ H0 F$ s: t) v, E% ]. BEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */6 J4 h, p2 K0 \# X" `" ~$ B
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);- B7 H( d' j+ ]2 k
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
5 T( t$ \  `0 ~$ E2 S& Rwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */. s4 ]5 {* Z& _$ w- r7 J+ ^
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);& [2 l+ z+ F& u
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);* W& h" p4 X: Z+ H
}
& ~, u0 T% [! z! E( W
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
5 \) W! Z6 N) g* s





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