嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
) O6 g( R4 h5 F: W. I/ winput mcasp_ahclkx,
" m* W! H) `7 m( `/ N3 B7 Einput mcasp_aclkx,8 K; m2 i3 Y# ?: s4 M  J6 K
input axr0,! \- O6 V) r+ v4 U& F% E1 ^

# G1 x- z. I3 c; k& Z1 K! A' L; doutput mcasp_afsr,
8 m0 A+ @. A! p6 `6 W2 y0 _output mcasp_ahclkr,
8 r) |3 t) q' ]$ e* Loutput mcasp_aclkr,
5 ~3 Z. L/ z1 T* t9 `. \3 Xoutput axr1,- s/ F6 |) R- W5 s7 U
assign mcasp_afsr = mcasp_afsx;
+ G5 r* k! }4 }+ q2 |# w7 Aassign mcasp_aclkr = mcasp_aclkx;
* n! c; l9 ^1 f" gassign mcasp_ahclkr = mcasp_ahclkx;
' G# y/ n6 ?, M* jassign axr1 = axr0;
5 G; W9 U: t  [; |7 [! U- |+ d  P

7 Z% n) g# a: ]+ t( w, E
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

: B& T! c9 P* t( U5 Q& j$ Z* \0 e
static void McASPI2SConfigure(void)
0 c3 Y' `8 @1 S: x: p{
' Q) _! _/ Y9 L/ @& C1 vMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
) H& |% j$ X8 B8 C3 U5 n8 EMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */, U" A8 M  \* R0 J) o
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);) R0 V$ o, E8 a! @
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
7 D: n, \4 ?& n% u8 X  gMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,9 J" Y4 G3 Z1 l; n
MCASP_RX_MODE_DMA);
3 `1 G% k( ]# s' t' z' ^McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
7 h9 `1 z. X" W) v3 J" a. sMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */! y7 O1 c6 B' g- [
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, . [) l' E- `* B& M( B7 S
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);% r6 n. y6 ?$ S" l0 H  ?
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, $ f6 T% R: {# |1 d# |
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver *// G( C" ]: P& n8 i
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);; r) q6 W1 h6 ]- H8 y! m
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
8 m+ \) T1 {" C% TMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
8 k  N* O- x" i0x00, 0xFF);
/* configure the clock for transmitter */
5 r) u  T) K0 L4 K  [1 O8 R0 b7 hMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);4 f7 z! B9 f9 J" {
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 5 f! y1 B4 J/ f" Q5 ^5 c7 a6 K
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,9 v7 k/ s/ e; \$ F& S7 G+ R
0x00, 0xFF);8 `5 C2 q% z7 X3 [+ c  o

- `: G0 h: X, E9 ]( ]/* Enable synchronization of RX and TX sections */
7 F+ P( z4 q4 a8 E8 lMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
8 s( f1 U1 a! T9 UMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);3 u5 S$ F/ e; X7 q0 ~
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*: ~. i/ ?( m& g; y- }0 n4 _
** Set the serializers, Currently only one serializer is set as4 v0 \9 `7 g* h3 T, D* T
** transmitter and one serializer as receiver.
2 d8 n" q- z- k! L+ ~*/( R8 M% K5 ^+ V4 m" P4 y7 a' P! y
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);" X! d) ?' }7 F+ B. D6 ]- g$ N
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
# v! X2 n* @4 V. `** Configure the McASP pins
) `. V' E6 w/ i4 @** Input - Frame Sync, Clock and Serializer Rx& T, _7 F: A3 z- j" r* I8 H  `& B& x
** Output - Serializer Tx is connected to the input of the codec
7 {4 j- z- R6 s5 q*/
+ d  ?" Z1 _# oMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);; Z. x5 H$ Y9 F8 Y5 U; Q
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
6 N9 b" K. v1 u2 {# uMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX  c0 L& A: L) ^9 ?
| MCASP_PIN_ACLKX: z& X( d& C7 F8 \: j0 v7 K0 \
| MCASP_PIN_AHCLKX$ M, y, X# l) R
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */2 K/ M/ R* S+ P0 j/ V5 h4 E
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 7 N! |9 Q$ k3 W; d! X5 [- M, ]
| MCASP_TX_CLKFAIL 9 l* n$ }0 Z$ e3 y1 r
| MCASP_TX_SYNCERROR
: i/ l& O* l# j& H0 l| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR ! H7 I  x/ I: F9 V. X& ]8 o8 F3 _
| MCASP_RX_CLKFAIL
, w: H$ `5 `% {| MCASP_RX_SYNCERROR & n7 K3 Y) J( k' l, C: N/ t
| MCASP_RX_OVERRUN);
5 e! Y3 q3 J$ w" ?/ t2 a0 u}
static void I2SDataTxRxActivate(void), @$ y* s8 u7 O& C
{
1 j3 b3 M4 F, r/* Start the clocks */( }& F1 Q' b! }
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
( `& Y2 `& w' O+ HMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
, [0 x: y0 ]  Q1 `9 g- UEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
1 G% ~# c. R( g5 [4 ?. u- R9 uEDMA3_TRIG_MODE_EVENT);
7 u: a2 Y5 p; E( ~7 \EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 1 r. b1 i6 b; K2 [: P6 _( G
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
- J4 K3 }. Q$ C: R8 W  K. GMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
% i5 r3 T. e+ q% V5 o% ~McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
6 d' C3 |' u! X! ]while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */- Z6 D0 F* [; z, d) R
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
, @( n5 E% Q/ Q" B  X# M2 |2 k' _  dMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);$ [# d- l% I# x' W: c0 r
}
( F( P4 J0 M% d
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
0 D4 y% u! I1 Y; l, K" j. m3 A- f, H





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