嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
* S8 m5 X8 Q- B1 Yinput mcasp_ahclkx,
* C9 V$ g5 {% e& f4 U% F+ qinput mcasp_aclkx,2 _: f0 m& J8 [7 g: a
input axr0,
6 Y- q6 N9 [! |0 l* A1 l# k6 w* e3 R8 |
output mcasp_afsr,. w( P/ }* U0 g+ f5 W
output mcasp_ahclkr,
: ?* U1 |; `1 joutput mcasp_aclkr,
( Y" c# }, m, h* N1 moutput axr1,) }0 ]; Y; \( f- [3 ?: O+ n
assign mcasp_afsr = mcasp_afsx;* @5 u8 P" t6 |7 U# t
assign mcasp_aclkr = mcasp_aclkx;  |' z1 k; W# w& T  J
assign mcasp_ahclkr = mcasp_ahclkx;# L% y6 O' g% N3 \
assign axr1 = axr0;

4 m% \7 ?% b/ d
6 D( d! w* |3 |# t8 E9 z' H
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

" Y5 F# O* }, z, \" {& q
static void McASPI2SConfigure(void)
3 \2 i6 t5 V2 M: ?1 |{
3 b# Y- u8 t0 jMcASPRxReset(SOC_MCASP_0_CTRL_REGS);( e% z5 c8 L- A+ @# l) H
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
4 e0 ~4 x! {  k9 P5 aMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);/ O' d$ u9 t+ R
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
: t( U3 b; V; Y6 [McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
8 k5 ^6 l2 Y4 `* E3 d- O. i0 ~MCASP_RX_MODE_DMA);
0 A; p' g  Y) L8 ~* CMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
# o) V$ T6 G  u( V/ gMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
4 ]& n( c& L/ |: S0 P" s; v( LMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
: B) l: L7 S  U. T% p0 gMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);! c% v- m  L+ z4 W5 B) B# Y" p# R" \
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
  E' K  _- o; y/ GMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */5 o( r% j1 y8 o' Q2 J# b2 }
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);  u$ k* l$ R9 S9 R6 [$ }! H1 \+ p
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 2 H, e; g! b9 R
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
2 @! Y4 L6 |' ]; {0x00, 0xFF);
/* configure the clock for transmitter */
1 e2 V2 X1 W- a$ k  C9 j) p0 T& PMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
) s3 @: G# U4 A' o* o' v/ OMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); * j3 p8 {, [2 ?4 H) X& T5 d
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,! B! D4 D( G- Z: D  g
0x00, 0xFF);- O2 U/ }$ |( _9 \8 D( H
; f" p9 `( }, ^6 m
/* Enable synchronization of RX and TX sections */ * _* Z6 H, S& @2 B# w% v8 D
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */' M' S2 o# s/ _2 {2 ^5 W" I
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
, T) _0 V5 c  R( W, a6 a, u% ~McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
: E, w( w& V/ {5 D% @, g** Set the serializers, Currently only one serializer is set as1 w* a, w  g# }  i$ X" g) }
** transmitter and one serializer as receiver.
, J8 S0 U: z6 F8 b*/
3 v: _9 G+ ]" VMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);0 ^# g! `# p/ K4 x
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*0 K' z3 Y; Y5 ~% F) s7 q; w
** Configure the McASP pins
2 p! y1 n  g; K6 [6 P** Input - Frame Sync, Clock and Serializer Rx
$ X, W  s$ l" E( P0 c** Output - Serializer Tx is connected to the input of the codec
8 W9 R* F1 p; L8 H*/* U5 T9 L2 z' a+ o6 p
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);" O& y/ u" G5 @
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
5 B; B5 @( i- {9 [) z. Z' uMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
9 H$ o/ e; \" O7 I4 v! ?| MCASP_PIN_ACLKX
" ?9 B3 m1 Q3 P' o| MCASP_PIN_AHCLKX9 S. c9 d. k$ y" C5 t! A8 s
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */2 g( g: R* n: i' Y4 W) X) T
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
6 O, o% \6 @4 p9 j| MCASP_TX_CLKFAIL
  \! n" e" @& K- O$ ]| MCASP_TX_SYNCERROR
4 F1 Z2 r1 X5 {# Z) U| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
; j! P$ k, _/ R8 ]3 j8 a| MCASP_RX_CLKFAIL
9 P# {( `, Z* v5 G" F; A| MCASP_RX_SYNCERROR
! [) u% h6 Z$ _6 u& L* v! Q- J| MCASP_RX_OVERRUN);
3 J$ r. d$ I5 j  ?8 p}
static void I2SDataTxRxActivate(void)
1 Y; x9 r# u6 M* H! D1 v{
5 y3 f1 i/ B& d- X; R+ ^- R/* Start the clocks */) [' T) Q3 n' l& ?6 H( D: _
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
( e  j# E- E1 p5 Y: N% x8 p( jMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
- d+ H+ e* ^! T* y. _/ E3 NEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
6 M# _" A1 h2 {* ~EDMA3_TRIG_MODE_EVENT);. }3 s9 G/ Q* F
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
; w( Q: f' u0 D/ L7 n* @/ @5 SEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */6 x% x" U9 T5 s0 R5 O2 z. j
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
1 K8 S+ q4 e- D; dMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */7 d9 [/ c0 F% ?7 i! l, U
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */& \! _9 |/ }2 a* V" \
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);+ C9 W1 \0 `+ k
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
  K3 G, Y( q" D6 l! c}
+ c* b. O( j7 ?5 e4 k
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

5 E2 ~4 e) f5 V+ a




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