嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,# v1 v* \2 f8 c0 t! D6 k! V! [
input mcasp_ahclkx,. \3 D, R8 n2 d! u/ F( l( g
input mcasp_aclkx,+ j: T  g) F2 b% M
input axr0,
5 H5 Y" K4 ~8 O) f, Y
1 C# \5 ?6 M7 D- ?/ M2 d4 Woutput mcasp_afsr,, `$ |# m3 f6 m8 K, s# T6 v
output mcasp_ahclkr,
3 t. o; c4 e$ o' p7 R3 c, o* }output mcasp_aclkr,
5 l- o! g2 Y) Z- M  K! `: Xoutput axr1,
, y( W4 n5 Z3 X) [9 N& C+ A
assign mcasp_afsr = mcasp_afsx;$ [/ M! ?4 D! j9 q% {/ {
assign mcasp_aclkr = mcasp_aclkx;
! r  p9 g& I6 ~, c; Bassign mcasp_ahclkr = mcasp_ahclkx;
& N" Q! W/ \/ r& @6 v$ b- \: zassign axr1 = axr0;

. \' b: ]3 h+ p. M8 i  `
3 A# F& p! C. G( M0 J5 U. C
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

. U7 Q; y9 S  U4 Y8 g
static void McASPI2SConfigure(void)6 X: t* E0 M% u
{) p6 E2 T- t6 B; T1 E. M# w
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
' [- V7 G- w: d4 _) BMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
# A. c+ ~: ^1 lMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);6 k6 l! `: v% F2 ^0 C/ i, ^, @
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */- d3 x4 ]" y" i' ]
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,$ s$ h! D" \5 i6 c7 H8 X
MCASP_RX_MODE_DMA);
$ ?% H$ z+ l1 B! _# K8 QMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
) z, c% o) B7 J# g9 Z- [MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
" J: N& }* x& FMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
6 h/ ^8 J, Y5 N+ B; \MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
$ H9 j+ c2 K3 o) t- tMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 4 o  t7 F) t, O
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
5 X" K: R' D# T0 k, u% I% DMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
* }( t# P" u: i6 wMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
! ~* @3 R! r" |6 o% ?8 QMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
  |- R2 I1 A1 A" A$ P0x00, 0xFF);
/* configure the clock for transmitter *// L7 W; B3 s% b7 E! \
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);$ A* U- N( A" c! M
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ! W9 l5 Y9 H9 y
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,- H5 H- E4 x* v/ y  ]
0x00, 0xFF);
: C9 t" J# y5 L) t' Y4 a7 v" A
3 P% `- m+ L; c+ Q0 C6 E' X/* Enable synchronization of RX and TX sections */
4 O  E- Q, b5 |$ W! |7 U  v% lMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */9 |2 |2 v6 b$ r0 g7 L
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
& e& B* E: h" fMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
6 U- |. ]/ M% H, @. h- x  t** Set the serializers, Currently only one serializer is set as' V  A" H. a0 V7 [  d- e1 R
** transmitter and one serializer as receiver.5 s5 C" Q3 a7 q: n& z) ~# [* N
*/) E, C1 y) N" B- X1 n2 i
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
. N6 }+ d1 E* E. g. D$ A- ^& cMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
9 \( W) c% [1 E" ~$ j' v** Configure the McASP pins
; \4 \7 ]/ l! S3 |7 g** Input - Frame Sync, Clock and Serializer Rx% Y6 Z& m# g0 _
** Output - Serializer Tx is connected to the input of the codec + h7 W7 t6 T2 d# J8 f) D
*/
7 C6 I) Z: B7 ?! H: x2 _2 e( [McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);3 G, ]) f1 e5 |5 W8 B* w0 i
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));, c% j6 k6 j( ^- [& j; n# D6 J
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX1 `8 b. ~! u8 M9 k. q! J
| MCASP_PIN_ACLKX
0 S- c# }; ~5 e" }| MCASP_PIN_AHCLKX
) k2 S3 ~2 y) S' ^( l: A3 Q| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */- k. o/ {3 d& }4 |* h1 R
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
- N5 U4 l' ~* t$ w% x| MCASP_TX_CLKFAIL ! q: h; U1 T9 x8 e4 y! |# ]' G
| MCASP_TX_SYNCERROR% l3 l% `4 Q6 L
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 9 T8 x2 ~8 m2 o; H4 v8 k" x4 m
| MCASP_RX_CLKFAIL8 G4 X! ?2 A8 p
| MCASP_RX_SYNCERROR + |* ~8 N3 m; u& d
| MCASP_RX_OVERRUN);1 R9 a9 X# T- U# l( z0 a
}
static void I2SDataTxRxActivate(void)
( x0 ~' ?) m7 e' T$ Y$ K{
$ x5 ?( }9 a% l1 |4 B' u/* Start the clocks */
! a" I# c. j3 C9 G1 pMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
$ K. m" `# N' K' X: k4 \McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */0 ~# [0 T5 l( L. ]- ^
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
0 t1 r! S; r; d  I0 |4 g$ REDMA3_TRIG_MODE_EVENT);
7 P7 C+ |- b- _" Y8 L" I4 REDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
) m: N* O; p. l( HEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */- Z* L+ w$ w2 \" v; u
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
2 ^, z; y  P) g( v1 I4 g9 hMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
" j" n  p4 L1 v$ J+ H2 Fwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
# q! u5 ~. f/ z5 T- m1 ?# C. ~McASPRxEnable(SOC_MCASP_0_CTRL_REGS);+ J( r7 F/ V4 B; r+ u
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
- R2 S; u3 @# M; ^}

+ F" I* |0 W; g( q
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
5 ]4 {% n+ C" L2 c% A





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