嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
0 Y3 L7 i+ O5 A* i3 v* V3 Tinput mcasp_ahclkx,
# q5 A. q. I8 h' f# V  o2 [" I8 Z; tinput mcasp_aclkx,
: D0 x" @7 }+ T# [input axr0,
( \/ O, s+ Q5 w2 q9 B; s% ~! Y# d. E8 x
output mcasp_afsr,; y! s) h3 }' ]4 Q/ G0 \" H# L7 J. W
output mcasp_ahclkr,
- D4 B6 i- N  r- [output mcasp_aclkr,
4 {; s) y0 f7 Q- c" soutput axr1,4 d6 ]4 w) S6 J
assign mcasp_afsr = mcasp_afsx;3 F' m) a; [" [# r6 [5 Y
assign mcasp_aclkr = mcasp_aclkx;4 t* y! j% l$ i: _: o5 r' c7 D6 O
assign mcasp_ahclkr = mcasp_ahclkx;- ~# z8 n( ~& T* P1 l( O
assign axr1 = axr0;
; _( c+ W+ C$ T/ u- n

! `. q( K& Z  T! T1 M
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
3 F% [# _8 y1 q; ~3 A7 F6 ^* ]
static void McASPI2SConfigure(void)
6 e( w7 x; S1 p5 F+ ?, X$ J{
. c* _& p) Q, _* mMcASPRxReset(SOC_MCASP_0_CTRL_REGS);& x0 @' L9 S: z/ E
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */  }+ Y7 D1 ^+ g7 U
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
3 m/ P( i; \- N% ZMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
/ S9 t& \6 S$ S8 K: i5 nMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,  w8 s  o2 o+ n9 U
MCASP_RX_MODE_DMA);! |; ~0 H! ^3 E' Y4 v! G+ ~0 A
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
* S! |# O# P4 T! p: D1 rMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
( ^9 ~: y" A) M. M6 e/ `McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ( ?$ Z) c) x. U/ g* D
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
  W3 {5 C: ?( m9 _2 I; T2 G9 _  @McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
  [) e- p; W9 O: \* F) nMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */6 y5 Y& B5 t' Q  W! H% V8 c, u- U
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);0 O4 K3 l1 |, J" l$ ]4 w& N8 O* g
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
' y3 C7 F& `3 r9 |+ eMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
6 A, I4 Y' y- i7 j3 ^0x00, 0xFF);
/* configure the clock for transmitter *// h* J& m! u% K  g/ R7 z, H* b
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);, K* H, m! l7 B# `" b
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 8 ?. J$ i/ i, h7 X' V1 v+ F& Q' n
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,- w4 B4 x& F- k- e" B
0x00, 0xFF);" h5 k/ R- p6 ]
" @+ C: O' C/ }" R0 Y% ]5 e
/* Enable synchronization of RX and TX sections */
5 r& |6 g6 e* _# s1 GMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
! r/ m: c2 U# g8 u5 ZMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);6 e6 V2 ]  y8 ~! I' K% k# z! J
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*$ K1 s+ i' N9 s) j0 N; z# Q) |
** Set the serializers, Currently only one serializer is set as
5 u& V& w+ f1 ~9 X4 u  y** transmitter and one serializer as receiver.
  A5 B, Y# v: \! o( U# x*/
- I* V$ j* ]8 D, y% _* JMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
  V+ f: v( G2 n4 _McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
* y. n: ?. C/ Z* Y( e+ z** Configure the McASP pins $ Z; T. |% T3 J# f" Y. e
** Input - Frame Sync, Clock and Serializer Rx% d3 I% {# K" H/ S4 U3 ~
** Output - Serializer Tx is connected to the input of the codec
6 M" o7 K8 {% Z; M; _*/8 x- s7 O. c$ N2 i( [9 d$ l
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);4 _2 M' p/ f' }/ H
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));7 {- d$ r# @5 ?
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX8 l/ f  x4 `' u+ g
| MCASP_PIN_ACLKX
" p8 b8 ?  O! ^9 R0 k) ?* }/ H7 v| MCASP_PIN_AHCLKX
& B: l! U( g1 r5 g| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
4 D% |" E  @5 }/ l- AMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
, H" k: B: C' x7 @# B| MCASP_TX_CLKFAIL 8 D  B/ D' y5 ^% {- P
| MCASP_TX_SYNCERROR
& c" x% d5 V; C) J8 c! q9 t| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
4 Q! t8 I( ?4 r7 X| MCASP_RX_CLKFAIL* Q) k4 X2 P2 a2 @4 t
| MCASP_RX_SYNCERROR
/ \7 ~: R1 I% V" M| MCASP_RX_OVERRUN);
0 @. O3 ]5 _6 H}
static void I2SDataTxRxActivate(void)
, o& X3 o; b7 U# n" ?! J{
) h/ B1 k7 e+ Y0 s/* Start the clocks */! E+ d$ M/ P6 \8 e; b9 h
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);) r) g7 c; }7 ~' l3 X% P+ Q1 \' ^
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */+ w! C* a& T  c+ W3 D
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
* l6 g- w$ J* T$ UEDMA3_TRIG_MODE_EVENT);. `# |. X3 G2 f& \' _/ n
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 3 i* p2 D& w6 P. p7 m
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
4 S/ W0 o* K8 G1 }McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);9 W& ^1 Y3 n4 [  `' {7 G6 s
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
4 i/ h0 c+ Y1 q, D: `while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */) E/ S1 C# l9 q1 h8 g
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
5 J' W5 K( E  ]" A# `McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
6 s0 @7 a  E( H9 @}
6 k: z/ G7 D& q& w- B/ s$ K5 i
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

- ^0 @# L* Y6 u+ H9 H& ?4 A0 O




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