嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
( K# x$ u4 K/ a' E. ninput mcasp_ahclkx,
0 j( n2 x5 V" finput mcasp_aclkx,
& d0 t: T- F6 P6 B6 |1 \% ninput axr0,
! Q7 j. _! t4 K) s9 q5 L; L# Z  J) b6 p$ @6 O# `/ F+ J2 m! P% e
output mcasp_afsr,
/ J6 K, S! O* T) o1 s: G& Houtput mcasp_ahclkr,
, `3 P5 K. g$ v: Moutput mcasp_aclkr,, s9 M8 S8 q" v; E4 O7 H* a/ [
output axr1,% i8 H' i  q1 f* _
assign mcasp_afsr = mcasp_afsx;# L+ a' D  V1 H! J# P
assign mcasp_aclkr = mcasp_aclkx;  \4 q1 X0 g& \/ N2 z  Q: x
assign mcasp_ahclkr = mcasp_ahclkx;' d8 h  a: Y+ |  c8 L& ?% |2 E3 o
assign axr1 = axr0;
6 C, d( q/ |3 Z' K

& x3 ~/ R# M) S  `8 a/ z( D3 F# j
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

* m* i8 N8 v; t8 d
static void McASPI2SConfigure(void)( }  k0 }5 i( `7 K% o' H
{7 |. ~' A0 x; c6 a, F4 u6 @$ ?
McASPRxReset(SOC_MCASP_0_CTRL_REGS);) Z5 G8 h1 W+ g4 f7 H
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */. M6 C3 z8 W2 |0 [! s# C
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);- ?2 [1 y! o  w: |
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
. O! c& N4 O& J# ~McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,5 k) }4 a) S6 [
MCASP_RX_MODE_DMA);
! k  Z+ _. m; _0 w/ [8 c5 N- \McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
1 s: E) a2 c$ I- hMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
$ r4 Q' n5 i$ f3 g# c5 @McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, + a; n/ Y! G1 ?2 I& }1 F
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
( U% H$ [# W2 B, y4 _% vMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, $ R/ ?& N% ~4 f. a7 _( Q/ j" e# C9 A
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
0 ?! l# @' o7 v& ^9 w$ KMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);3 J( m9 t7 ~6 f' R  o0 H
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
; A+ ^# r; f7 L9 \8 [$ ^* AMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,2 d/ p. @+ d7 ~+ I1 B0 F
0x00, 0xFF);
/* configure the clock for transmitter */9 O% ?- @- s1 W
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);# ~! \0 T- ^6 b: N( U3 J
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 7 a5 @5 e7 R- e' ^% N
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
1 ^8 @, l; L0 ^- U, Q8 N  T0x00, 0xFF);
1 v2 q. \* L% r$ @& g& u$ O1 F; H8 A% m$ Z
/* Enable synchronization of RX and TX sections */ : w1 }) Z' L( P1 ~5 O3 f- ]
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */' M; r% \' N8 l% L1 d
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
: C, [7 n* D9 _+ n( p0 c6 H/ A* n1 `McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
, p, P) P) b9 J8 v  X% `: _# e** Set the serializers, Currently only one serializer is set as
* ^, B1 |$ f- ^** transmitter and one serializer as receiver.
) T" y1 I7 u( W*/
( i3 f1 M  }' v3 L% V4 ]McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
/ }/ H% j0 I$ c) @) Z& ~McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*5 [7 S1 e' S; i& \9 c$ {6 l, @
** Configure the McASP pins ( G4 a5 Q9 c& o9 a
** Input - Frame Sync, Clock and Serializer Rx
% j& a' |" j5 R: j** Output - Serializer Tx is connected to the input of the codec + |' d" g7 C/ P$ X/ c7 q
*/
0 s- _# |- S) WMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
6 q1 i9 C" v$ O0 g8 ?1 dMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));8 c$ f3 }" k$ _- Z- b% k. p% Y
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
) e0 g5 d3 [6 j, d. h- q. o& y3 f| MCASP_PIN_ACLKX
: z; i( E$ `9 Y| MCASP_PIN_AHCLKX. j6 h/ j" x4 I* [3 Z% D$ R/ V
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */* z) c6 k& p8 X" f9 l( D# K
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
+ r' Y1 E6 k- ^* C| MCASP_TX_CLKFAIL
- `2 c  h; E' H( W| MCASP_TX_SYNCERROR
* V4 f2 Y/ J% z5 }| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR , s( J  l7 z1 }
| MCASP_RX_CLKFAIL; L5 ?' q" n5 a7 b! O
| MCASP_RX_SYNCERROR : L) y" e; {) \- Q
| MCASP_RX_OVERRUN);
+ `7 p) V9 j1 ~5 v, s7 d$ ?. J}
static void I2SDataTxRxActivate(void)' j% x- [7 q+ L' {' V7 y0 W1 ?
{
& R2 q) r: g: S7 z$ g/* Start the clocks */4 v3 Z2 T* Z% m$ s" s
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
! X, x3 F! E' YMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */% f! q: s3 P5 f8 j1 ?+ [+ l
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
+ t' [1 f( R% d$ V$ }+ DEDMA3_TRIG_MODE_EVENT);) S& P3 z# W$ T, D3 q2 d( x6 c
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ) g# ^1 j6 W$ U) [6 X6 x( c
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
  Z0 i3 o) D( h7 Y# V3 Y# mMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);$ o+ B3 c  {& X4 g
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
1 T' L( D, T3 U* gwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */8 k% o) \9 d  I( r3 g
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);( d% I# K# ^! D2 L
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);  c- T8 }4 e: o; y/ t% ~1 C$ B- U
}

" b; U! `0 [  q# M$ S
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
) ]- y: R% Q6 X





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