嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,9 |4 r7 q( h( `% z
input mcasp_ahclkx,
* l6 B$ }) {% z4 g- j" S% |input mcasp_aclkx,
' w& t  E% o. c7 finput axr0,, o* c2 n0 n; M3 K- ?3 Z& h# e
/ w3 ?5 x' @& P6 D+ C% F* F
output mcasp_afsr,
: Q9 _+ A8 c( H" A+ n, _output mcasp_ahclkr,$ u3 B* ^1 z. @$ ?4 ~% o: Z0 [
output mcasp_aclkr,7 _3 h! I$ r# k9 a% _
output axr1,6 |* J5 m  X% l# L- S8 n; Y
assign mcasp_afsr = mcasp_afsx;
' g: R6 A+ ^) |assign mcasp_aclkr = mcasp_aclkx;
# h( l: I! M$ s: Xassign mcasp_ahclkr = mcasp_ahclkx;
' w) a8 K2 Y, m/ N0 Uassign axr1 = axr0;
2 a# S5 {3 h/ i' Y

9 m9 m3 Y4 g+ _% \1 S+ ~2 g1 y
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
  j% s5 \2 R; c# Q3 R  V' Q
static void McASPI2SConfigure(void)& Y7 j/ r5 y( G# h: `
{5 }& d2 b& g9 k4 N. S7 R
McASPRxReset(SOC_MCASP_0_CTRL_REGS);* W: y; d- j* ]2 A; }: \' l
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
4 ?( @$ b& B  M- m  m. ]: hMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);' [" T0 t: L: i/ b2 b( @
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
: J0 p5 }1 s& Z1 [8 b1 X3 ZMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
* j3 i  N& R: d5 f3 c, d/ v7 |, tMCASP_RX_MODE_DMA);" o" b! X: i% O$ x6 q: ]1 b9 f; o
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
8 u4 q& t: F- Q' eMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */9 R, r- t, \# z8 q
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 5 C5 }% Z2 H' l6 h, p; {+ R
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);5 @, z9 F- z. }% l' U: |3 k
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
$ T( w6 p! B7 CMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
3 _4 U  W" @: _! \  D5 X* M8 `McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
2 [+ c% V/ O* A( P3 e" E8 t/ TMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 2 s' q6 g6 u  o3 u
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
6 x2 @, V! m3 s$ D3 A# ]0x00, 0xFF);
/* configure the clock for transmitter */
! Y8 S- Q5 u4 h4 N+ o5 wMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
8 y' w5 x# e* sMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); , }  t# N4 m! c- x, c) M8 x
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
- Y; m# B! p$ s/ z* R& A2 g! q0x00, 0xFF);
, J' O' ^7 s$ \9 c, @; y0 `  ]; K, t* U
/* Enable synchronization of RX and TX sections */
0 H' `; J8 N) y. NMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */6 R6 @9 g. o6 ~: F2 J8 R) V
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
" O& h4 P" W, V- @! `: zMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
# L) e" B; i5 T1 U  F** Set the serializers, Currently only one serializer is set as! t1 ]& W- h, V
** transmitter and one serializer as receiver.7 n: j/ C8 I% ^
*/
/ O9 B% _9 |  t, KMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
; W) W1 m% ~$ \' W) P$ pMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*/ q$ N% j, e9 f0 I* _3 x. M' e
** Configure the McASP pins
4 e: @# K7 p  b0 j** Input - Frame Sync, Clock and Serializer Rx
. g  @% k4 k$ ^% H4 J* E+ G$ n: T. ^9 a: S** Output - Serializer Tx is connected to the input of the codec ) m, A5 \) [4 ]( e$ K
*/: N7 P- l8 e& F/ i
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);2 @8 Z/ w# _  a- m3 e4 o
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
% [0 Z0 ?( l- w7 BMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX" U/ ]+ Z+ b' d0 o2 S' |! a6 \
| MCASP_PIN_ACLKX
" p+ w8 r/ p( d| MCASP_PIN_AHCLKX; Q( I2 _+ Y) M! W- `
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */9 `: w% v7 o7 L1 a& e% U5 T
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
  c: a% h+ B% X8 j" F: Q8 R| MCASP_TX_CLKFAIL
" w# S7 q( W( P) w1 ]) q| MCASP_TX_SYNCERROR; x- U: L1 Y3 m2 G: x. ]
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 0 g& V+ c& j2 W0 A; j/ h
| MCASP_RX_CLKFAIL- S9 N& H3 o! Y/ ~) S' a) M
| MCASP_RX_SYNCERROR
8 E0 O6 B$ D+ \. A8 Y| MCASP_RX_OVERRUN);
) O2 n" \/ b$ F* d}
static void I2SDataTxRxActivate(void). w4 j$ r( p4 j  j) s
{
$ D" v) U! V+ _; l& n! R# y. f1 D/* Start the clocks */1 Y. L$ S! ?8 V5 P/ h: L
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
9 {6 A2 S7 b! x. J! ^McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
4 n- o3 _; E4 c6 I$ ]" |1 iEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
# R5 U. O& j7 k4 TEDMA3_TRIG_MODE_EVENT);
7 [5 n; e. d3 pEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 1 p& `- H1 B$ O" [
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */+ Z4 }2 {5 a* }* i; o$ R6 ~
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
) W3 X. h7 I6 r( w$ u5 dMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
* t& c2 t7 i1 `while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */- t! ]& a2 Q  _2 B  L
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);  H1 \9 F; x% Y7 D
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);7 H8 Q3 |0 \4 Y9 q  a
}
6 v- }4 e* {( O8 r
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
+ r7 {2 P6 R  Y3 X6 @  Q0 B





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