嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,8 }1 ^: G+ g4 E( V, O6 {
input mcasp_ahclkx,
9 z% e6 [( H! v6 u* qinput mcasp_aclkx,$ O1 [4 t# k8 y" \& g/ |$ o' V
input axr0,; t- E; l! ^7 r- _" j& K
7 i% t; W2 S! d0 b9 c7 Z, P' ~7 E
output mcasp_afsr,9 M- l: l( O) f4 ]- ?
output mcasp_ahclkr,/ S: f) n* w. Z+ \0 W% q0 h
output mcasp_aclkr,
& |- m! ]! B  @& T& _( \) routput axr1,
/ e# \1 u# B; {
assign mcasp_afsr = mcasp_afsx;% k2 p, O6 ^! T7 W' M$ x' `
assign mcasp_aclkr = mcasp_aclkx;
) l3 K- n! _5 x! u! t9 K4 Wassign mcasp_ahclkr = mcasp_ahclkx;7 F  r) D/ Y& E, a( N1 W
assign axr1 = axr0;

( a$ m9 W' ~- I2 J$ r
; y. F) @) v, {8 w
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
5 x) \/ `4 J' @1 W% Z1 ~
static void McASPI2SConfigure(void)% B0 O, n: s0 s  k
{) y% N, U$ ~( @( _$ c, b" S
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
$ H0 M6 l8 y# }McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */) T. `( a5 t' i4 z! Q
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
; O5 R: v" y5 u0 RMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
+ S' L. B7 @8 n6 u" b  WMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
0 o. I, \6 X; \2 H/ c$ n3 x2 P+ `MCASP_RX_MODE_DMA);5 J# ?6 F& B& Q; Y0 x8 R7 M
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,0 t/ \/ d2 @% B. d4 |+ f) s
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
+ w4 m: r. W+ ~  _" n$ G6 z  q$ a* d9 DMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, $ o' O& e8 z* |' h  y
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);, d, i2 P( G& b% y# m: Y! H
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
3 j  J& ^; I* }1 \MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
0 K  A9 k2 e5 W1 L4 B6 c$ `# rMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
, Q; X% s/ J9 b4 k2 rMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
! ?/ h, j8 J1 b. i: Y* l6 WMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
, `, }/ A/ R6 g/ a0x00, 0xFF);
/* configure the clock for transmitter */6 ]0 u+ c7 ^, Z( O2 c
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
+ [0 c4 b" M8 W1 P2 E# YMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 5 G8 A/ c1 ^8 r/ f
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32," t( ~; r* H4 j* E% a% B
0x00, 0xFF);. I" R. W4 `. m  H
  Q8 v# M+ C' c+ v1 B
/* Enable synchronization of RX and TX sections */
0 v% ^$ a* J' T% ~7 g* G4 DMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */4 B4 F7 P6 m) n. b' _$ F' O
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);( `' Z5 [% |7 H( |0 O1 v2 `0 Y4 s* B
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*5 A  A  h1 _# ?! v- W7 H5 D
** Set the serializers, Currently only one serializer is set as
( w+ \: g7 y" V9 h" X- y2 V2 M** transmitter and one serializer as receiver.
1 _) Q5 [" ]2 E7 P- E3 A- l*/8 Q" c+ `. S- @2 L# k" W
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);$ H3 F; g+ E5 c' J& o( g
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*# Y, T7 O# v7 l
** Configure the McASP pins 0 y( t3 k: q6 r  I! p! P
** Input - Frame Sync, Clock and Serializer Rx) r7 {8 j* }* h; r" [; @2 i0 I
** Output - Serializer Tx is connected to the input of the codec
3 Z1 y5 J2 x% Q1 J. M7 I*/
. y1 \$ M  v- r2 G  }McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);1 V3 d3 |7 x3 U8 l- @
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
9 v7 o5 Y( T" ~- e8 tMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
; K) k6 W: s6 p4 l| MCASP_PIN_ACLKX
- t4 B, h# F0 m( R1 d| MCASP_PIN_AHCLKX
9 P& V- o- M0 e2 R5 d, O1 b/ g0 P| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
3 U5 R' j/ P2 q1 C, yMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR . y- K, Y0 H. Q6 z2 z
| MCASP_TX_CLKFAIL
7 g" }: e" O9 c8 B% m# ]| MCASP_TX_SYNCERROR) Q# D/ o/ d( i, p; Z' ]8 p
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
6 h2 E* y4 `2 x+ h" m6 x8 A| MCASP_RX_CLKFAIL
5 ]- M* f1 Y" T5 S| MCASP_RX_SYNCERROR ; _3 v( _% F3 F1 d
| MCASP_RX_OVERRUN);
. z% r) H# X; {- c1 n9 \, R/ r}
static void I2SDataTxRxActivate(void)
8 v! j3 h: R- J$ e# {! l* O{. @. V7 Y) @3 ~& a# Q' |% ^
/* Start the clocks */- a/ f  Q) L! X" y0 O5 e: ]& m
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);" e3 z; r9 b. V! g( B, F5 \$ I
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
  G0 G8 {/ @- d  ?0 d3 c8 PEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,- x6 T+ O0 g; a4 u
EDMA3_TRIG_MODE_EVENT);
; q: V' y+ X: I  {: EEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
, I; x' Z! f. p* U7 _: pEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */* x2 z: ]9 T; B8 e! m
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
) w% J* {. `3 `McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */0 r! u; F7 ~3 M; a5 y
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
- e7 v) [$ m/ `, d! eMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
4 ~: {$ x8 F6 d! x* mMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
0 H: g$ x. K' G& s}
, x& s- `: v$ X+ `: ~; L
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

- a5 ~4 R0 D* O4 Z' \




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