嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
: m! Z& [% f. I9 ~1 y0 `& Yinput mcasp_ahclkx,6 m4 C$ D) W7 N
input mcasp_aclkx,
# d8 F* g+ I9 @9 p: @9 b+ c9 Linput axr0,
: T1 _" A5 ]6 c' t# ~. u% b! t% R% |) q6 [  l: y2 Q/ M
output mcasp_afsr,
+ |9 h6 u2 L% C4 Ooutput mcasp_ahclkr,
# N( ^( q  B6 B9 q' Q9 b2 D% S# G# Ioutput mcasp_aclkr,( N7 o! @/ P" c0 d8 u
output axr1,
( i$ q: D, |% X& M; b* U
assign mcasp_afsr = mcasp_afsx;* S  G  }. q' f% [& A# \6 K/ I
assign mcasp_aclkr = mcasp_aclkx;
1 t, r/ m8 q& c( g# r+ `0 Aassign mcasp_ahclkr = mcasp_ahclkx;7 F5 {3 `2 v$ O6 N! k2 o
assign axr1 = axr0;

5 }8 u9 E4 m1 ?5 m* H7 T1 H- N$ e; \  ~/ {4 k, ~
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

/ ?6 E: s% C4 L
static void McASPI2SConfigure(void)
0 N) h& C0 u" J9 m7 B1 m{
( y$ ]" I7 b9 m7 y9 B4 E: QMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
9 S, [! @+ A0 P1 J% Z6 UMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
- T& j5 E+ M0 I7 `/ bMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);- k; ?" U/ |; Z7 d' _
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
! U7 i3 |8 }, n# ?McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,9 T" d" g/ g# X  V& \% G
MCASP_RX_MODE_DMA);
9 ^! |$ L4 {0 R0 N* a8 P# hMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
' q. H8 {+ w1 Z4 k2 O; s7 N/ ?7 \( YMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */! t' d( f6 W! h' Z0 _
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ; Y0 _' G  \* O2 t$ M6 H  g8 H
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
/ N1 S3 e/ R* `% R: @% jMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
5 S- x0 d6 ?/ @- @, UMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */" U9 Y- o# j. A
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);0 C/ Q- Y4 V9 g/ M+ a, m0 n
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
# ?6 D1 S3 U2 J' F- m+ X0 z2 F2 PMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
3 _; K) r% F  ^6 o6 `0x00, 0xFF);
/* configure the clock for transmitter */
) s, K* t0 ], U! j% MMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);! c! H/ L" i# A" K! O5 Z2 d
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
% R/ v! ^- u  ]* aMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,) W  u5 m! p) @% C
0x00, 0xFF);
2 \: g+ l0 _  r
8 P$ o& K4 {2 d2 g2 Y, P& X/* Enable synchronization of RX and TX sections */
, J! j, r: J  K0 iMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
6 y: d) j! \: u  OMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);1 Q: P2 N* f: U  h  l* p7 V& Q
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
6 L7 `5 }: k# T$ p- n* n** Set the serializers, Currently only one serializer is set as
% G6 j/ }; k6 n; C% C$ _9 ~** transmitter and one serializer as receiver., D# n! y. \# {9 c3 W  E( D8 B
*/
  L3 ~( _$ i( T8 ^! h: }/ X8 iMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
* J5 ^1 {7 h* Q3 TMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
2 M* R. B# ?: L** Configure the McASP pins 3 @! Q' Z/ F1 o6 L
** Input - Frame Sync, Clock and Serializer Rx
6 q) z8 ]1 _- n% {** Output - Serializer Tx is connected to the input of the codec
$ T0 M% X, w' ?" u! o( j2 p* r*/3 `6 P; N* {# L' s3 `& T
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
# W% f# P( U5 ]: aMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
, T' y. G& P5 h: [. V9 CMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
5 i- I' m& f$ ^' f| MCASP_PIN_ACLKX
0 w7 B& g8 U3 D/ ^6 n: v, e$ r9 ~| MCASP_PIN_AHCLKX% G3 Y9 ~$ P0 z3 h+ T
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
# w! D' c4 h# |" {2 L; O% E. bMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
. U5 K! S" L% T| MCASP_TX_CLKFAIL
3 c  k  B3 e0 [& E| MCASP_TX_SYNCERROR
3 G3 M/ E1 V  ~% d| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR . q+ ?" I& f8 g+ \# A( X6 ]
| MCASP_RX_CLKFAIL
1 a) P, `& j# W  N2 e5 e| MCASP_RX_SYNCERROR
" s+ H3 M; S3 W: ~& O/ I+ A| MCASP_RX_OVERRUN);
5 G( L1 [8 J( e& O$ b}
static void I2SDataTxRxActivate(void)& H0 Z- W1 Y; q! D4 t
{- o* l4 F5 v. _
/* Start the clocks */! Q% `( q/ f8 R; e$ @3 @5 D) |" i
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
+ \: C4 B. Q" X7 y+ i$ s$ V7 kMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */4 F8 ~" O) p6 Q3 w" t
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
" R/ o0 D2 d9 h* M8 h) FEDMA3_TRIG_MODE_EVENT);/ u4 r8 u. z. j5 ]  P5 V
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 5 Z- |* A- Z" x$ A' A  m& w! j
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */' M7 A9 ~6 z. a" v1 p
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
" r: S% m9 r* `McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
! i: Z3 S/ E# r' ~while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
+ S- o- b# }; \, y9 [' y2 aMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
# S- U3 ^, C  o# O' Z! ^5 A- fMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
3 g5 w9 r2 m3 F: v7 {& o! R}

( e+ e" l& t8 l+ D
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
. f. _" i1 C7 C- c4 g% u





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