嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,/ C$ d* m6 f) W
input mcasp_ahclkx,, q5 ^0 K7 `& Z" r' Y5 ]
input mcasp_aclkx,0 K' U6 ?; G4 P' @
input axr0,
4 o9 ~: H+ b( U! x5 s( R! K- r& T6 }" D
output mcasp_afsr,! V: k- [9 J1 r
output mcasp_ahclkr,
0 B+ e( s  _: }1 goutput mcasp_aclkr,
9 z- [" z5 {" Routput axr1,6 m  i0 v5 y/ G3 V7 h: l
assign mcasp_afsr = mcasp_afsx;
& N. G5 o2 A: I: H0 P1 h- B2 lassign mcasp_aclkr = mcasp_aclkx;/ m5 Y% Z# H/ \* X
assign mcasp_ahclkr = mcasp_ahclkx;
- O& z! ]% \! U1 N% Hassign axr1 = axr0;
5 z0 B4 E: c0 u1 B9 x. c- ?. r
3 M/ N/ M6 I" R, @- k$ J0 n
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

# r& z, E* a9 \3 u' e
static void McASPI2SConfigure(void): K) f* C& v/ e. _% d! t( L1 S
{+ y$ s: y( }. ?" ^3 s3 u
McASPRxReset(SOC_MCASP_0_CTRL_REGS);, W5 ]: s* A# F1 e0 x0 Q) {
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
& J! v" t' W8 v0 C" K0 a: lMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
! M8 @  @: |' p0 SMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
) f/ M# |3 O  E/ N& m) [7 IMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
3 [3 X) e2 I0 C$ [MCASP_RX_MODE_DMA);3 l5 y7 U3 u* u" [3 W0 ?/ W; R( y
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,; ^2 X* u9 P; f# g0 k  ]
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */2 k7 C. t$ g; r
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, : @" T0 a  N$ a  b
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);9 n7 o% {* }: I- o2 A% f" V
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
4 I$ R" U' W- Q6 G+ QMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
' ]9 {" P' m* c# z: t7 ]McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
6 U4 r) Y7 f4 Z( z8 @1 p8 j" D, }  xMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
* m0 A5 Z  m) N6 j3 s1 B* T' wMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
* k; N3 s: X% G% D+ ?0x00, 0xFF);
/* configure the clock for transmitter */
: w& D* p  D  i: [/ P3 V/ _McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
! }; H. C2 d' R" xMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
* u1 G! M# E3 ~4 V$ u- `/ vMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
/ X) C! `; Y% e2 X: K0x00, 0xFF);
1 R' i& y9 I2 {0 W8 m
- K3 P& c7 u2 H/* Enable synchronization of RX and TX sections */ 8 z' ~$ y& Z3 `1 I. y: \
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
: k( ?$ m, e& `9 |, u4 KMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);) ?  \# ]5 w" U. a
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
. u% t! |3 J  u** Set the serializers, Currently only one serializer is set as
7 K4 C2 s0 f& `/ w- |** transmitter and one serializer as receiver." _0 G5 o! g" b9 v$ V* j
*/
4 ~3 j1 p# @- Y  u6 G8 AMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
' b! x) x# n& R- g0 H) f  aMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
7 f, I/ C" E2 ^  \9 P' A$ d** Configure the McASP pins $ Z* ]( F& u1 w* G9 N1 A, d6 O
** Input - Frame Sync, Clock and Serializer Rx6 S7 M- p# b9 q* p$ Z: O
** Output - Serializer Tx is connected to the input of the codec 2 S+ c+ T4 G- q; c) ~: \$ h; ?  _9 j
*/
  j" a6 l  k' r. n% W/ |- o6 e4 j0 gMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
$ i3 O! X# O; ]McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
2 B9 ~7 f( \( D$ TMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX, s7 H* e0 V" D; N
| MCASP_PIN_ACLKX8 }+ q8 v6 A5 X( h" N, e. O! v) E: u
| MCASP_PIN_AHCLKX
7 p: x/ A, t! C9 q+ A0 Q| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
! t+ m+ ?2 q! D2 Z0 n8 ^McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ! g9 `: v; J% U$ C
| MCASP_TX_CLKFAIL ; j1 @, d# r1 v! g' o8 T) P2 r" S
| MCASP_TX_SYNCERROR
0 o* n8 ^3 W% a1 @; C( U$ A6 M7 m8 d| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 9 ]8 R( H8 ]( \3 d, @& [  l
| MCASP_RX_CLKFAIL
1 `4 {6 @; W- _- Z# k( ^0 _| MCASP_RX_SYNCERROR
1 I1 `. B7 A$ i2 {& {! B| MCASP_RX_OVERRUN);' D2 a4 B' X5 F! S
}
static void I2SDataTxRxActivate(void)
7 c! h/ j  U1 `/ c$ _{
7 T& X8 ]6 {" r( B7 X2 h/* Start the clocks */
0 T& ]$ }  y8 T  g- zMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
/ t. L# t9 Z: E& v/ dMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
: I( w5 I: r% R5 ]# NEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,: V3 l0 e0 W1 q; E
EDMA3_TRIG_MODE_EVENT);
( `( V& D, N' z$ tEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 1 {6 @6 N' r& u! {9 y( T, o( d# b
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */; M% I. ]  Z: Y5 K- {/ c
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
3 Q- k9 ?, N+ G" A  AMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
2 |" \% P& |7 M6 r3 X0 B- lwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
/ h. u+ I' H: P/ KMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);+ B0 w: y" `3 }4 f% o5 r  T) p
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);1 c+ Q; k' H6 k. Z. N1 ^7 b. L. M
}

- H5 P+ r5 z) s/ g- D8 w
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

& X6 G) T5 b$ c  x' Q




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