嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
5 U1 @; C0 l0 D5 ~: l3 j5 uinput mcasp_ahclkx," r3 C2 A% [9 j2 m
input mcasp_aclkx,
* Q; j, ]. m5 R  c5 k1 y0 T' Y% B* u5 sinput axr0,
% ^( ?0 {, z# G# z. F+ Y: A6 I2 {# z2 N$ |& L% x# o# H# [1 G5 u1 q: H
output mcasp_afsr,4 e9 w4 r! b1 o; p% c, |% K, A+ v: B
output mcasp_ahclkr,! {+ F. J. T6 {3 \; o/ f- F" d3 g
output mcasp_aclkr,% c0 K4 I9 V9 X/ r* m4 A
output axr1,
, j1 A! A" S4 l1 S0 s. L( q
assign mcasp_afsr = mcasp_afsx;
5 f& N2 a; |1 Y6 E" B4 M2 {assign mcasp_aclkr = mcasp_aclkx;9 S- b5 G* a8 U6 q
assign mcasp_ahclkr = mcasp_ahclkx;+ Q/ W6 o" r; ]$ Z7 N# B5 `" q
assign axr1 = axr0;

8 n6 d  R! l$ z4 _( d9 `% U- C
% A& N2 C( h1 C) R4 A3 Z6 y
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

& _& h8 _* H/ u" X# d( n4 k
static void McASPI2SConfigure(void)( H0 G. c' y9 p) g
{  D6 o5 W( _+ X# e. k7 t: M; {
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
  U0 \: q2 Y4 Z1 v9 p! ?McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */+ `8 ?+ B1 m" |0 U- d' E
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
& O9 Z/ t, b  o/ u2 F  S# |; A  LMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */! G0 l' m* b+ W( l& Y+ u  S
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
8 A% R1 K9 }% QMCASP_RX_MODE_DMA);1 Q# M6 [. ~5 q+ X
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
  A4 w) Q. `: c0 x  c6 L" T+ P0 CMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
0 N7 u, \2 L" X( rMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
4 \  T" i$ j( QMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);& t1 {* ]  b. P3 y
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ' U- w8 w; S( Q
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */2 E" q6 O/ a) P& ]- i# j
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
3 K$ Y7 @  r6 p& _  {! a2 d& f4 X* aMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
) {& Z4 R: |8 G* \/ bMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,8 n- O2 c2 E4 \8 J" X6 b+ Q2 A5 s
0x00, 0xFF);
/* configure the clock for transmitter */
0 c. X, f( H9 |7 Y- P$ L. ]McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);/ c# x$ B3 F% A( P) [, T2 n
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 6 Y& n' Y& @; ^# z$ U5 F$ C
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
# f+ `( i- e2 t4 d* @0x00, 0xFF);  a, P. s1 i: z/ x9 m, @$ O5 c

. {! w% a1 ^8 D/* Enable synchronization of RX and TX sections */ ' r/ i4 T# `- Q* }) F- L
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
/ ^* w( k, a4 L5 t4 GMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);, T4 B/ ?5 I- b: V! Q
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*" G3 C: k% Q+ a7 Y
** Set the serializers, Currently only one serializer is set as
3 Y. p8 j* a( W** transmitter and one serializer as receiver.( \4 g7 b$ n1 a- H* a8 }
*/
) F9 I8 Y' B& q  f) s& RMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
- }; ?: l3 |2 d/ M1 }McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
. a; `+ ~, i' {** Configure the McASP pins
% a; S1 @+ y4 Y4 Z: ^+ a6 K  B$ I4 i** Input - Frame Sync, Clock and Serializer Rx% q. Q, _4 b9 Y' |7 F
** Output - Serializer Tx is connected to the input of the codec
( z, \; M, I) M*/# e) m) K! U% e; f1 I- k' L) r
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);  Q& w* n! D& \1 V/ x" I8 w; W
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
0 s, h: h% a& f$ XMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX/ z& u, {4 [: I/ k8 w& w. v
| MCASP_PIN_ACLKX' D' R7 n" C* a6 ?1 t
| MCASP_PIN_AHCLKX
4 H& T( ^! E; F| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
3 |0 {" ^* ]; |" k: N9 q9 t3 F9 iMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
! d# O4 z- T) K& D2 A5 h# i| MCASP_TX_CLKFAIL
  e0 C4 r4 Y0 v! T8 c* r8 q| MCASP_TX_SYNCERROR& ?9 M( n4 l0 {, P
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
; \" a+ p' H- A7 ~4 H| MCASP_RX_CLKFAIL7 }2 J) [6 n0 `' D
| MCASP_RX_SYNCERROR . c# s6 v2 S( n5 }  n( H8 e  x
| MCASP_RX_OVERRUN);
! ^5 a& \( R/ V}
static void I2SDataTxRxActivate(void)9 y- c1 `1 s. G3 M; s
{
9 L! a" ^! p7 C8 g/* Start the clocks */! J: e7 \4 ^4 D6 k. h9 i4 U
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
6 Q  ~4 f" R( D" f1 q4 p; Y9 y2 wMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */+ K) }. F3 f& D7 u4 b% q
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
% e: F9 x1 U: I: SEDMA3_TRIG_MODE_EVENT);
! x+ |$ S2 E* T6 H* O! h9 V- ZEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 4 W7 a* R' a2 _+ y6 v5 X1 z0 Q% `. ~+ g
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */1 o2 X) D4 Y" G$ s
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);1 C* w" @  d/ [
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */1 s& c% c- K. l/ D% g, g, U
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */, Q8 E) Z$ {2 j% }" H+ A- w1 i( h
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);* s, }  ?' t- g8 w/ m5 N( F& O
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);# Y" b& l" }+ f, ?+ ?) U$ i
}
. @* i( v. B! J  r" K
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

: a: ?0 X5 v* R% S2 R! _




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