嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
! y1 x" ~) e3 o: }3 `8 h' kinput mcasp_ahclkx,
3 P/ G' ?. x6 S+ @# q; sinput mcasp_aclkx,
' t5 L7 a) w  e" T6 winput axr0,2 f9 w' T9 X5 T1 B2 c
& _7 I0 t* N7 g0 f& i8 m' s
output mcasp_afsr," G7 l: H& w% t+ M9 f* I
output mcasp_ahclkr,, t3 D) Q7 m' g; J# Y3 ^; N7 \# W
output mcasp_aclkr,/ y% \  t8 J3 G
output axr1,7 L1 a2 x; _# F' P/ c
assign mcasp_afsr = mcasp_afsx;
1 `) G$ d# ?1 d! {- ~. ~2 q, Q8 R' massign mcasp_aclkr = mcasp_aclkx;/ m( `! k  R5 I: k8 P! r2 t
assign mcasp_ahclkr = mcasp_ahclkx;0 o$ x5 T( ?$ W2 X* Y; K) p
assign axr1 = axr0;

: r, t  a' e& J  S1 V
1 e; ~7 g3 c9 z  S- G. l) N
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

4 F4 ?/ @3 \- r! L  i4 D
static void McASPI2SConfigure(void)4 m# l& w. K) n0 y+ L: h& x0 c
{
8 |, v* Y4 C6 o" rMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
; ~8 V% d( G$ ]/ z1 O& yMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
( B, S5 _7 U: _( H- [0 zMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);* N% _1 v5 b) i6 I( P( M
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */# m4 m4 Z- Z% d' d% {
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,; P, C: T4 C: |# q$ q
MCASP_RX_MODE_DMA);
% o5 Q  D4 f& [; [McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,, q, V5 G3 z3 C+ ?$ D+ s% o
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */  E2 e8 |( m/ g; y
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
. n$ X0 Y; W1 ]: G9 Z! k$ d9 UMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);3 ]* W: n8 R! \  l
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 9 l3 j0 t( y/ A- k* Q: X
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
( p* ~( @+ O- Q: R1 B5 D0 W3 HMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);, b' K: F5 L6 [! ~& |) M! h# P$ `
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
3 F1 G5 b  B  `& n" _$ QMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
! \7 Z4 L# J. m8 W7 _0x00, 0xFF);
/* configure the clock for transmitter */
# K* k9 f. O- M: t5 ?! ?; s+ CMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
9 @1 `  q: \8 ~+ f& O3 f. LMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
3 H7 i0 ?( j% g% AMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
: |8 }- D- H) i) A0x00, 0xFF);
$ @9 ^$ e9 ^1 {* @! `7 _  m0 x
! E  @. ?- h5 O( A2 q2 i$ U/* Enable synchronization of RX and TX sections */
! q- W- {% b0 D" `McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
3 Q0 F8 x. p# O5 p) q2 _McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);) C! V' _3 X: v7 N( r+ r
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*7 M1 k  ]% B% w
** Set the serializers, Currently only one serializer is set as: r8 Q- A0 j! J! G) l  Y
** transmitter and one serializer as receiver." _. ?/ v% A0 f# S9 Y" w7 t3 {! D
*/
% J* _4 w) X  M6 P/ N% @9 dMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);/ m( F9 K# n  b! v. c- i' V
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*# V) `4 {5 E/ f; m, i% |
** Configure the McASP pins * }  \, N9 e  p. c
** Input - Frame Sync, Clock and Serializer Rx
$ U. R+ W( F) o4 {** Output - Serializer Tx is connected to the input of the codec . l$ a2 _7 z7 c  x0 o9 y
*/; d6 c/ W2 e! @) J# T- `) Q; D# U" E
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
: X! H# L" G* p  OMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
+ d8 Y0 }6 U: @% ^McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX5 V3 ~; }1 G* j; k) ~& W
| MCASP_PIN_ACLKX( s, [. c9 e* x. A; X( I) K/ I
| MCASP_PIN_AHCLKX# x) N" c3 Q* _; P" {, E  o
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */* x, u( I# x; E- `  n& _$ H
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR " m' `" e5 n2 V7 G
| MCASP_TX_CLKFAIL + I# O0 A/ S" X+ F9 s
| MCASP_TX_SYNCERROR3 P5 U5 b/ q- ?; Y* Y0 K
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
1 i% |+ d- ?: l3 M| MCASP_RX_CLKFAIL
2 C5 _8 [) Y, u, M* r$ n| MCASP_RX_SYNCERROR : n8 r& w* |& u& c0 K
| MCASP_RX_OVERRUN);
& B8 P/ Q+ o. n}
static void I2SDataTxRxActivate(void)- s/ D4 T  R& ?9 ~6 u# ~3 {
{
6 m1 E1 ?% J' f7 m1 Y# A$ s4 _/* Start the clocks */' z! B8 T3 ]  `( q" S
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);$ I$ G6 @# z/ K" i6 g$ E) _
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */; A" X+ e" g! s5 W, Q
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,! E8 r2 \  V) E  B
EDMA3_TRIG_MODE_EVENT);
& O# C! `0 d( y+ F# k- t) s* X: cEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ! S- m( c5 J6 G1 U. J
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
: ]. n: q8 I( I& VMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
) I5 U3 s4 r3 l0 f+ XMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */6 t/ w4 p4 E5 B. X- `* X
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */6 P. @+ O. s* ]& b& Q
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);8 v6 U3 G( M; L
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);3 {3 G1 w# |" ^9 c. O7 s' Y2 E
}

, k) @4 Z) O' j) P# W6 s
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
% h4 T1 x7 \* {





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