嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,; i* h4 V4 H; G  l( H
input mcasp_ahclkx,
4 Y) Y9 e4 Y* E: R5 }5 L! Zinput mcasp_aclkx,
/ [# A1 ^6 h" c2 v$ |& N& d- Linput axr0,
6 A) [  O$ D+ _+ Y- x3 r: F- W8 A& r7 a( b* \
output mcasp_afsr,* o* ~2 [3 E2 X: Z  |
output mcasp_ahclkr,
# n  _: X; r0 ~$ |! B8 T, woutput mcasp_aclkr,3 }8 t! F/ m/ \  l
output axr1,
8 W! c' v- \9 k0 ]; Q
assign mcasp_afsr = mcasp_afsx;
7 V) `/ m- w5 O' O& X: V! Aassign mcasp_aclkr = mcasp_aclkx;* q+ U6 D- a2 k( n# N$ T; H
assign mcasp_ahclkr = mcasp_ahclkx;
. V0 s. C- @/ q) k3 _* f# n- Wassign axr1 = axr0;
5 t6 b. |9 k  b0 t3 [6 _

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

# Z: y1 P; t, l# ?
static void McASPI2SConfigure(void)) n/ T/ o/ m, `, M4 p' R" @
{
9 y" `2 R9 b) A( q1 f  ^McASPRxReset(SOC_MCASP_0_CTRL_REGS);
, c+ y- i0 l5 r/ KMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */% T4 X$ ]" \1 h5 q9 w. c
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);8 A) m- f1 {/ y/ {" d, k( x- Q% P
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
" C+ i; u, y3 I; Z- d& H3 x3 mMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,3 S) D  a  r' A: e; y6 Q. N
MCASP_RX_MODE_DMA);- r/ p# Y1 I4 n9 I' [
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
$ q# ]' D+ m4 U3 a- j& o. kMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
# ?- ?+ w9 r* ]# P. ~McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 7 w  ^) ]- u8 {0 x2 S3 F( |
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);; a$ c) u" m6 {  n7 y2 F- _* G
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
5 Q5 ?# K  ]% J3 A! @; }MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
, t9 g$ Q5 X/ K$ p% G9 M2 U( e7 yMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
6 \# Y  _, p* J+ X3 p: {McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); & p# ^. c: |% Q# `$ O7 N  k& J
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
; D0 j! E' i: X4 h' L+ ?* `0x00, 0xFF);
/* configure the clock for transmitter */( U/ |4 F* F! {; B
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
) q( H% Q% j$ H& Y3 b5 zMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ) i* U; d1 V$ k% i6 ?/ C! J
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,- N6 ~4 ?# o+ Q( F5 E* i
0x00, 0xFF);
" z8 [: {* y# A  _& n6 I$ q
7 y0 `  v& }; T; W1 W2 ~/* Enable synchronization of RX and TX sections */
, v5 t1 P' y1 b* k! aMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */- q) b, p4 w! f+ R2 r
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
' r! V5 Y- W$ M. O2 Q6 O% ^% `! rMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*# G& z. w2 M6 F5 W
** Set the serializers, Currently only one serializer is set as( \7 G! p% J; B2 M- f
** transmitter and one serializer as receiver.
4 Z; y; {, D9 x8 }. {*/  ]; ~$ j0 A! J
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);: {  R, }: X' [' |7 ?+ p  e+ D& _
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
0 c+ d7 h6 T- R, }6 Y** Configure the McASP pins / A# K/ E6 \3 C& }- x
** Input - Frame Sync, Clock and Serializer Rx
+ A% q' u( v* j% c** Output - Serializer Tx is connected to the input of the codec
# I4 Q: a- F4 F& a3 G! J*/
3 W" \' `$ x+ G! h% e+ d) U, D  _McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
( S5 k2 p3 r, ]( U, v4 b- OMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
& L; p; N- G; D9 o8 YMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
% |& O% f! m2 \| MCASP_PIN_ACLKX
- E' o5 K) _# ^: b* `2 ]| MCASP_PIN_AHCLKX. x- e8 e2 T, D) k8 T) g% M1 v
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */: f8 x4 n# h6 \, Q  F& f
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ( k) q: u+ n0 I8 T0 U
| MCASP_TX_CLKFAIL + s/ o2 a9 D4 v( G. \
| MCASP_TX_SYNCERROR
: [9 u+ Q; ^8 Y% c( B| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
3 K2 v8 v; O4 q* ^! {# w0 j4 G9 M  u| MCASP_RX_CLKFAIL
$ Z+ Z+ z% H' H* _| MCASP_RX_SYNCERROR 9 _! G5 f0 p6 m  i, \4 P* z( v
| MCASP_RX_OVERRUN);- {) [% u  ~. z3 u+ n% i
}
static void I2SDataTxRxActivate(void)' N% O7 c3 l4 q4 g# U2 L$ {$ [2 |' f
{
* p. r0 l; n5 H4 X- o! o9 D/* Start the clocks */. _1 Z0 o7 X- X. i, V
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);( V! X) V9 ?* w  Q3 z% \
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
1 o) b7 G  B, E; B) c* MEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,' ]/ \, n, w" b& p- F
EDMA3_TRIG_MODE_EVENT);
# e2 u$ R# m+ X! Y; PEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
$ _0 O, u& R( `3 x" L, Y9 i# jEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */& o- C5 g+ O1 C
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
: H( S8 D& {; z3 nMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
% T4 n% T3 L! l' o6 O* S% j4 K; iwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
) w2 v; g- X7 T2 [" s* ~7 [: ~McASPRxEnable(SOC_MCASP_0_CTRL_REGS);- Q& G1 g  G0 }3 u  X2 O
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
1 T0 `  B) g8 Q}
* [1 u( W0 j2 g, p5 \* G) P
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

# s0 ~& U' @" N) y7 h$ L+ y# P




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