嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,& x  ]+ D1 S0 h$ C( l) _
input mcasp_ahclkx,( k) m' k9 v( G; q  h* ]1 v
input mcasp_aclkx,3 b/ @8 I' y. N% N; Y4 x0 K
input axr0,
. {% G: F1 [- R1 l! B* i
, q( x  ?! L5 b! ]  T" w' y( woutput mcasp_afsr,
1 z3 }; N. ?: l7 N& I5 k  ?output mcasp_ahclkr,
9 L% T$ Q9 n0 }' Z$ n9 }output mcasp_aclkr,
5 |; q- z' Z3 g0 ?0 x) r1 z6 Ooutput axr1," n/ x& l* N  }! @% f* j5 `$ N
assign mcasp_afsr = mcasp_afsx;6 U5 E0 D7 K' ?8 v4 Z
assign mcasp_aclkr = mcasp_aclkx;$ P) `5 j/ r, T' C* ~8 G! B
assign mcasp_ahclkr = mcasp_ahclkx;
" h* _" X4 E$ |8 Vassign axr1 = axr0;

6 k+ k% U8 L( B
9 |, v# Q  U& X8 e" X3 ]
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

# y3 _# T' [  U7 e( D8 s  o. e
static void McASPI2SConfigure(void)
0 }' G& N" C8 I- I{
9 J  R  L1 s( i) U- W8 _9 pMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
2 w4 o) g9 |7 P" t% bMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */$ |1 [3 M* [& ]6 b: i/ _7 E, Q
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);" c. J$ ?% U4 l
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */. b6 G1 c* `7 G( Z8 H
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
- d( {; t$ a: X% {MCASP_RX_MODE_DMA);
$ z" b" p9 W% O5 y5 cMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,! }+ r5 l4 m# s) s9 u
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
, W" L* Y+ A" A: B' U/ rMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
' `8 [( @  p: K4 R8 TMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);6 ?/ C# T/ F7 D. P1 w
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
3 q$ H. ?& h7 B1 @& E- YMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */: |5 f4 ?  ^1 i* d4 G6 Z
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
0 r# b6 Z! ~/ K, H$ ]" lMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);   j2 [$ G* Z& q3 U9 _
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
2 D) g9 y# M6 A5 f. G1 o4 d* a0x00, 0xFF);
/* configure the clock for transmitter */+ P* c/ s" @3 p& t3 G( D* T
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
" ]) r+ N7 h6 a  ]( XMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); * L$ R- L9 a  Y# K
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,% g8 Q/ p  T2 i( V* }9 K
0x00, 0xFF);9 V) R& {' d" S- N
: z6 Q/ ]% U# @+ K/ {' g  T
/* Enable synchronization of RX and TX sections */ 5 n6 q% w  f5 O% Q6 X8 t! T
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
! a. Z% }* R# Z1 pMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
; o0 V5 u1 L# R; mMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
! H: n  Y) K+ V0 T$ x** Set the serializers, Currently only one serializer is set as
4 K: u) ?4 w' q# T6 v+ l# _** transmitter and one serializer as receiver.
2 L; E# |4 Q) ~. d; d& @*/
: h+ z$ m& w/ p% ?" `2 x2 Z" cMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
/ S) _* W2 d$ k7 T. Y, p8 j9 s( @" sMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
- v7 o  L. R0 w6 Y: Y** Configure the McASP pins & Q4 @% i% X* M3 w: b9 z. P
** Input - Frame Sync, Clock and Serializer Rx) i" r( h- t1 R# j: E4 j
** Output - Serializer Tx is connected to the input of the codec & D$ Y- E: h6 k9 K8 N
*/
$ P4 G" w# A% M0 F/ h' E" cMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
8 I4 Z- ?3 s  ?McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));8 s$ z+ m" W+ t
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
8 d% W. c9 ]: D! Q4 Z| MCASP_PIN_ACLKX
6 I6 Q& j- ^* t- z2 t| MCASP_PIN_AHCLKX
5 V/ e% w$ Q' L# t( v| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
6 m& |3 z3 A. `! QMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
. c% }! ^& p# y7 _, b| MCASP_TX_CLKFAIL * `0 u, ?- Q1 x& r& \7 d% B
| MCASP_TX_SYNCERROR
6 z  g. A! `& `| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 1 ]; y5 a0 I/ ^9 m0 B
| MCASP_RX_CLKFAIL' Z4 r* d; {1 y9 T
| MCASP_RX_SYNCERROR . [  j; ?6 y2 l, G+ |9 n
| MCASP_RX_OVERRUN);9 I( d9 j# Z# ]+ K0 ?8 ^& Q
}
static void I2SDataTxRxActivate(void)
. y+ m5 e. C1 Z& j# J+ N" x{
5 W+ G# {/ D- K& l/ E/* Start the clocks */8 \6 g0 y1 F  k& `$ R* d# ?- [; ]
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
0 z# V/ X- Q% R# H2 P, CMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
& C% `1 W' H8 ~2 |6 q) JEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,, @" R: D% ?7 l: C) c& ?
EDMA3_TRIG_MODE_EVENT);* g' J- S# D7 z  u3 v1 v1 X) W
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
! G3 H" P/ K# Y) d! L+ _6 G: mEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
. ?/ W8 Z) U. e* JMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);4 y: W: {+ J! z$ Z" _# X! Z
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
  m* ^# \. v( ]/ x8 l/ h; \while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */0 d: N- [. y5 h+ F/ ?* ~
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
4 `% n' `% j1 k8 H7 l+ aMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);* h9 m% h/ U, d* W! o+ V
}

5 h; c# V3 J; B4 w
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
0 x7 }0 Z$ E& A/ V





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