嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
/ p! r" K  W3 oinput mcasp_ahclkx,
* x  N) ~- o% Rinput mcasp_aclkx,
, H& C6 E0 F5 g# F5 x9 g+ kinput axr0,
6 H% M; \5 o$ n5 e3 [0 w* l4 |% l3 r) N
output mcasp_afsr,
- ]  g: f. D: J7 Toutput mcasp_ahclkr,
9 g' ^! l, p6 ]3 Voutput mcasp_aclkr,' Q$ r6 @5 J3 t) j
output axr1,
' z; E2 [. L+ E& F3 D* h7 y. e+ w2 {
assign mcasp_afsr = mcasp_afsx;
0 F4 a# H: e0 ?6 eassign mcasp_aclkr = mcasp_aclkx;& ?, R4 L+ v6 r+ r( X
assign mcasp_ahclkr = mcasp_ahclkx;
$ }: T* D( V; E  M; iassign axr1 = axr0;
4 a, s( h% q- k* U2 ?2 H; Z3 ^8 b
5 Y# o# T; t; f# a% m3 B# F" E! y
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

- @2 J$ e$ v9 k9 }
static void McASPI2SConfigure(void)
0 G  K* V1 q( p" r: i+ A{
3 u6 o5 o0 M2 d* a& r1 C1 n1 L/ |McASPRxReset(SOC_MCASP_0_CTRL_REGS);
8 s4 u$ I' i) H# V* ~McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */: s: H! Q/ p& K! D
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/ b' @  J& J; J; o+ A5 ]McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */- y. A9 a! \3 h( L6 N- G9 t
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
! y5 |( _; v" \+ z9 k9 fMCASP_RX_MODE_DMA);, H0 A& t! B" b. S+ \( S2 h
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
4 L0 p1 [2 n& p0 l( gMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */) s1 ]4 O- m% z: E
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
5 T# M: t8 h3 u8 U+ _MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
, J3 t/ J, q" yMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
9 V' [; y/ f( G8 SMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */0 l( @4 ^% b& Y+ }
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
4 ]1 i1 x8 x3 |McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); - O+ C) v! Y" J5 U0 ^
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,2 {% F' N, j) o. d* F6 E3 e
0x00, 0xFF);
/* configure the clock for transmitter */
/ v7 w, \" @  e" I; n% J" U- j4 _McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);1 f7 I) w2 I1 A( d: \
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); + R. q: H7 y# v9 D3 U- j- b8 E
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,5 M* W9 y2 {6 W( T4 ~4 G
0x00, 0xFF);6 w0 R, S6 J- h0 o6 C. n

# e% P2 s) y8 k( j; y) W, I/* Enable synchronization of RX and TX sections */ + b0 H8 w- s' I# i
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */  E' X! ~8 D) L
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
8 v- y% r* I; tMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/** d3 O9 ]5 H& W
** Set the serializers, Currently only one serializer is set as
3 A" V: H& y. A** transmitter and one serializer as receiver.
) P1 {' O- M2 ]$ P! V) A) v*/
9 e1 \  m. I% O. ^McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
: `: U" m- \' ]- D& O1 @; U; E6 iMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
# P0 u3 \! G  O- O* _  a** Configure the McASP pins
8 b1 R% ~6 H0 k- o** Input - Frame Sync, Clock and Serializer Rx- H$ K* ^" K5 A8 K2 [
** Output - Serializer Tx is connected to the input of the codec
( \6 ^8 b% @; n) F) k2 z/ e*/$ s7 u9 p' g5 b9 U* T
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
8 q1 k: b+ J4 ]' r" O# RMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));3 N, ]4 j& E; Y8 |
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX) R; }; R5 q& o2 k/ T* k; D: D
| MCASP_PIN_ACLKX
4 _# a' [0 F7 _. h1 |- [  Y* ~0 g| MCASP_PIN_AHCLKX
" U. X% V, i4 F$ q' u, ~- U| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
& H5 Z" }; p9 TMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ' |0 m& K* y2 H- o8 U: W/ V
| MCASP_TX_CLKFAIL   ?- _0 j* [- a2 k8 ?
| MCASP_TX_SYNCERROR7 A. b  [. y3 L6 f4 J
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR ( f1 f0 A3 [9 r5 y
| MCASP_RX_CLKFAIL/ Q$ ?0 u; p2 n- }+ C
| MCASP_RX_SYNCERROR
' `1 |+ @2 i- T/ r  D| MCASP_RX_OVERRUN);
2 R% a+ k, m. T}
static void I2SDataTxRxActivate(void)7 t3 G0 y, F4 Z9 `
{
' @1 y' H! Z. N+ s3 r' ]) J6 S: u/* Start the clocks */
2 \* w% ]0 q/ E) I" E4 m" o4 E9 ~McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
5 d# Q' ~+ D! M: b; E% Y4 P5 B7 BMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
! e( S+ m% E/ ?9 }" M: s" z9 t7 Y" QEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
' D* f+ z( g' p4 o9 fEDMA3_TRIG_MODE_EVENT);- s) ~5 P1 I! h" J1 W6 ?* r* t
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
. O- W$ x1 }3 f/ yEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
5 D3 J7 w. n2 m) S, HMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
. P- k( R0 }: g' z9 y" |; N: WMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */) E* I, S- O& O: a! }
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */5 J) z- g  n% @0 b3 F9 ]/ B3 H2 n
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);  u8 t! A6 B; P; Q/ k1 R; w
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);9 q8 K% {3 ?! P1 W
}

( @4 Y: c# X- m0 J# ?5 E
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

/ ^9 O0 m( E& h  B- N. c  X+ J- h




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