嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,$ m# V" u, Y  W% f  }& N! ^
input mcasp_ahclkx,
% F6 t- `( D3 {$ G% H, \0 Oinput mcasp_aclkx,2 V+ N1 d3 ], ]
input axr0,
) s2 ?, V: C; V  N) i3 o/ O- @/ `/ `
output mcasp_afsr,( z4 e* I0 {, x, f$ n6 ?6 p: S) U
output mcasp_ahclkr,) w7 l$ V- s$ }  j5 x
output mcasp_aclkr,9 p  ^5 \9 Z; K" d
output axr1,; ^. u9 i4 t+ A) v0 h. |) g& D/ k# c
assign mcasp_afsr = mcasp_afsx;
  O) z, x& O  h' `; D( c, R' bassign mcasp_aclkr = mcasp_aclkx;% `1 x" f4 a% v$ p
assign mcasp_ahclkr = mcasp_ahclkx;0 S& L7 r" h0 \; m; H
assign axr1 = axr0;

2 x4 E2 d; t5 X* W2 M' S- ]9 w. U. n' m; ?9 J- {
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

# Z; A* S% B% {3 q" a
static void McASPI2SConfigure(void)" R( }$ n  t2 X7 z7 y* x* e# B6 U' R6 g
{% Q: i. W1 v: `5 [, ?% H
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
! I4 q* A1 ^; u! i5 O0 WMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */$ J- \% @8 m7 z0 i
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
( ]1 K9 z* E% Z, W( A: d! JMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */& ~, n" p1 C- t; g4 D1 B' Q: J
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE," z! R& _1 Z, n
MCASP_RX_MODE_DMA);  K/ B" ^4 x% ~  Q% D. V0 O2 A
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
0 a, t! ~$ n2 l9 x2 U" O# j/ LMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */* v! R6 l5 N4 ?- ?+ \6 m
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
6 d. |; ~8 m: T% l" i# pMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);  L/ R. T8 {9 v) B, s
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
% l/ C6 K1 s8 }% ]- UMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
6 @1 l! `5 Z- O4 wMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);: c; y& X1 B9 _! G! ]
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
9 C9 C( [! b/ R/ B7 I8 @7 JMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,% _8 _4 C, p9 B4 t* \
0x00, 0xFF);
/* configure the clock for transmitter */6 u. Y$ l8 K0 \1 N/ b2 @
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);" d, [2 |/ q9 w* n! W
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
# q' r$ l. B) c2 c+ s  e8 v' @McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
1 ~: v& I# Z) ^* P* P0x00, 0xFF);. K; L' J. N( X3 c

: ^8 B4 V8 W! Y  ]/* Enable synchronization of RX and TX sections */
2 u& W! z, I/ U2 v4 x  @3 ~McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */5 l6 }/ c4 a  M3 c
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
: ?: G6 m5 k/ X4 `& kMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*, [- d. q! e! m9 E* d* I
** Set the serializers, Currently only one serializer is set as
8 I8 ?3 ], ?$ e! g: [** transmitter and one serializer as receiver.
  q& ]) L* w3 U4 x7 s. J*/
. `2 I, r% p% R* S8 @  T1 W4 \McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
' t4 k( f# ?" v. `# `! v5 Z- J0 |McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*1 A) [# `, }5 [! @! T
** Configure the McASP pins
8 G6 x8 ~# H% `** Input - Frame Sync, Clock and Serializer Rx
! l" D6 \7 |/ }3 e- s- D# L6 h** Output - Serializer Tx is connected to the input of the codec
; u: ~0 e/ {% Q% a% [*/3 C" E. q# w+ K# X$ w- K# \0 U8 m  ^. t
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
2 t+ g% g  y" P7 g" L* D7 e) zMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));. G! i5 H% l) _, R
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
" z: m( Q$ x0 M8 D8 p| MCASP_PIN_ACLKX
1 W) b+ j8 _3 U  h7 V: l% v9 f| MCASP_PIN_AHCLKX
8 {3 Q, \3 k' w5 e; H| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
# N! G  _0 k  T$ a6 {8 G( _McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
8 N9 i) E+ o# t; H, _| MCASP_TX_CLKFAIL 7 F" X7 f* S% r5 j9 l. K
| MCASP_TX_SYNCERROR6 n8 ?- `3 c2 v( v
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR , A* `& z+ \; v+ {$ u
| MCASP_RX_CLKFAIL
4 \3 @' \8 I: b7 u| MCASP_RX_SYNCERROR
' A4 W" f& a, v  `  R| MCASP_RX_OVERRUN);
5 K" _. x1 z; ]+ D3 Y# O7 |; G! u}
static void I2SDataTxRxActivate(void)/ y- g/ s$ Q; k4 F1 s
{
. n  c# `( r5 j3 H4 b# P/* Start the clocks */
* ~/ t6 |; D% }) y/ P6 f6 RMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);+ w/ Y* C' o4 T8 j
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */9 w  h( P4 E: o, C
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
5 Q1 q) C9 c. [2 e& C0 O" T9 _EDMA3_TRIG_MODE_EVENT);" a" s5 l3 s" F8 D5 L! i
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
6 ~5 S/ N' @, a7 q6 F# E2 g0 }! _  gEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
( C8 f7 b; C, }0 V! Z7 MMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);: c0 y7 Z# C* i# z8 a
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */  ~+ p) p- l- j( V9 r* L4 w
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */& j. M. ^: i9 Y7 N$ S5 }1 J
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
4 I; j+ ]5 _" g" DMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);* g0 q+ r/ w* A+ n
}

; Z$ Q0 [1 l9 [. l; [5 |' f: H
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

2 k2 y# o8 t% N/ c  h




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