嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
, h0 Y" S- v( a- |input mcasp_ahclkx,
" x$ v% z3 i3 F, hinput mcasp_aclkx," x3 J( Q( P$ e: Q( z
input axr0,* P3 j/ S& \4 Q8 v3 B" q
9 h. W- K) A; _7 k/ S) e: n
output mcasp_afsr,
/ A) o' G3 t% S! w- r4 O4 Koutput mcasp_ahclkr,
  Q7 c" u0 G  x- e" U# Koutput mcasp_aclkr,2 I; \7 N3 J* c( \1 M2 J6 Y! z
output axr1,& H& d6 d8 p8 |" q
assign mcasp_afsr = mcasp_afsx;
9 Y$ t# h  r4 O- Massign mcasp_aclkr = mcasp_aclkx;
$ R2 c  ~4 `2 _2 `; Lassign mcasp_ahclkr = mcasp_ahclkx;% m' [$ y) v# y& ]. {4 D
assign axr1 = axr0;
4 ^6 D8 j1 H2 P7 X9 e

2 H6 I: o) P- L
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

  R: E2 s1 a% D6 R4 l0 v0 M5 F" r
static void McASPI2SConfigure(void). \: C6 \8 u8 S$ f% B/ {9 c
{2 ^1 m! m8 w" |& i& ^; U
McASPRxReset(SOC_MCASP_0_CTRL_REGS);& o% l2 t9 ?: _( O6 y
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
0 g3 u4 i" T; x! A9 q/ m1 I" {McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
# m* S( W( [$ ?6 h9 |8 @McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */: X! i3 d/ g% Y
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,  X* G' `8 W% h* g: L
MCASP_RX_MODE_DMA);" ]* T) Q# s. D
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,4 }/ j* n- M% K3 l; z& R+ a5 U
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
7 O; \2 B! y3 f2 C6 n$ ^# r% QMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, , S& P. F/ Y% J* L8 ^9 P5 A7 p
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);& E9 r) s: ^& \$ ^* i3 a* y- p
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
8 j; D+ u% Z4 UMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */, Y) K$ ]2 p) ]2 w) w5 }3 I
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
! Y3 N; F9 {! R+ CMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 0 B( F2 o. N$ z
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,3 k! M7 U% [/ ?2 x
0x00, 0xFF);
/* configure the clock for transmitter */
4 I/ ^; N* Z; \9 Z, Y! s. ^McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
% n4 P8 h% ?3 [; Z- \McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
  v) `3 m4 R+ C5 r, d' nMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
2 ]2 {8 w6 z% J8 B; @) C0x00, 0xFF);% w3 ]- \' L$ @  d
( J8 n% _/ O  k4 d: V( V; C
/* Enable synchronization of RX and TX sections */
+ h2 l+ G  i1 \, N: G* ZMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */+ n( q1 H% n& _0 E( C% v% u# C
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);+ F, z7 d4 ?! N8 c" A4 ^( j2 D; K
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
8 ^" L5 s7 x! q4 D5 u: A* M** Set the serializers, Currently only one serializer is set as
* p" L/ @( Q! G# G** transmitter and one serializer as receiver.
1 L0 Y0 ]) J" C) o5 _! r" W/ d3 A*/
* C1 l+ y; d2 ^McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
/ y2 u0 T5 C% D9 w! N1 d: VMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*% B5 Z( A# O+ w$ S$ s$ y, d% M
** Configure the McASP pins / e  c! S, j9 u, S; I
** Input - Frame Sync, Clock and Serializer Rx
/ |" l( r. n5 V% l; E$ N' z7 O** Output - Serializer Tx is connected to the input of the codec ( q5 i) V7 w/ P% Z3 Z5 M
*/
% g' K# i' t4 M1 nMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
9 R, {. b; D( S" gMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));5 P" [3 d" ?; E: h! n
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
1 v" c* c7 ?; E4 ^  K, _- T4 t6 r| MCASP_PIN_ACLKX' |$ j' k  j2 v/ }5 W
| MCASP_PIN_AHCLKX- k: j6 v! a9 b, H% S
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */3 O# k: p! H7 a7 w
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR , W; a8 J7 z3 c# L
| MCASP_TX_CLKFAIL ) E  }) B% ]7 g! j
| MCASP_TX_SYNCERROR, u; E/ H5 G, e% \4 b* \7 j
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR # c+ y  K& z; L) d! [
| MCASP_RX_CLKFAIL
- O3 L! z8 B" a6 z| MCASP_RX_SYNCERROR   P8 b1 }8 N& H; Y2 b
| MCASP_RX_OVERRUN);
2 a8 o" q8 ?2 |, c* e; k  S' A}
static void I2SDataTxRxActivate(void)
  \/ R8 z  p$ u7 E& Z$ A8 f{
9 }9 i% o; Q+ S2 i6 b! F" E! [/* Start the clocks */
: V0 Y7 j- {* Z, s1 A4 h" HMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
3 j( V5 w' t' G$ i- z8 FMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */+ A; @0 F; i0 _& R! \& p0 o' [0 H
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,. [+ _# _( B) b2 r1 X( z
EDMA3_TRIG_MODE_EVENT);0 \* _+ J- d( o, Y6 m
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
' r& i# g# g/ c7 UEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
8 N' d+ W; P$ }1 P  Z$ eMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);. T# Z% [0 {+ V5 ^: E
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
# C0 Z+ E8 q1 S- Z/ {7 V3 iwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
: T0 D* y! ^2 @) }McASPRxEnable(SOC_MCASP_0_CTRL_REGS);! f; E! ?4 A/ @- Z# ?9 X
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
1 y* h" U  n8 [3 x8 ]}
* p# m& k4 c7 f& n, {0 F% C
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

8 w  P7 u+ m3 j/ e




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