嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
# P* d; C+ X# `# V- J# z5 j  j8 y; einput mcasp_ahclkx,
9 [# b1 N2 S" d, Kinput mcasp_aclkx,
2 k: r: {3 y/ t( hinput axr0,
# H# y7 S. G5 b- g; _0 V. Z  r2 ]8 I  N3 v% `
output mcasp_afsr,+ c1 O  _8 y! }1 `) O( d
output mcasp_ahclkr,
) p' W6 X! O" w5 W6 m7 m2 I! ^output mcasp_aclkr,
' q7 s$ Q+ P& `output axr1,9 L! @7 J; w) @' d0 t" W
assign mcasp_afsr = mcasp_afsx;1 f) b' `9 d. o* ]8 [, _
assign mcasp_aclkr = mcasp_aclkx;
8 U; p: b  I$ i- _! Wassign mcasp_ahclkr = mcasp_ahclkx;
( r% S5 \" N5 p6 a4 ~assign axr1 = axr0;
9 A0 v, k/ C8 p* }  g7 Y
% s3 I$ V9 K6 t$ k5 e- a
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
5 m) S# q2 B" f4 h
static void McASPI2SConfigure(void)
% U5 E3 e- ~6 J, u4 G' |/ ]{: i9 F8 }/ s3 {# x
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
8 v* V# |+ Y7 U6 ]+ s  a5 uMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */9 A/ l) A0 m8 f) i: R% k5 q
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);/ S9 s+ C& c% e0 x" r2 H
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
& [& w, Q& E8 qMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,+ l: O2 W, h% g6 ^
MCASP_RX_MODE_DMA);" j' S3 |( Q4 d  k+ L$ A9 {
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,' ^3 A& Y" s' z& u
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */1 c7 x$ G' j, T6 m' |
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, $ Y2 B# n  a# `: i2 k8 I
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);3 |0 k( u6 s5 ~
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ' H) ]8 G( Q% r" R
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
! u  ~3 t# B  L4 UMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);0 g# L+ [- W" Q  J
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); * ^$ p/ ?3 D& I" L1 P: `1 b" u
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
! g" f* `. J: v5 a7 E$ M7 n6 x9 o7 ~0x00, 0xFF);
/* configure the clock for transmitter */
) a" L% J& o8 I! p, K& m7 DMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);1 j0 f7 V- |2 P
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ( w& ]8 y/ b* k9 L6 h! }5 D. U
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,$ e' v0 n, b' g4 |2 y
0x00, 0xFF);5 K4 o- T$ H8 q% f+ T# w6 V9 t
( n2 ]) R" V9 n
/* Enable synchronization of RX and TX sections */ 8 e8 y3 K# L- H' x! O" _6 V" u" [
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
2 g) H. B" y3 e4 X5 ]+ \1 z: k0 GMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);* ^, P  T8 z. a& n& o0 y
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
9 J( i$ ?1 h# {' a** Set the serializers, Currently only one serializer is set as
, ]) J" H; @& u) v6 j6 J** transmitter and one serializer as receiver.
' j* t& K+ y" x- T; E*/
' d5 Q" P4 r# W  i- yMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);% y# ?3 x$ x$ l9 H
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*6 @1 a% s4 F9 ~  o
** Configure the McASP pins
( Y) n) m& t5 ]; D** Input - Frame Sync, Clock and Serializer Rx
: m/ {) I0 a% b% u2 \( N** Output - Serializer Tx is connected to the input of the codec 4 \6 T8 k- A7 k( a
*/- B9 Y( W0 |) k/ U
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
' x% t" g; L3 t$ o/ tMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));, x% `6 J& M6 Z* a, g0 t% W
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
& _* {( A. P1 {! I| MCASP_PIN_ACLKX
% A3 f; X. J0 y% K| MCASP_PIN_AHCLKX8 o9 G: E+ N% M5 m1 q
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
1 c4 a" ^, h1 Y; t9 KMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
7 }9 W8 H8 `3 ?# f! d6 t" A| MCASP_TX_CLKFAIL
8 `6 ?" f3 G4 w' y3 T| MCASP_TX_SYNCERROR
7 U) v7 L3 b, I; U5 ^/ x3 G$ e| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
7 e# [; m" D5 ^4 o) M( u5 G  e# `" _| MCASP_RX_CLKFAIL/ u, }8 I% ~- p% `1 f
| MCASP_RX_SYNCERROR   ~0 p! x2 t, \$ b+ K
| MCASP_RX_OVERRUN);- m7 b: k) {: q2 T0 A
}
static void I2SDataTxRxActivate(void)
( q3 ^  B% \) L( j{, M; Y+ }/ U9 q8 F( `5 v- y; ~
/* Start the clocks */9 y# t$ h' C+ U# ]. H  [+ U
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);; B/ [6 n3 t' i, i
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
0 `1 N2 n) R$ }) I0 tEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
) p7 H+ D4 d8 [EDMA3_TRIG_MODE_EVENT);* r" P% _  M: V- C; A* i2 @
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
3 z4 r& ^1 p7 TEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */) M! ~! Q: f: H8 C1 p. V5 P) a  [
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
* H! ^* Q# g! S; CMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
. ~' N, H* J( o/ l" S" bwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
4 {' Q/ x6 f: @( h) U, sMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);6 L, E$ @% a- }+ e
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);+ W) {. d: G7 C# _- I, \
}
4 @- E5 y1 a& A( }0 f1 H: _2 u
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

0 C  l9 p; c! a5 s8 Z, J




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