嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,8 V3 E  k: V% E1 q: ~: u& E
input mcasp_ahclkx,. N$ K0 Q4 {; r( U- W+ n% N5 E
input mcasp_aclkx,; i* Z# Y; a5 w& C$ V5 e. x
input axr0,( ^& L' F" j- ]/ ?0 O" S

1 f. {7 N' \! A# Goutput mcasp_afsr,
9 F& a: P- o5 _9 a: ]: P- foutput mcasp_ahclkr,# X( l3 ]3 @8 O( m5 K) Z
output mcasp_aclkr,
! [: v4 a3 Z! aoutput axr1,6 P# h) J8 L, E0 o# h0 c" ]1 n/ f
assign mcasp_afsr = mcasp_afsx;
8 h5 t8 j2 J9 ?0 U5 r# `assign mcasp_aclkr = mcasp_aclkx;) L- G5 h1 Q# I% j0 A- R- K
assign mcasp_ahclkr = mcasp_ahclkx;; y1 d+ J" a; v& ~/ }6 @
assign axr1 = axr0;

4 }. e$ P+ n+ ?8 `* {. j8 \- S5 t$ \  o9 i0 u; q
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

: A4 g: E( ^: w5 t# h) w
static void McASPI2SConfigure(void)
. m& ~% ?3 [6 W" j, |, `" G/ _4 c{2 z- f  }* J  ]' z/ q
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
1 n$ P7 D5 T# t( K/ L# hMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */; Y& }' V  K6 i" U' d
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);' g7 g7 c& \% ^0 w" e; |/ {0 N, j
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */$ v9 q2 W! `0 m; u
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
- g, K1 A; A: F! zMCASP_RX_MODE_DMA);
* }$ N1 B% a6 l3 h( c3 C# d7 c- h8 R% lMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
  S. B0 k# N: V* M+ }MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
7 m. k6 @( Q& q" Z3 c4 dMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 2 i3 g( l: ]  W) E+ L
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);% \* L, Y0 B" t8 h
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
( ^- I& f4 G7 V4 K; S6 V1 EMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */1 G" e3 e( y8 ~9 b1 T( b2 s' @
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);, F1 Q, ?0 _( i3 \+ m# |- h4 E
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
8 v# ~. Y' G/ u. W# p% O- a" @McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,$ r- G6 ~$ J" F
0x00, 0xFF);
/* configure the clock for transmitter */
( d8 S* a. V1 B3 B$ vMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
) @, v8 |6 c6 _/ B2 r, s, \McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 7 L8 `1 N! t9 O" W5 z7 j
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,7 j3 \- R7 `  p( _( B% Z) S  i' `% x
0x00, 0xFF);
- K2 Y2 p7 @2 I0 @1 ]0 Y6 d" V- o' {. h/ B
/* Enable synchronization of RX and TX sections */ ; {, @# B$ s- ]- ?
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
! f3 V% T% X1 X# C8 p1 MMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);' O  m# x4 H6 \8 y9 s4 L
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
5 g/ S( a/ I$ D  F6 H8 x** Set the serializers, Currently only one serializer is set as
( f% J: ^+ H: o** transmitter and one serializer as receiver.
6 M6 \4 h, `& @/ s' U, l*/
) j  r5 d3 `2 ^- dMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
: v5 K4 Z% Z5 U, _1 D- IMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*1 U( b; S' D& ~* o! w  \7 C; h
** Configure the McASP pins ! u, I# p3 s; E. s" y. z
** Input - Frame Sync, Clock and Serializer Rx
1 `' I8 x% v$ x4 [** Output - Serializer Tx is connected to the input of the codec
% R2 k  ]% Q- [8 X0 b9 @5 S*/6 Z" Y1 \. |+ Y3 F
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
8 O6 \  t2 W- y1 L% M3 V) WMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
9 v( x$ e; D4 o& s. V: tMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
4 |7 d! l- N- A: E" V| MCASP_PIN_ACLKX$ X! \( Y6 F+ O4 ]& U
| MCASP_PIN_AHCLKX, i  j' s# S0 ]6 i0 ^
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */! t% J* @/ q  V6 |" M8 i
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 1 f0 F7 `. R% d/ @: s
| MCASP_TX_CLKFAIL 4 }% ^5 x0 V- e0 b3 l6 S1 n% _2 _
| MCASP_TX_SYNCERROR
* J) Z+ A5 G- [( @7 c9 k/ }- e7 X| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR ! z1 q, C4 g- f* J4 O% d
| MCASP_RX_CLKFAIL3 v4 {" H  c. i* s$ ]
| MCASP_RX_SYNCERROR 6 F: `5 Y; g3 V- M
| MCASP_RX_OVERRUN);
  Q. y7 d5 G8 ~$ Q" O}
static void I2SDataTxRxActivate(void)
0 ], ]) R% x. [0 K7 W{% Q% y9 h  P& i+ w" ?
/* Start the clocks */$ g" M, u7 _4 u% z
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);2 {" g3 D+ H% j$ n/ S' a4 p8 e% j
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
8 n- }- @( U  g2 X8 n! [" ^EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,6 y3 e" O- A& G4 }! e, d# p: A+ q
EDMA3_TRIG_MODE_EVENT);
5 U1 J6 b# X/ l6 W; LEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ; x, u3 i& J4 s8 `
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
/ r1 G/ h( b. ]/ r9 d: i8 u1 DMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
9 i" M4 S9 S0 sMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
5 _  S5 W$ l7 E! n- Rwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
; \0 |% v! q9 n* j! jMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);1 }+ [4 K+ D" |: A3 ^" r
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);5 P. O/ U# w2 Z$ q- G
}

- W3 N0 F8 [. Y$ Q7 e3 P( S
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
: ~& i+ F' U# K0 G7 P2 Y7 k





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