嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,) U" c0 \% q  U0 ?$ S1 G& y
input mcasp_ahclkx,1 t3 ]% D) w8 |
input mcasp_aclkx,+ X+ Q$ a  T0 p+ I- l9 o$ ?  k8 b
input axr0,
' W0 b) E9 d6 _; E0 I  e  c3 r
' ?3 o$ Q& X# c9 e" Boutput mcasp_afsr,3 I, w5 H; p; v4 g  E
output mcasp_ahclkr,
  Y/ M( X. c. s, k3 Routput mcasp_aclkr,% w& k: ]& {) }4 S, ?" L1 c) F0 _
output axr1,
7 p- }$ C2 C1 l: |! F7 P, ?
assign mcasp_afsr = mcasp_afsx;
4 B6 U) |: B# c- Wassign mcasp_aclkr = mcasp_aclkx;' R; r9 i& f6 O8 `) a# g
assign mcasp_ahclkr = mcasp_ahclkx;
' z9 a( B: \. K2 m- B+ O3 A0 \assign axr1 = axr0;

  ]2 W' f& }: M& _# Q* A0 J. R1 }3 ]; t& q- K) m
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
" C3 V. W. d! `0 L' _( U
static void McASPI2SConfigure(void)3 i7 ?9 Q5 Y" j8 O9 p
{9 G0 {" X) {  A& j! c. [7 @6 K" B
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
( V6 q( j  v6 `  r$ UMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
) M8 G, [0 @7 k# t; _9 \2 vMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
0 }3 ?% d- Y' k& q- ?McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
! x3 Y" y; w/ b& b/ j1 ], KMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
  ~, \5 ]3 |' Y) g( i0 mMCASP_RX_MODE_DMA);. [( Y  y/ ^$ C. q0 E
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
' m) n: m9 s+ n9 PMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
% s2 N3 j5 Y! J6 p$ `" BMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, $ t  g& X) n2 `/ |* }5 @# o
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
. S. T9 A& c- l  PMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 6 _, u: U: g" o, E$ B; D% N$ j
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
! z, Z. a9 v/ B. wMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);# }5 v) I! @, F7 \
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); + y6 r8 [% {& M4 [8 \
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,* |2 |8 k! o! o: ]4 e5 n  _
0x00, 0xFF);
/* configure the clock for transmitter */
, j1 A& U( P1 _* t: S2 [McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);6 c  Z% ~" |/ o
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
  E: }( {# r9 w- @# K5 C5 jMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,, l" f/ A$ _  j" T. H
0x00, 0xFF);+ O0 t) Z/ c7 F3 v

1 }" Z: n5 ?. K+ y' a! l/* Enable synchronization of RX and TX sections */ 9 t/ p$ v3 @4 C  M1 y& _
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */- w# c0 ]  D; P) r, ]9 _
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
7 Z5 R, [& j  @: W) T' ^3 R' ^McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
5 X3 @+ A9 p$ S+ a) W. g9 R" E** Set the serializers, Currently only one serializer is set as6 ^" B3 [! q/ j5 l
** transmitter and one serializer as receiver.7 S  @1 ~1 P! G/ k) b) w9 l
*/0 z0 t! A$ m3 K+ D" ^/ `
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
$ y5 p3 |4 G0 _9 }! `) GMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*5 c9 w. q3 Y# R. L% a2 ^, y/ G
** Configure the McASP pins ' l6 D" h$ X( q! G: U7 v
** Input - Frame Sync, Clock and Serializer Rx5 U  X% R* h8 y/ e2 y% P9 D" x
** Output - Serializer Tx is connected to the input of the codec
& K$ q+ b, j+ i*/
) l: b. W6 v9 y; u; i% e( S; ]McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
: j; S) o/ z0 A) m% r6 x: KMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));- o0 v1 v' E" }- E. w
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX! G1 j! O; [" G5 J
| MCASP_PIN_ACLKX2 ?& a# ]; G9 Y+ \
| MCASP_PIN_AHCLKX6 Y( ~) G; l4 a. `8 ]" Y
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */8 q  u0 Y/ {6 r' Q; d
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 4 v0 w* D5 \/ i" v
| MCASP_TX_CLKFAIL : ]9 m# t  m7 {* \: h: A9 }6 ~
| MCASP_TX_SYNCERROR
1 m3 c  J! O4 h) ~& ~| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
. Y+ b! f! h: m; M| MCASP_RX_CLKFAIL
' x0 C, q+ z, s8 _1 P' H) t. M5 O| MCASP_RX_SYNCERROR 3 s, N; N0 p9 ?
| MCASP_RX_OVERRUN);
+ P; l% U; M8 e0 i3 A0 E  S7 C}
static void I2SDataTxRxActivate(void)
6 p* e9 E+ J4 m* v% N{) Y" v1 |2 b* H0 ~2 {
/* Start the clocks */
$ ]4 O3 n3 z1 j) W$ j% J) uMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);, O& s8 e' W" c, z/ D. S& q
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */* Q  j  c: n/ r" _" X" \
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,, C% @* R7 t, O7 b
EDMA3_TRIG_MODE_EVENT);
( J+ m* |& ^- |$ L' b4 O& M- x4 zEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 8 U( e. G! G- g) e9 L
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
& z4 N) B4 c8 B4 m/ C- E% N4 ^! \McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);5 B+ O8 [% D* L7 \$ @
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */  p$ a6 |6 P# k  M
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */: N$ K) @% i" E2 h0 F# S! H$ w! f
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);, O  z: Q- i3 s
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);" u- ~# x+ L7 S4 O% }( @2 o& k
}

+ M; P  p6 n& c% g2 Y
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

' Z8 g( U5 X" H7 j6 b4 P




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