嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
6 g) o0 `8 n+ U. ]8 w' h0 \+ ninput mcasp_ahclkx,  |. E8 i3 A: ?3 o* S0 r# @
input mcasp_aclkx,
! n9 M' O; ]6 L1 b  y$ W1 ?2 Jinput axr0,# L- I9 j# t( G' D7 Z  \0 }
% k( ^7 ?/ S9 B  S! U, I
output mcasp_afsr,% l* |& ?% B* N0 j# _- @" e4 M
output mcasp_ahclkr,
- }+ g; U8 A% z% |$ ^8 Joutput mcasp_aclkr,
6 h8 \/ i' y6 ~+ S" {8 u6 v5 eoutput axr1,
) H2 {' d) F# W* A
assign mcasp_afsr = mcasp_afsx;
, T9 \! q6 M  _9 ^assign mcasp_aclkr = mcasp_aclkx;
) [1 l( p- @+ J( @assign mcasp_ahclkr = mcasp_ahclkx;
4 p4 V2 o. M1 f, @1 passign axr1 = axr0;
' ]' c" X0 ?9 B' q- V

- N4 i9 x; ^  L3 R2 t4 T' {: L. f
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

; e, i; G' r" ]: g4 b0 c  K
static void McASPI2SConfigure(void)  I% C) u6 b. ^6 f7 A' A/ ^0 I
{4 O1 L- G+ _. N; F
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
! F4 ^3 O0 r5 {5 F9 j' WMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */1 ^2 O6 B& Z& @/ x0 R+ l! l" X7 r
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
) e8 x+ u2 V3 C- CMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
( Z/ h) l% ^4 ZMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
. o# U1 r; |% H. L* h# N  GMCASP_RX_MODE_DMA);0 ]; u; \+ C" F( y' d0 s; Q4 a
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,+ d; X9 g2 b  E8 p' X. g* k
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
, S5 l: B  @! g' s1 w8 n0 N( DMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
# q) H8 k2 w# |* d! iMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);/ |& I) U: U4 m4 u. Q! B. ~
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
) n' V* d& q* J  }MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */  ]6 G/ P, ~0 h; G
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);. K$ a9 U( [+ D" P: \
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
/ D( ^  r" ]8 N6 q3 J* P; [3 F/ LMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
5 L/ A4 Z0 p: B; i9 G0x00, 0xFF);
/* configure the clock for transmitter */& T: e0 p/ J1 H' U
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);: R, f1 j' e' I6 C2 j
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
( m! Y2 m9 d% D7 b% xMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,( T; _5 w# t7 G) H" B+ q: b
0x00, 0xFF);" T7 b+ S# a% ^3 T+ J) c$ m

. E1 v0 n6 T: j- t% A# V/* Enable synchronization of RX and TX sections */
( z- E( {+ v4 V  |. v2 DMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
5 j3 s' u2 K8 p' \( c  iMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);9 e$ X% n2 O2 \: C% J
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
* Y6 U+ ^% B# V( q9 P; R** Set the serializers, Currently only one serializer is set as
8 I5 M1 w0 }9 G2 J2 a** transmitter and one serializer as receiver.
' L9 P0 X5 |% e$ C/ a) |*/3 c: q1 E4 n. [9 O+ n) a
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);& S1 C9 I) E; l" h1 W& L4 D6 d* @
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
! {* U% G0 ~  o- }; l** Configure the McASP pins 8 m1 w5 F& Y' f  X( V
** Input - Frame Sync, Clock and Serializer Rx: M. z  X; x7 b' R3 w+ \* R( ?* n
** Output - Serializer Tx is connected to the input of the codec
# V/ {# K+ `( O% ~1 g4 e6 P2 J*/$ W  @  n/ N! V0 J
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);4 g' I7 m/ P, \" t0 J
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));& f7 R, n0 T( ]. ~- ]0 ?4 v' ?
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
0 H* O3 Q- ?& @% ^' w$ v7 p( M3 O| MCASP_PIN_ACLKX1 L1 k; `+ n) @! H
| MCASP_PIN_AHCLKX; b# R8 h) y. |  {
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */& E- ]4 B$ g$ r0 J
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
( U; O2 a# V4 n0 d! d# l+ a6 R| MCASP_TX_CLKFAIL # t1 N# k9 K0 Y: N
| MCASP_TX_SYNCERROR. ]8 {  v4 k) i4 U
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR ; L- h9 @( ]2 Z5 [0 u
| MCASP_RX_CLKFAIL7 }7 W8 k+ G; [+ j
| MCASP_RX_SYNCERROR
* g: ~/ b7 H$ v4 N| MCASP_RX_OVERRUN);$ A+ z! G, ^% R- W. }5 [
}
static void I2SDataTxRxActivate(void)
  K8 F! r' h7 t) ~8 Q! `7 H{8 L' D7 V- s% L. u  y1 [3 g
/* Start the clocks */7 M0 Q6 F; K# f7 ^4 p. V: B; q6 a
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);2 }' R$ n$ [: k. h5 ?. ?3 h
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
: k& @: f1 r9 z$ X% e" q9 xEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,8 n; {8 b& M; K! n) L3 c! g  B
EDMA3_TRIG_MODE_EVENT);
2 t& I0 E. v9 x" H6 P# d5 YEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, # H' k" h0 Z4 |2 y1 p7 d
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */& Y; |1 n9 e# d# G$ t( E, c
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);& n" @; e; {- T3 N6 u" `7 L
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
  B' `& N, o+ |  g7 ^' U. h' Xwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
5 H8 X) W/ r! O0 X; y9 iMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
3 |0 h( Z7 K# g7 z9 g- wMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
3 {: {- ?& Y$ f; m$ O}
( b! g3 R" U$ {& z9 ?) D
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
0 Q) ~' h& z& n2 r$ ~8 n





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