嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
. e0 \; X. G3 R! g" ?1 Tinput mcasp_ahclkx,
# m; a. h* w K+ k A- hinput mcasp_aclkx,
( S! v- h' J3 P1 s! U4 Cinput axr0,
; l+ Z t7 l' |- c' U* S# ^# c( X D: D# [ U, `# K
output mcasp_afsr,$ _" e1 p' ]. k* }: U
output mcasp_ahclkr,) M% g. j9 Y8 u1 { C/ w% {( j
output mcasp_aclkr,
; H' @8 ~5 t4 ]6 `3 | w" D/ Coutput axr1,( f* W' l" K, ^! f7 M3 Y
assign mcasp_afsr = mcasp_afsx;/ W0 {: x! N( A7 D
assign mcasp_aclkr = mcasp_aclkx;2 A0 z6 W9 c" s! S2 ~, P1 k
assign mcasp_ahclkr = mcasp_ahclkx;
8 \% M' b! W* m# I$ l; P% Z8 D5 jassign axr1 = axr0;
: T& R1 l1 ]. O" R! i8 u6 K6 `
- _) \! g4 E% Z2 ?在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
* d2 E) \8 y) {5 L" h4 Gstatic void McASPI2SConfigure(void)
. j- |; T/ R4 t P3 s, L{. z2 W# E1 d1 i- p- E& K( S
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
& `' D- \1 N/ z; b% @McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */9 g; q2 N) X/ b9 s! `+ b
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);" w; N9 G3 r! @, T' e& _
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
( A- R9 m' R# p$ M* I, n) B9 R [McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
$ M* v. Y, W! u0 QMCASP_RX_MODE_DMA);3 k( }/ u8 `( p
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
7 O, @( b0 E$ r ~1 jMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
7 v" M8 W8 ^' L, RMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
" ^8 U7 g: _% P* pMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);$ W9 ]+ f0 j4 b7 x" a5 w
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
/ `9 S, y; k5 F& nMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
- F$ r; V& p: ?- S7 QMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
: `' L f& f0 DMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
- O, t- B, O \* rMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,9 c2 @: k9 g# Q- a. b
0x00, 0xFF);
/* configure the clock for transmitter */
' _. T8 N0 l. eMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);0 f6 b) Q, @- O8 {$ R$ c. v
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); _8 V' v X( [' @! S- N
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,! e! ^0 Z& E) c
0x00, 0xFF);' L, g- R4 t" j
5 u: v; R$ z+ u, t7 ^! _- j/* Enable synchronization of RX and TX sections */
! p" ?( T* p+ ]# }McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
+ `; ?8 @9 j# n) f2 rMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
) {3 d1 T+ S6 X0 Z7 j3 ZMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
# y4 `6 `. v0 X) h5 V* `- j c0 G$ _** Set the serializers, Currently only one serializer is set as
' J3 o' C6 v$ c** transmitter and one serializer as receiver.
0 o, v! \/ b5 \# U*/* H& b% F+ e8 \& \
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);4 J: A; R% S8 i( _ @$ L9 r; t
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
- H; Q5 Z0 y! a. q$ ^: [. E** Configure the McASP pins
5 I6 W& I z) n- _** Input - Frame Sync, Clock and Serializer Rx. p! C5 X) R: P
** Output - Serializer Tx is connected to the input of the codec
. ^$ S' L: d4 L7 ]) }- p6 @*/2 A T2 f. C) j( K+ `
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
9 L D/ w* [2 ?McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));3 A+ Y* Z7 \" o5 m ~! w; i
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
1 N& B5 y! Q- P j/ r3 M# ^| MCASP_PIN_ACLKX3 h# J0 w' U0 w/ ^: f$ R' I
| MCASP_PIN_AHCLKX
, X) i0 H- C, q) e| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */6 W' H$ W9 @" x. I: e6 t7 E
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
( A' M: ]: t; j% e: Y| MCASP_TX_CLKFAIL
% r6 R! P2 T( S| MCASP_TX_SYNCERROR9 {3 f8 i0 u+ M4 b- Y- A, H, m: Z
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
) D6 ^+ u$ j3 D @- `- @. I| MCASP_RX_CLKFAIL
0 f% f4 n- O: y- C3 r L1 L% p| MCASP_RX_SYNCERROR 8 x s- b& s5 {
| MCASP_RX_OVERRUN);1 Z7 p+ h, C# @3 l- y
}
static void I2SDataTxRxActivate(void)+ U6 a, O3 B! s- a& \" N6 z
{
) T7 t- _, I2 `6 D+ X/* Start the clocks */
2 D) t0 b4 D7 x2 D iMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);7 k0 u1 O0 s, j( R( Y T( Q% a
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
M2 F- r, a! N9 d6 S! p0 `EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,4 A2 X3 M/ [; X- W
EDMA3_TRIG_MODE_EVENT);
1 g# v( {. E: {8 U/ Z& V9 SEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
7 ^4 a6 U% H w2 MEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */$ M( j6 J) y& }9 `
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
2 n/ S( P0 s# p5 j( M- z7 kMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
( J& y5 ` E" ?$ W$ B5 xwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
" ~8 j5 l$ J( f. ?( N" o! P5 o, ]' C0 gMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
& z9 V1 ]9 m8 R; U& ?McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
1 T8 l0 V! t7 m' e# ]}
& O: l3 z: H; Z; V: Q( G- E* b
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
! _, ^- a% c$ @
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |