嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
$ R5 ]& K4 @; f  r( r0 n* Cinput mcasp_ahclkx,
% ^# E0 M# O4 K% [) @" Linput mcasp_aclkx,
/ H2 K/ D6 Z; X4 E. Dinput axr0,& Y+ R/ C2 E3 N% U# k1 q
1 D* j! |. p* M" S( T9 Z+ n3 b
output mcasp_afsr,. M2 }. [, D+ q9 G1 U1 i% o* t
output mcasp_ahclkr,
  C2 z' i0 Z1 h. Poutput mcasp_aclkr,9 j# u+ ^7 m& h. o, @
output axr1,+ I) g( r6 Q* R) T( |
assign mcasp_afsr = mcasp_afsx;4 d2 G$ n  t* g/ L
assign mcasp_aclkr = mcasp_aclkx;
0 h; K" `8 t9 |) \+ _assign mcasp_ahclkr = mcasp_ahclkx;
3 k$ B. n+ \0 H0 lassign axr1 = axr0;
+ E9 U% [& n1 H& n8 {

3 `4 m& q5 i$ M- R) R7 ~
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
5 f5 J) R1 R. a, W$ J
static void McASPI2SConfigure(void)
, y' q3 w  v# ]" o; r% \7 x{* g, {. y) o! i3 {3 h$ G' r4 x: l& ]/ x
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
( \  V$ k" b% H8 Z9 I) LMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
, F) q0 [* C- x$ N6 z' gMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
5 U4 _7 C2 U& M. ^% v" ?1 I; UMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
- Q7 `8 C1 X  _  x. T' N* zMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
8 G9 v; N" W/ I; n0 y) N$ k  UMCASP_RX_MODE_DMA);1 W) ]: g3 ?- _" B) Q( R; }
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,7 k, q5 r; D: T# {+ N4 F1 y
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */8 e7 Q) E# g7 W8 m+ b
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
; `6 h2 g1 ]& s& h' CMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);5 N+ k& ?! ~5 v( i9 B
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
$ q! m, M. K; k* _. v) d4 CMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
5 F! Z+ L) d- D8 I9 K1 PMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);+ ~3 t* w# ^$ i1 D
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); , |/ H' R  Y5 I# p
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,4 ?" \' Y9 \4 `0 ]' C
0x00, 0xFF);
/* configure the clock for transmitter */
+ y6 Y7 e- G; V  R& a  p) X6 bMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
4 ?( b) l8 j- M$ {1 o0 C# sMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
  N9 }! e8 V, |" eMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
7 r' |/ j. L  s$ k3 }1 {0x00, 0xFF);
  t2 e( o. ^/ l0 t# u- z! v
) W3 d" z# `2 N4 t% m- C( `/* Enable synchronization of RX and TX sections */
3 A9 @% g( F7 \/ p% F! y( O. R' yMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */3 g' F# T0 |# s
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
; f: d3 F- J1 [/ GMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
0 F. l7 C: w# h$ y6 I" K** Set the serializers, Currently only one serializer is set as% J4 j/ A1 G+ o0 J( G# k
** transmitter and one serializer as receiver.
$ V8 F4 M1 V* q, v*/9 B% j! i# Q* O
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);8 E9 f7 L8 X- F8 I4 A  w
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
! ^: o+ Z5 k/ i3 l  I** Configure the McASP pins
5 h: P9 k8 P2 Z/ B/ r** Input - Frame Sync, Clock and Serializer Rx. M! |! J; g. K+ Q  U& B8 H" F
** Output - Serializer Tx is connected to the input of the codec * ^8 F3 b  }% H/ F( b9 A
*/
9 X- |; |! B7 fMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
2 F7 R0 G0 K5 ^% c1 R& QMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));2 c8 n# Z. @! I4 N$ W6 S! {+ w% Q" x
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
6 I+ T* j- W, P" A4 Y# M| MCASP_PIN_ACLKX
9 Z0 ~1 G; c5 l  g! I7 K+ N| MCASP_PIN_AHCLKX. b" p% M5 a( U8 Y- t1 |
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
( a5 g5 k7 X$ {  `McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 2 q; n2 E3 t' J6 E0 l' c
| MCASP_TX_CLKFAIL 6 L' O& |6 k+ D( x8 k: K, @6 A
| MCASP_TX_SYNCERROR
* q% |: T. j8 S+ M7 |# q  l: R| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR % l, O+ @0 C8 f/ k$ N
| MCASP_RX_CLKFAIL
! |1 u, J9 l5 d. w| MCASP_RX_SYNCERROR 8 [* C' w( J1 u* B; R
| MCASP_RX_OVERRUN);0 y* ^& ?  k9 m8 O! a% o8 g
}
static void I2SDataTxRxActivate(void)
* L1 Y- z! s5 `% N! h, S& \6 O{
, b' B4 B( u3 W! H( d# S$ {/* Start the clocks */
2 E5 Y$ P' d& X" ^! i, f# FMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);$ q4 \/ e3 n7 h1 S
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
+ j9 p1 n" A) y/ w% V0 xEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,9 ~0 h; F& E+ y% l8 d7 h
EDMA3_TRIG_MODE_EVENT);
5 L* e: r/ B  JEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
5 G5 ~# w9 ]( HEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */& s& J& S4 R# i) q3 m# m: r# E
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);, H' ^& [; e" t" i& i4 `
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */  F# c" m& R1 P- }
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
$ l0 s' O: {8 {McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
2 i2 F1 ?: A# `) h3 v0 OMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
5 f( i: z" h2 o2 k: Y}

1 w0 m$ t* M  I/ c
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
+ U# a  J9 Z5 d2 p





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