嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,9 C4 f6 z* m, Y
input mcasp_ahclkx,/ O6 F: L) B7 |) G  W0 e% U% \
input mcasp_aclkx,
- u) d4 j5 H, s" p0 ]1 H5 N, ]input axr0,6 c$ |4 [4 U' i9 P

% G2 x, c4 _* B9 W, i5 N8 I  R9 Y4 ^8 |output mcasp_afsr,; Y3 d2 X- m2 A% @1 |
output mcasp_ahclkr,0 t- s" `3 W% p& a  d. U- J
output mcasp_aclkr,
& ^! r9 X4 M6 {  Uoutput axr1," q) ]0 u) C, x& I7 O
assign mcasp_afsr = mcasp_afsx;3 @# G& z! ?/ B/ O  b
assign mcasp_aclkr = mcasp_aclkx;; P0 u: F, `9 J; e
assign mcasp_ahclkr = mcasp_ahclkx;
/ z# ?* U$ C; iassign axr1 = axr0;
+ b! B  l: b4 ~$ E9 o3 A% Q

! f5 |  f* t; }( X* X9 o
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

5 }  C2 q" v  z
static void McASPI2SConfigure(void): p2 v% n$ B/ @/ G; h- D
{: f+ I6 o4 i5 M- H$ {: z
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
3 L  W3 J% p  qMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */4 k+ ]" x2 m  {8 D9 s5 \
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);8 x) }: n' ?* ~' T
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
5 q0 d* d4 T  C3 iMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,5 x  \1 V$ L2 o# Z' e& O( K
MCASP_RX_MODE_DMA);: V* o- X) a* F4 W' D: B9 u
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
& J; N' r$ d4 u  K/ e. ~4 B2 f" IMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
  \6 L% n" X% c. \McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
; n, E$ _0 \" C* VMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
/ B6 ]' x2 t. v) i. T- d# AMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
6 p4 y# g) z' _0 w( T" x0 vMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
7 _% e4 H7 r7 K% G- c! b6 hMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);% @+ L& s  A! k* u# H) b6 t* D
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
. _: }4 w5 E. H7 x. s, @- WMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,# h0 e( P# |  V" J6 m  ^' ^
0x00, 0xFF);
/* configure the clock for transmitter */
$ q; }$ e( x6 D, iMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);0 t* L, n+ N& d! O: C5 ?
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
- P) t6 p- S. l& JMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
! F; @$ i! ?0 m  Z  A0x00, 0xFF);/ I4 B( S: D; E5 K7 ?) h# I

2 x) F1 r2 `- b0 U0 R/* Enable synchronization of RX and TX sections */ . @, |) J$ H" _; R3 r. R4 u
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */0 A2 C: ]; o: p1 e8 P7 B
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);3 t- g. X$ T& |) X1 V) b
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*# `  y5 ~) H% N/ T; K
** Set the serializers, Currently only one serializer is set as  U) _3 O7 `, c) W4 D1 V
** transmitter and one serializer as receiver.
4 c+ _: D8 l/ d  ^8 B' o6 j*/5 |1 C3 M' D# ^" [9 H! |
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
. H4 c; @; w% B: |7 oMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
" G7 f: A- C. K5 E* w# [) Q** Configure the McASP pins 0 P/ X: E: }# j8 [
** Input - Frame Sync, Clock and Serializer Rx$ v8 t9 W# T  a+ V! M0 O
** Output - Serializer Tx is connected to the input of the codec
  o# T" W6 A5 p( E1 m, u5 k*/
; k' H6 `- U) e, F% v, L4 u! }McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
5 {5 }. L& J$ `/ o  X3 BMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));' O5 n2 g$ S, s0 D$ b1 v) T
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
6 r* \5 j0 Z. `% J# f  y| MCASP_PIN_ACLKX
+ R  H' y! Y2 G( c& O5 V- y3 N| MCASP_PIN_AHCLKX! b8 @: e! b2 I# q0 M* t
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
8 X% X) a/ R6 I7 W, \. U' `McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 7 `( z' C8 M* e0 \
| MCASP_TX_CLKFAIL 9 h) S2 T! H; Y9 n2 h
| MCASP_TX_SYNCERROR
. B6 h8 T1 ?1 O0 m! n7 X( _, e| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR " J2 |; Y$ R4 |! h' j9 x- k9 G
| MCASP_RX_CLKFAIL
. L6 Y$ G/ n. _| MCASP_RX_SYNCERROR , p- l1 W+ _4 C/ ]4 P6 I- }6 f* I! D
| MCASP_RX_OVERRUN);6 f+ A9 r9 R" t0 `& Q: A
}
static void I2SDataTxRxActivate(void)
( m: V( X! l8 ^6 Y{
! o7 C' b0 g! F, Y! a, h6 N0 O/* Start the clocks */
1 p' j- x3 b5 s, ?6 kMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
, F2 M/ ]# S1 ?McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
- T4 R7 G5 T' R, y4 g3 m# IEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,% [: D7 [) `/ g% U+ X1 v3 e
EDMA3_TRIG_MODE_EVENT);, h/ E- v9 n; A. h& y7 ^# C7 P
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 8 i- z/ h( {6 d" y* z1 U
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */3 |1 p( N% W7 g! h
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
2 n) p4 ]- J# a4 {) d" t1 tMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */3 r4 K& z: K3 X! m5 t* H" z2 N+ v' ~7 j
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
& M7 E& }  L' a$ {+ ]  z0 ~McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
4 J9 K! }' v( u2 tMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);) r+ J/ F% w- Z/ {1 U' p; z& a
}

5 o. M1 Q6 S. d
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
6 q2 N* U8 k: h( X* I* ?+ C' a





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