嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
/ l2 u' S1 ~) P1 y/ @# Binput mcasp_ahclkx,$ U, |/ F! ?7 ~* g
input mcasp_aclkx,; X3 x, K, S  {
input axr0,
* W, W6 ?" j$ `5 B+ }
, b5 c! U, q' L. Z; ^output mcasp_afsr,$ x  [8 I9 h. {: D: E# v
output mcasp_ahclkr,1 ^2 F5 {+ U  j4 P, s
output mcasp_aclkr,4 }* Y( l- r1 I# ~- B
output axr1,7 q5 M  f1 l. I  R( U% O1 ~' P- k
assign mcasp_afsr = mcasp_afsx;
1 m; Z/ A9 c) v& ~# F, Oassign mcasp_aclkr = mcasp_aclkx;
9 ?8 z$ s" m3 u3 D* Xassign mcasp_ahclkr = mcasp_ahclkx;: q! G8 C4 s3 ]2 X- t+ }
assign axr1 = axr0;
3 [& J9 t) ?9 R, Z# h

$ |# T5 t8 T* D+ R, g) g
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
6 I* R. h4 |7 k( m$ E
static void McASPI2SConfigure(void)3 J* ^$ t% j7 |; c. K9 W
{; \8 k3 g% ?0 x4 f1 R
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
/ D7 Z" v8 L. vMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */$ b* q. d" I' r+ N/ _( U
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
" X% J; B5 `8 p4 O% Q5 T' A9 EMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */9 [& Y+ @; s. Q/ M3 L  f
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
- q2 }" w8 G3 iMCASP_RX_MODE_DMA);
7 a5 \& K7 N' S0 H/ u; AMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
- m) u5 K4 ?! c: ^5 q9 w1 GMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
$ _" r1 J$ H& vMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
* X; \4 t% y2 tMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);: B& d+ }  B2 n" B$ h2 x
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
) e& L- `4 J' }" iMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
/ I( z* i, p$ wMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);: A: `* k9 V$ c/ _+ n1 U: \
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
, Q" g$ z+ v5 k: pMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,+ O  s8 ?  J' A! r9 b8 r, g3 C
0x00, 0xFF);
/* configure the clock for transmitter */
/ E1 U- Z' h3 _8 R( X5 c# E0 H; BMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
/ j& J  s) ~9 Y7 K$ b# nMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
5 ^) {, j8 l, _) V3 `McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
& a. w% ]1 z. B9 z2 C5 [0x00, 0xFF);
: e7 j$ ~5 L4 y9 |' Q/ L% n1 D" @5 z7 x) j2 n* b* u& t
/* Enable synchronization of RX and TX sections */ % h/ R  e5 L8 O0 `: ?
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
8 D& S  U1 e2 v  W$ kMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);& P. L( n  V) C, l# H
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
0 k6 m- X+ C( s# i** Set the serializers, Currently only one serializer is set as
. }$ M: k4 n0 g( c3 V** transmitter and one serializer as receiver.0 w2 X5 @! s# n" B2 g# n
*/
9 K! b. o+ Y5 V& I0 WMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);# n( V8 m  x) k6 o& P( U6 r, c
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
0 u' D9 p' z$ B; L& w** Configure the McASP pins
) D( a  d: m5 P( I# e0 h. [4 K# `) R** Input - Frame Sync, Clock and Serializer Rx
9 P) v- j) L, \; f, h  Y: w* {** Output - Serializer Tx is connected to the input of the codec
' ?# f0 d- |5 `*/
! C6 D& L( v6 t! ~+ C# D6 k8 EMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);3 h4 M. |  H) a& W4 D$ n
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
, h* z1 p2 n* s' x, i% j; Q& zMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX% _! ~7 ^: W' y
| MCASP_PIN_ACLKX: N# r* R6 V/ c
| MCASP_PIN_AHCLKX' r* L, ^" [- A: X
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */5 m5 v. P8 {" F) W
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
+ x3 n9 L  A6 m3 w5 L( m! Y| MCASP_TX_CLKFAIL $ m4 n7 e( O/ n" L
| MCASP_TX_SYNCERROR- u6 j, H* S( ~3 ^4 L! Z, z4 g. m
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
( ~8 @8 R& g7 O- V| MCASP_RX_CLKFAIL
7 c5 K5 V0 F: ]| MCASP_RX_SYNCERROR 4 v+ E9 x1 l. i
| MCASP_RX_OVERRUN);
% n4 B* ~0 \# \  R2 `' A: v7 O}
static void I2SDataTxRxActivate(void)/ [8 P  c& A, `& d) G
{0 i4 P1 J/ P+ m7 }. \
/* Start the clocks */
; k* T2 s. s% ZMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);- s" I+ l$ m' a0 o
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
3 P# B3 x, e8 N. p* l5 Z. wEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,$ |1 _0 z" X5 \0 I; \
EDMA3_TRIG_MODE_EVENT);
) H+ u" @( b1 B$ L  x& C. {EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
5 }% d3 n- _1 L  Z, N, tEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
  e! L$ H+ {  bMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);8 S5 M- D. Z' e; Y: ~) s  _
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
' _9 W( Z5 X( _9 N: @3 `% zwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */8 l& }* h" Z8 {+ w; t
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
- [, x2 h: C' _  O4 w$ z9 JMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
: t2 H1 C. u0 `5 t3 a) c}

5 K! n9 P+ Q. h9 R  K
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
  n4 ~0 d& h4 ]4 ?' S





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