嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,4 E; e0 c% T0 U2 T8 _
input mcasp_ahclkx,
9 t' C2 o2 x4 b: Cinput mcasp_aclkx,
$ @' [6 B. l2 D( jinput axr0,/ V& _2 S6 q0 e
% b8 {, ~1 R# N9 _& @# M6 v
output mcasp_afsr,& P& J' `4 W" R0 d0 U" P# ~* l
output mcasp_ahclkr,
& M5 o" N( d9 B1 d' m- n* eoutput mcasp_aclkr,
( s( U- ], {# [! Y: s4 Coutput axr1,
$ V: L# Q- {+ ?9 `5 a" |- c  i
assign mcasp_afsr = mcasp_afsx;
! [8 q( ~, D' Kassign mcasp_aclkr = mcasp_aclkx;, x+ ^: F4 V/ V& m: ^/ ~
assign mcasp_ahclkr = mcasp_ahclkx;6 ?7 V1 ]7 \: d
assign axr1 = axr0;

! o/ g  z4 g  r, I
% u; I5 y& k( H* N
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

3 j* {2 _! y$ Z; ]: u: ?' ^. L
static void McASPI2SConfigure(void)5 O% w" F" ^! f. \
{
" S) Z. h+ v6 `. b8 e# HMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
1 }/ q# ]( `; b9 wMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */6 G; W1 E2 `' j
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
8 O4 |5 H) K0 }3 qMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
" G: Y0 I  x& GMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
+ }5 N+ J. l" `: ]MCASP_RX_MODE_DMA);
; m4 D& Y9 x  u0 w3 J- jMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
" [. \) b" i) O3 \MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
( m5 B$ z0 ]' ^8 u7 qMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, , w- @9 @/ p4 J- J6 d
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
3 \& n; i+ G5 B6 o* @: KMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
; b$ ^5 R. |" g+ O6 l& z  M5 _+ g' lMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
( e, G6 U6 u* T' w# f. t# {1 pMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);8 q+ Z0 ^' V2 V3 r. n
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
* S7 ]! U% h% ^: ~) aMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,7 e2 P( K; h) Z4 m3 R
0x00, 0xFF);
/* configure the clock for transmitter */4 ?" k5 K7 e1 a# A5 F( q; m0 g
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
! j9 A8 X! O$ q% O) N! CMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 5 E* ~( C- D; S
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,' B5 i5 ?* B0 @/ l. b: e
0x00, 0xFF);* C# c* Y6 o4 N6 A8 w; z) h

/ j( Y% }+ a( |0 R, T3 p7 @. h/* Enable synchronization of RX and TX sections */
. a% v7 _; G* f5 i/ L4 ~9 eMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */  {' }' V. m1 g5 S8 i+ L1 a
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);- [8 L5 z0 n% |3 w: X; b- y6 L
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*1 |0 n4 m* H% ?; a/ |( x% O" C% q
** Set the serializers, Currently only one serializer is set as! k. u& K* q& H6 k
** transmitter and one serializer as receiver.
# t3 p# Q3 [) ^/ X4 g9 j. d! L" t/ D8 L*/# _3 \1 s% I& X
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);) c& A& s* D/ h( T/ c4 Q% w
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
3 G, B, L; ^6 a** Configure the McASP pins ; Q) ?/ s+ \1 g% i+ K2 g
** Input - Frame Sync, Clock and Serializer Rx
0 v5 H5 H$ k  z' ^# `, q8 R& n** Output - Serializer Tx is connected to the input of the codec
2 z9 F0 x6 }, m# X: r0 X*/
- z/ X" D# N7 m0 `5 _- j3 c& mMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
& q1 L, j* I; f4 S7 OMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));7 A& J) W4 g# Q
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
' ~& g& ?: U0 h- H2 ]% k1 f| MCASP_PIN_ACLKX3 |5 z  H, P" K( @! w. I" c
| MCASP_PIN_AHCLKX
+ L0 H1 w% s" ~* N| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
$ @/ l& C: g1 yMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 3 c: m; r. t1 k. `. U9 u
| MCASP_TX_CLKFAIL + f" ]4 C, ~+ `( c
| MCASP_TX_SYNCERROR
$ T, `* z3 T9 ^| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
5 e  E/ m" ^. Q) E| MCASP_RX_CLKFAIL' v+ W! n4 z/ R0 s4 V! n; L
| MCASP_RX_SYNCERROR
$ F4 D3 |: ?. a% q| MCASP_RX_OVERRUN);
) ]. Y% f( R, D5 ^- N+ M$ O9 T- L}
static void I2SDataTxRxActivate(void)
. h; V5 f0 e: O8 b3 v% h, J{
2 Y% Q1 t- }& }; D/* Start the clocks */
+ i) A, [- @; a4 J& P" g& [McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);3 ^5 }9 |& }/ J+ Z8 y9 z" t
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */5 q* I3 H/ \! r$ f7 b* J) Y
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,) M( B7 ^* y% Z) b7 |" W1 W( _
EDMA3_TRIG_MODE_EVENT);
6 _9 r& x% c  E0 n7 ?# p- B( c9 c0 dEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
4 q3 c, l" ^; ?/ w& ]EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
9 f; }0 ^: |. g! W5 {! MMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
  {$ K+ `1 J: X& U; QMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */0 z# P8 B; C9 G# i8 p$ u4 V
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
, j1 {* [8 T; H& e) r+ @4 w5 vMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
2 L6 t* ?' |8 ]5 rMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);5 h! a, X: A3 L: C$ c; U$ F
}

6 u: ^3 F1 q7 m/ U! k) ~
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
% z( c, J& b& W& Q$ ?6 d& v) Q





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