嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,% `* u9 g. b+ _/ N& O. h; j2 R7 I
input mcasp_ahclkx,6 F, f; E: P; b6 N4 F1 v- `! c
input mcasp_aclkx,
- B( n8 p% R2 z: O3 T# c& ninput axr0,
6 [; W( N2 M0 [! j
* j. u% U6 v' |: y. J  E- Soutput mcasp_afsr,
! s! q5 ?. s+ z$ w; Q& l( j1 ^- Joutput mcasp_ahclkr,
- h0 E- x* T5 ~4 g4 R; ~; p7 `output mcasp_aclkr,/ C) |1 B6 ^* W
output axr1,
! ]7 D# v9 K* ~" k4 h  Y
assign mcasp_afsr = mcasp_afsx;- k. M! A- S9 {: |9 C1 d3 i; A
assign mcasp_aclkr = mcasp_aclkx;5 G# s) u" `" S& D
assign mcasp_ahclkr = mcasp_ahclkx;1 Q0 w1 C" q, \6 v1 A; g
assign axr1 = axr0;
# t: n+ v/ Q! @; E1 a

4 K) N3 {' T% p& E
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

; Q! H5 A# }3 M. n  L
static void McASPI2SConfigure(void)6 g0 Q5 }+ L7 _
{
1 E3 x4 B' \& I% w0 X  PMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
4 i% H4 x+ A0 v% e, ?. ^( hMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */! v: P4 a& U" i. H
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);- _  z8 z( R+ b9 O' K
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
' L' e$ C8 e0 yMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
9 c1 ~! ~# _' y2 ^0 p  B1 NMCASP_RX_MODE_DMA);3 a5 J) a& k0 u6 q
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,) W/ G2 F3 O) k  b
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */" i: T7 l. Y% O. |- o! a& S: E
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
9 C4 f/ ]. [/ Q; q+ T. qMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);  c9 i2 y9 z9 ]+ N& N* Y+ p
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 1 V# a* ^4 ?! r7 r' p% ~
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */: @* K# i) ^6 R# `$ V
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);$ ?& P0 ]: S# T7 D
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
& ]' i1 D8 |" N; ^8 iMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
& r$ J+ J* e  Z7 K7 O/ ^0x00, 0xFF);
/* configure the clock for transmitter */
) p7 z/ Y; E0 g0 F/ i" QMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
0 g1 v1 L" r1 KMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ! R  Q  d, v/ i: H% r) Y
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
( e" @- ?( p  E* ~6 ~0x00, 0xFF);4 V9 M- c* q# Y& d& U2 Q" K. h

3 N. S: C: a4 x! e- H/* Enable synchronization of RX and TX sections */ 6 F, \6 R) \- E1 [
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
" B4 ~& _# y# P( OMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);* o1 t1 y+ s( A" `& I: o
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*' d  r8 d) l- D5 h' ^5 y
** Set the serializers, Currently only one serializer is set as
7 T) f* t0 F: g" s% x** transmitter and one serializer as receiver.
  Y* j. g1 w- O# H*/# Y) \" a0 A( K
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
! o8 B1 V8 V3 Z" S, [McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*2 w2 x, c1 m) u# @' A6 u
** Configure the McASP pins $ I, F3 J& o- Z0 B0 {+ R; ~
** Input - Frame Sync, Clock and Serializer Rx
! a) n% H4 L# e; _2 s. ?! f** Output - Serializer Tx is connected to the input of the codec   x- d# _/ c; k8 Q+ x5 U
*/
2 z  J4 H1 z' \McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);& R( I: s6 h+ |
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
3 `& x6 ]$ H: G, c9 y- zMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX& e) J# O( k2 v' g% Z2 F
| MCASP_PIN_ACLKX7 q9 z8 }7 \3 I: P' P& q" D
| MCASP_PIN_AHCLKX) s% ^: \9 n* [1 H% V5 V( @8 v
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */, j& ?) O9 E3 j( k8 s
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 0 L+ D! e/ ~6 E4 N
| MCASP_TX_CLKFAIL
) K  L* z3 W8 E4 S/ g| MCASP_TX_SYNCERROR
% @& e: L$ D6 ?# ?- S& v: t| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR ! b. s( D, J# c6 x
| MCASP_RX_CLKFAIL
) J& N- p1 V/ I; `/ F| MCASP_RX_SYNCERROR 6 }" x- d  @1 ~' ^, V( m
| MCASP_RX_OVERRUN);+ D1 X# E( X5 Y
}
static void I2SDataTxRxActivate(void), A" [, _3 v- y5 v' @& {
{  j0 A  F+ ^/ ?; w1 e8 E, i6 @
/* Start the clocks */
0 |+ P% a0 k7 R$ E# L0 T+ U5 ^8 yMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);3 z" O: @0 i2 V; v0 j  _/ J, Y2 f" M
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */: b) c% E( J: m- l
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,, E$ L) z1 |- g4 ?3 l! ^
EDMA3_TRIG_MODE_EVENT);
3 A, v6 d2 z4 i4 R; }) H& nEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
6 H; b/ I# S% G8 v5 ?4 s- _  pEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */) q1 t* ]; h& ^) T' [( x5 r- `
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);4 n  b6 M( V! q5 B# H
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
# a, q% w: ]- c5 Qwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
# v. T; u: o* R8 ?! z5 i* T- ]McASPRxEnable(SOC_MCASP_0_CTRL_REGS);# p+ K2 b# X1 c  z5 P; l& H& b
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
, v) G7 K# C$ h5 K& H}
; D) R4 J  L; G" _7 I/ B( G
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
$ A0 ~2 ~( R1 O( b" w% ~1 A





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