嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx," b# ]2 `) X2 ^6 K
input mcasp_ahclkx,
- H" d. ?. f9 Y# C- b. J3 Q& _2 S* }input mcasp_aclkx,
2 V& u5 j8 C  r% i0 Ninput axr0,
  L* t. w# ~; z8 ]6 K" b- e( Q7 R4 G* O& A
output mcasp_afsr,
4 [5 l; W  D4 l/ _output mcasp_ahclkr,: n0 f+ m; A' u6 ~) M
output mcasp_aclkr,
2 e( {6 O, i9 q5 |5 Noutput axr1,
4 C/ ?1 W$ E% v
assign mcasp_afsr = mcasp_afsx;  M0 k4 ~1 f& C% T* ~( e! d( r# t
assign mcasp_aclkr = mcasp_aclkx;: a+ ~% U' U+ g7 u
assign mcasp_ahclkr = mcasp_ahclkx;; \( |' b, F; l0 \. M
assign axr1 = axr0;

1 ?8 S0 O3 E- k1 k
6 {. s0 o( X' A: P. j6 }& q' U
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
2 b% b# }* e* }. j
static void McASPI2SConfigure(void)
7 Q7 G8 k6 s' \8 O{
0 M; C- g2 v- y( U. U5 n% O6 SMcASPRxReset(SOC_MCASP_0_CTRL_REGS);, X1 p9 ?0 n$ d, F
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
0 [: x. Y3 X3 E/ A, W& z0 @2 `McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
& F/ V- `* M1 E7 z  NMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
/ ~+ Z. z, Q5 h6 ]2 {% r1 X0 FMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
/ J" t6 {8 f8 J. M  h6 z& z) rMCASP_RX_MODE_DMA);
0 F$ f) \& H! w- M. H- b: EMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
5 ]& }6 J* N: ]3 S) ~; FMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
% c! Y) d) M! h) S: Y$ Z# o8 S% vMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
0 x- x, O$ G$ q. zMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
+ n% t5 r! S/ `' }McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
# `0 L  K$ o4 ?% ]" QMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
" q& j5 A- l4 U1 Y+ T' S* \McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
  ]2 j3 O/ O3 ^McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
9 M/ a2 k2 M4 J; q+ w( Q4 qMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
4 H( v6 Z, {7 n0x00, 0xFF);
/* configure the clock for transmitter */
  q0 W4 z- V5 m/ c' f# F& b6 P( mMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);+ b' K- l" B1 \* c
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); , Q! v( h/ V% f% P$ m2 x
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,6 j- i; C# g, c6 H$ [6 b9 [
0x00, 0xFF);
& s9 ^" Q( u; f, L, o
9 R/ Z! u( P+ t/* Enable synchronization of RX and TX sections */
  `7 \5 l( ?$ R3 R6 u4 fMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */- f- |- m  ]# K( i5 J( x7 i1 p/ }
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
% E3 x7 h& T4 K0 T  s- K" FMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*8 e# a: ]8 A* a8 u6 P
** Set the serializers, Currently only one serializer is set as
( A. @% V) `. n8 l, t+ E7 Y+ ]** transmitter and one serializer as receiver.
, o4 u5 T: I) N7 O1 s& J*/& ^& h+ @- A* Y! L5 o* F6 w0 I8 ^
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);" M% K0 X* D4 G1 x- }. f# \: \- `
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*& @. d4 e& W6 S0 E
** Configure the McASP pins / d" o* ?  ]. Q% _
** Input - Frame Sync, Clock and Serializer Rx/ L9 E0 f9 l9 O$ K: K2 `9 s9 ]
** Output - Serializer Tx is connected to the input of the codec
9 g+ S4 ^/ S3 C& N- B# l6 U& s*/
0 U# a5 u" j, e, CMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
3 D( |1 y. ]0 L. m6 U$ k% bMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));) L- }3 m* T' @: r" j4 F" d
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
4 x: o  x1 Y3 c) \6 ]0 {| MCASP_PIN_ACLKX/ T# s2 T& d+ O2 |4 a) w" b
| MCASP_PIN_AHCLKX
- c0 d/ n1 f2 r' ^| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
6 D" Z" |( Q- T2 w3 c5 R& t& cMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
4 _4 n$ O1 G6 g( c6 {$ }4 n6 Y| MCASP_TX_CLKFAIL ; {; [% [+ N* O) t
| MCASP_TX_SYNCERROR
% Y# G7 {% u* k. ]3 ?/ [6 S| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR + n- @, t, n4 S, ]8 z
| MCASP_RX_CLKFAIL
' N1 T9 w8 P- c$ }- M| MCASP_RX_SYNCERROR
) q2 k' E( t/ |7 f) p+ @9 Y8 K# o& B( P| MCASP_RX_OVERRUN);
( q7 k3 t& Y2 X7 H5 e8 o! |}
static void I2SDataTxRxActivate(void)
0 E1 \2 |7 I9 h# C3 O{& M9 H8 o# x7 C: j( {7 P
/* Start the clocks */8 e3 J/ @4 c2 |) `3 V# z
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);8 d6 y# ?; H# l2 a! X( e+ F
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */. O$ W; c3 A9 t. `5 H% h% k
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
' |& X5 O7 U+ w! I! Y* }  n8 ZEDMA3_TRIG_MODE_EVENT);
7 b$ u) t8 d* @/ A- w" x7 }* bEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ; g- z5 e3 ^, d, N! K  F/ V" d' |
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
3 E$ _- j1 [0 g9 B9 _2 W+ sMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
7 @1 }, N8 z& G4 A, S, fMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
+ P' f8 i" Q4 I! ^while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
8 L5 P6 N* P6 R3 k- {McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
  a! p" i0 s' X) O+ m$ j9 x" ?0 CMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);5 r  c7 n) s) c, F  b3 E2 w4 O
}

0 q0 G, g% V5 o. B0 j
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

3 x3 Y0 b5 J' Y




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