嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
6 t# Y' Q) _, k7 q; dinput mcasp_ahclkx,! a! f( M* I2 K" Q+ h- |
input mcasp_aclkx,
7 Q. h! E* V* y7 D0 H, f" Q8 winput axr0,
! g$ _) h, v( \6 U; b3 N
) D7 W/ j+ |# p6 `: ?4 xoutput mcasp_afsr,
3 S2 ~- L" l1 s. Q1 p/ u' K7 Toutput mcasp_ahclkr,
* l6 a, [/ U3 I% l9 qoutput mcasp_aclkr,0 ~# o1 s% m* W1 G) P! X  G+ O; v1 ^
output axr1,
: F, J& @$ c, ^
assign mcasp_afsr = mcasp_afsx;
7 E! h4 k0 w& e; ~" F; S; P$ Sassign mcasp_aclkr = mcasp_aclkx;+ J' A+ b: k/ c; o! m7 r; J4 G
assign mcasp_ahclkr = mcasp_ahclkx;' y0 _4 f  I) R' f) q6 n& e7 h
assign axr1 = axr0;
- V! I8 L+ K5 B
+ p4 y' ~( ]! f+ P' I
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

" t+ Q8 ?$ Z9 A# @4 F
static void McASPI2SConfigure(void)
/ a9 t1 m( w  W2 T& ]6 Q- Z9 W% v{! |( x! D3 g, }* I4 L& G, \6 n
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
2 y1 [5 U1 U- q+ d3 }8 vMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
3 ~' [1 U: o: I: V( H/ sMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
5 i5 W. q. u& C! J- `* ?( I+ @# kMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */: O; n' Y- c- K; n: }: s
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,; p$ G+ U- X$ y" s! ]% P
MCASP_RX_MODE_DMA);
, z3 N7 V$ \% ?2 W( p  O5 kMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
& ^9 f9 F5 ^8 E/ @/ r& B# h: O/ TMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
9 v- e4 e: c( V. h' X5 ^, qMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ; R, T  p! F( G. ~. K. c6 x: V/ W" n' m
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
& q1 {- E1 q  B, a2 kMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, - |( b* J( y4 p4 }+ g$ E1 F4 D  A/ w. L
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */0 o1 b+ b5 O" h4 e& n
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);5 c3 @5 u* ~$ l/ B3 h$ e. V2 n
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); / j' B4 b0 J- F$ u% H
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
; h/ b3 {. T9 s1 z. i0x00, 0xFF);
/* configure the clock for transmitter */2 q' I, H0 ^+ P; n( ]0 E9 D
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);! a7 M" j' l. l2 X2 {: i" b
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 4 y5 D8 b9 A) D. X& ~: K
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
' I/ P# L4 j+ q$ G3 u# J0x00, 0xFF);0 [. [1 l4 N5 Y* {) `
, F0 E/ `1 I5 S. Z% C5 T
/* Enable synchronization of RX and TX sections */
/ A; B4 _0 @! l4 k8 O7 ?! X$ ^5 Q6 TMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
1 a; N, |9 l& H4 PMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
8 h+ @: p' m& y1 u' C( J5 Q8 zMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
+ _/ e6 q  B% h( d7 I** Set the serializers, Currently only one serializer is set as
4 {1 u& c1 N0 [7 L/ V4 n/ ]: a** transmitter and one serializer as receiver.
  Z+ I3 H/ p9 N5 J*/
- G1 S3 d4 ]& ?McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
9 j2 K. V! d  y* m; [McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*9 G; z5 f5 g) P8 r
** Configure the McASP pins
4 M" m6 L& [: g9 L, A  L** Input - Frame Sync, Clock and Serializer Rx9 f$ m+ ]% k' f' t# D1 y& g, G7 i3 z
** Output - Serializer Tx is connected to the input of the codec 4 Q" J. _% \( d6 K3 @
*/2 N0 x4 B) K* P
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
0 Q- d6 u- ~# H2 G9 RMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
* y& u8 z' J5 M% w+ l  b$ X6 m  gMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
9 b  k) b- W9 @( J9 v| MCASP_PIN_ACLKX( u) R( A6 C. h' |1 N* u
| MCASP_PIN_AHCLKX
. i2 I9 J# ]! z+ n. w! `4 b8 v| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */- W/ d* ]# a" W% v( W8 V( l2 i- n; c
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR   r8 k7 S& `# r, m
| MCASP_TX_CLKFAIL 1 n8 w: D# }+ {% c2 O
| MCASP_TX_SYNCERROR
2 `4 X! x" E. s" a& \& K| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
; J; I7 N  o: j| MCASP_RX_CLKFAIL
0 ]- y; n- V- ~; i/ e( m. N$ o| MCASP_RX_SYNCERROR
; X! j* B3 T9 o  O( C$ t| MCASP_RX_OVERRUN);4 t" X" G) G0 _% [
}
static void I2SDataTxRxActivate(void)
5 l' ^% }) z' k+ ^; ?{$ y/ y2 t* ~" w  i* l) x. D
/* Start the clocks */* R% n5 R- ~( ]. ~* u& t
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);" a8 L. G& c: \1 [; I& e
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
# d; Q, ~+ }+ C5 o: q4 ~& bEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
: E, p5 C$ t9 ?, HEDMA3_TRIG_MODE_EVENT);
& ~) b+ y* ~6 |5 H3 GEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, , L' m0 r* O- f5 I
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
# m+ X& j6 W  ?' [0 K! d  XMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);: i* A+ h% I5 C6 J' o- @! N# M; {
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
$ n- z# |- o: Q' p, O- }3 j3 B0 Ewhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */. V2 {" `$ G; A* u; O. r" F
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);" Q* q: e4 E" D: y$ G
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
/ a+ O2 {. z" u; D! m! r}

- F; |/ ~  w3 x# E3 y1 t6 S0 s4 g
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
' l/ k* @( R+ D. r- U





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