嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
! H6 _- y6 M: L3 t% oinput mcasp_ahclkx,
, n+ e" K7 r5 m. l8 C3 @4 Zinput mcasp_aclkx,
, ~% \! [4 ]) J+ z6 ^* linput axr0,& P) \" R) c/ ?8 a
4 x; ~+ v: {! _
output mcasp_afsr,
- |: @. ~! ]# X. F7 ~; H+ youtput mcasp_ahclkr,
# ~! t1 g  V- F! D* {' P. }  I; Zoutput mcasp_aclkr,! A7 U3 A/ W0 y6 {9 G
output axr1,$ l% K7 m/ d5 @% q
assign mcasp_afsr = mcasp_afsx;
- @6 @0 O& \7 M7 z# zassign mcasp_aclkr = mcasp_aclkx;5 [# a7 a: r1 B! j+ w& y0 q
assign mcasp_ahclkr = mcasp_ahclkx;
) Y/ N" e) W) `' ?, x, k, N6 s- |assign axr1 = axr0;

) _. {! i1 X6 P/ {- E1 A0 |& R) e1 Y. a1 w/ m  H
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

4 |1 M8 S; Y, L9 P
static void McASPI2SConfigure(void)
; r- C% B6 y9 P* s{
9 v: K% Q# ~0 g$ gMcASPRxReset(SOC_MCASP_0_CTRL_REGS);3 h! Z6 Z' i2 [: h
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */; U7 f+ R* V7 A% ^0 s# C& N5 O
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
  |# v' E; T+ aMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */' {& a% F8 ~5 l
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
* r3 [% R- m* x( |MCASP_RX_MODE_DMA);
/ e, b1 a: a/ h/ c; P9 }McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
$ h% M7 M6 l0 L( r* n6 f1 v8 rMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
7 ?% b# r: V' y7 f1 A3 [* Z0 JMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
2 J4 J  C9 F& K* k/ ]+ ]! zMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
+ G3 m; V- |$ G7 T3 z# F7 \McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
2 y5 Z* Y0 m* Z. `1 _MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
: [, e$ M7 v9 ~# [7 S0 l/ ^/ a2 vMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);* U4 C* i) ~2 }1 c
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 7 b& D, w% F- x4 I! M. _
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
1 U0 Z! p3 e" V, p4 ~+ w0x00, 0xFF);
/* configure the clock for transmitter */
+ T3 z5 M7 F5 a6 `/ m) wMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);5 n* a. B' W" O4 I
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); - ]& l2 E4 h1 m" Y5 z( m
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,: Z& P+ T* t8 G3 n
0x00, 0xFF);+ R$ y$ y0 j# O9 d
: [# e& w( e& Z2 W( f
/* Enable synchronization of RX and TX sections */ , ?  _3 w7 {8 C8 B3 F% B
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
# n. Q/ r8 ]: |McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
6 A: n1 [: F+ R& b. pMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*! r* C; F/ t6 W
** Set the serializers, Currently only one serializer is set as" V, g7 Y* r1 _) W# n& _
** transmitter and one serializer as receiver.$ q. T( C2 v5 Z& O2 E1 @' h
*/2 n9 Z0 c7 ?' ?' l4 e/ o: }) m
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);! q, U5 d, l7 d. C) X* `
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
' U$ ~' b" a$ d7 J) P8 E/ f& A2 A** Configure the McASP pins
% _5 ?0 x* J% T+ H** Input - Frame Sync, Clock and Serializer Rx  Z8 p) `9 {3 }8 v
** Output - Serializer Tx is connected to the input of the codec 4 D3 F7 C+ B7 _
*/
/ N  |) ?5 Y: N& U+ KMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
5 m( q2 A* j( w+ T: W! g5 ^McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));- s# }! n( {" a4 h2 K
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX. O( P/ e) D. Z* t, U
| MCASP_PIN_ACLKX
# i' L3 B, A7 B1 y- R| MCASP_PIN_AHCLKX
3 S; a6 a4 C+ k5 M/ t4 f| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */6 _0 S8 ?  ?8 Y6 K& ~+ ?: X; i3 l9 b
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ! T4 Q- |! [4 S8 R# ?
| MCASP_TX_CLKFAIL
* F+ A; |. c& M) ~& ~/ {| MCASP_TX_SYNCERROR
' N# n3 `1 d% D% G, ^0 o| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
% g$ ]& ?7 C* H; \# p) F| MCASP_RX_CLKFAIL
2 I! G9 e4 A( D2 K, C' A| MCASP_RX_SYNCERROR $ B6 X7 }( {/ {7 z
| MCASP_RX_OVERRUN);
5 H% ]& ?" V5 n' a  B" v}
static void I2SDataTxRxActivate(void)
6 L. Y. w4 d& R1 b+ q. k4 d{
1 @) \" v/ R" e$ a: ^+ i/* Start the clocks */" d) O! \! x0 n1 W
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
+ R8 ]; p) ?& U4 v6 TMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
2 G& g& j6 T# S% H. O1 e- UEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
6 y4 o( `4 o; s7 a2 X2 q/ fEDMA3_TRIG_MODE_EVENT);& D: s& s3 p/ }0 M5 C: R( k6 f
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,   f! }0 d! x" G
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
2 \$ C( b+ W( c( C2 a: bMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);$ [, u2 o- `- B# l, `3 r8 ^
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
- l- o0 y: ?4 K2 zwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */6 h7 e% |+ P. ?. g& z
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
, C' I* ~1 S0 J$ p: ]6 rMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);0 ?+ w+ C) J' A* ~9 q5 X
}

6 _. H( b/ I1 p9 j
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
* O/ h3 m5 s/ ~4 Q





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