嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,1 S# K- m& T# g- Z$ I' Z
input mcasp_ahclkx,5 ?& V. L: @5 _; y) Z
input mcasp_aclkx,
8 Y: x' q" D3 S/ W9 f+ ginput axr0,
- Q4 m. g3 A" `* |+ ^' {* {6 h. y1 Q+ S! ?( f
output mcasp_afsr,
0 L1 l9 u1 Z: q L+ poutput mcasp_ahclkr,
0 [6 i( W. C. f/ h. joutput mcasp_aclkr,# o& b) W/ A& L2 j
output axr1,
& O! {+ f$ b6 U: S, w
assign mcasp_afsr = mcasp_afsx;8 H7 P$ G/ k7 T+ _. x
assign mcasp_aclkr = mcasp_aclkx;. U6 y$ p6 t+ B7 H" `2 f, i
assign mcasp_ahclkr = mcasp_ahclkx;5 r0 G& r( S+ m
assign axr1 = axr0;
! z6 @( D, v: u1 T3 m
6 x( D9 B! H0 W8 `在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
& t& ^6 u* Z7 W" g0 a6 w! \
static void McASPI2SConfigure(void)
8 V' N2 `3 Y1 C! w7 n* I* }{% i# H% o# t) j/ M) a9 J
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
$ u8 h. c- [" q" l7 g lMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */$ A! V! p0 m" `, o
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
$ S+ b* o# B' p6 f# [# H1 j: [- NMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */9 J, b! T9 m3 R( d6 G3 P
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,# j5 _9 S2 Q3 ?: X# [* B
MCASP_RX_MODE_DMA); B1 H) f9 ^ u
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,3 t' [* |# W4 ~2 w) Z
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */' ]5 t, O4 {7 G9 t6 S: g
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
. u& d. a: V2 A3 EMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);* ?4 J6 m% u7 s
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
* Z8 p1 k! L7 ]5 h6 J& T: eMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
) C( b4 C* }( i" g* q J( r# gMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
4 o6 a! r* S7 V3 u3 q4 H* ]! V/ LMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 1 c$ w) F; ? a1 X0 S, T
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32," G% b/ A7 ^6 }8 k6 H! f
0x00, 0xFF);
/* configure the clock for transmitter */
0 f c3 n" M' ^McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
4 M9 k# ?7 q, `- V5 D6 NMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 8 i1 t6 I" S' `2 A' \1 _
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
3 s( P; E) \" P4 c/ n9 D0x00, 0xFF);" e2 E, D3 U& f
& P% @0 `" l: r
/* Enable synchronization of RX and TX sections */ + ~& {* R0 W4 l; p4 v4 @
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */8 H Q9 l+ n& G
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS); ?1 g$ o+ L, y& D. r
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*' K0 }" f& D5 _$ Y2 g
** Set the serializers, Currently only one serializer is set as
/ M+ F3 z( O: y) p O3 r** transmitter and one serializer as receiver.
B6 I3 A: E; s4 Y6 R* c*/
' f6 F" w; W$ h& x8 F7 {. j( jMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX); T& c! d( w( s
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
6 F; y. ?3 U c+ `' x** Configure the McASP pins
# h8 E1 ~- w6 G** Input - Frame Sync, Clock and Serializer Rx
0 G: j, I# L: i1 [- W** Output - Serializer Tx is connected to the input of the codec
# u% b* a4 Z# \. Q1 p*/
' K. a4 @# L p2 V% ]3 C4 nMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
$ ^. ^6 A V h, a1 U; R2 ~McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));3 H) |& y- N9 l7 [! z
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
2 a* ~+ e+ p! f; N9 N" M/ \5 V, W| MCASP_PIN_ACLKX
4 q$ Q$ N9 v$ Y" V| MCASP_PIN_AHCLKX% a- p+ Z/ h4 W- x* U
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
$ y: Z0 U# s5 W: aMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
$ n0 n8 Y( ~6 @ y- N2 l| MCASP_TX_CLKFAIL
' E8 y( s9 L: D; P1 K0 i| MCASP_TX_SYNCERROR
+ F" D% s: J f2 r. w) Y| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
- o, ?5 K' ~5 V% H; Q" || MCASP_RX_CLKFAIL" Y: Q5 G- c- x1 e0 H) X* {4 o
| MCASP_RX_SYNCERROR ; a& l l" V- d0 D
| MCASP_RX_OVERRUN);5 @1 x4 K8 h% U' @/ a$ C5 i- A
}
static void I2SDataTxRxActivate(void), t* {* L) n4 {
{2 B9 e, V P$ N
/* Start the clocks */
) S8 ?2 M. b T' yMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
8 c2 y* E% { S. |+ K9 SMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
6 }( Q2 Y1 X Q4 y4 p0 hEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,1 J; q( `2 l- E& E/ O: s' G
EDMA3_TRIG_MODE_EVENT);2 c5 {4 u @+ T/ A
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, $ [" w; W8 s1 D3 i$ A8 R" _( ?( m' c
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */; [2 G# D% a3 q& a7 i
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);$ b, ^. O0 M8 W$ K
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */+ x, M0 l7 b2 d' A+ H
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */( f/ T# x3 W$ o! W% ]( C" Q7 i
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
1 Z6 X8 T n- l {( dMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);, t/ D0 N: j. ]2 [% L6 _9 u
}
: M; O# d8 m4 s请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
$ ?8 J7 ]1 T* U4 I
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |