嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
! R. y9 B9 P8 h+ L: R" Hinput mcasp_ahclkx,9 Y( ~. G2 [( P2 ~' C( X: w; S2 w: |
input mcasp_aclkx,
, P) a% q" A+ S; s1 ginput axr0,
# h2 v  T& k  @
2 d1 E8 ]( M7 h9 R6 I! _- E( doutput mcasp_afsr," [7 a  t* G- L  t* h; V3 f+ V5 v
output mcasp_ahclkr,4 U6 I% z: O( Z4 |! K5 m1 d
output mcasp_aclkr,
0 b. E* ]3 h' ~( L+ Loutput axr1,7 y: |( K* ?7 V) B% |% H
assign mcasp_afsr = mcasp_afsx;
4 [! E" H7 N2 q9 }& cassign mcasp_aclkr = mcasp_aclkx;
3 j4 ?) q6 o2 a2 u0 massign mcasp_ahclkr = mcasp_ahclkx;+ S- [7 D4 V: b6 p7 G+ {
assign axr1 = axr0;

, P1 {7 a* N( X! }  P  ~
1 F& m. G1 u+ f. `
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
" u, Y- b+ D% B" {2 _0 M" ]
static void McASPI2SConfigure(void)" j( \0 n  _, _* _4 O
{2 N  W3 _' D* ], [( {9 w' b
McASPRxReset(SOC_MCASP_0_CTRL_REGS);& `7 P  h" z' m0 \5 }5 m
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */: S3 C/ c  L/ N/ j5 Q# e
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
4 S: R: Q! _; }: K# xMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
) e1 J2 x6 c" LMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
0 v: s+ y8 B) b5 Z4 |* i9 ?MCASP_RX_MODE_DMA);
5 D- @+ [0 W! V0 ?, UMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
! b- `2 y" O+ [7 v  o5 aMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */7 Q  R5 c9 t3 h* t, D# i
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 7 K; S. k& L6 e- q* @
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
, c3 h1 z7 z" o- C1 MMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
6 {+ D3 p0 f. |MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */' i( b5 Y1 a! r9 U! r
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
1 W" o! C. |% vMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); & m4 p& G. \0 ]6 `& r
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,+ T; l0 Q  e+ w- z
0x00, 0xFF);
/* configure the clock for transmitter */7 t& s9 s# m+ o
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);# z+ V/ d: ^7 R2 U9 l6 q. I
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); . T; s* h7 n% a! _3 f, I9 @& o( v
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
! k4 H: C4 _% ]/ r0x00, 0xFF);
7 b4 \) w2 }5 ?9 c8 l$ X6 v2 L" |1 p* W; P- r* f, i
/* Enable synchronization of RX and TX sections */ ! W" ?$ w! D" n  e. J
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
4 `) j  x0 \' c0 F3 v; QMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
9 y; o: F2 Z8 C' m4 W3 C+ H1 M8 K" N: kMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
6 K' B( d' i; r- X, n  R; R  L** Set the serializers, Currently only one serializer is set as
" b, Z+ |4 O7 |$ a( f' C" d** transmitter and one serializer as receiver.0 o% z! ~4 ^0 o8 k2 g% e% _6 Y/ m
*/
4 z6 m) Z6 b1 K+ |4 S0 pMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);* I$ }/ {' b9 r0 {7 \  Z5 P% [
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*( k( a. W4 ^  u9 Z1 w1 K. q
** Configure the McASP pins 2 l3 W3 }) ?. R
** Input - Frame Sync, Clock and Serializer Rx
; e3 R% ?/ Z6 {& {; X' s+ C3 b** Output - Serializer Tx is connected to the input of the codec
7 ]8 W3 b- X  W7 @: a" @' t- f* B*/* ]( @+ |# x3 f
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);( E5 s# A/ M- i, |
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));  `' Q, O# u& I- [2 r1 U* w
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX0 ~+ f( m) h- I9 T% _; b
| MCASP_PIN_ACLKX$ o0 Y5 m. j) M. T
| MCASP_PIN_AHCLKX
) [( ^- H8 v) D, U| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
( x# {/ N$ D- e( j' \McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 9 s6 R* ]* D# ?# b- S
| MCASP_TX_CLKFAIL 6 f0 ^; Q3 [/ t6 j
| MCASP_TX_SYNCERROR
8 [0 w2 _3 r. H  }& \# C| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
9 M) J, {9 x. D  `2 `) l# M# ?| MCASP_RX_CLKFAIL& p* {% g: A  d* R
| MCASP_RX_SYNCERROR
2 a9 g7 t, Y  T9 a) P| MCASP_RX_OVERRUN);
3 i% U0 M& o: Q8 Z}
static void I2SDataTxRxActivate(void)4 {9 {0 |+ `+ a  S% M
{
! S6 b1 w) l* i2 r! G! Z) b$ w, Z" R/* Start the clocks */8 }/ C7 t0 h% k
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);* R6 c/ x7 M6 J9 E0 N/ Y
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */( l5 V) S4 R, b+ O- h  ]
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
8 A' T3 H1 d: E$ |/ I4 wEDMA3_TRIG_MODE_EVENT);
' r1 x7 o, x/ B9 nEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
  p! E$ T1 }* x" c5 d: jEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */7 ]0 r. S+ k  H3 G2 N5 K) T
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
* }# u2 X' K* ?+ x: N( d$ H4 K2 FMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
# K1 o. T5 Y. \6 [' A- D) i+ Kwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
7 g5 a9 x, t" Q+ p2 \3 k+ ?8 sMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);3 Y( T8 G. h3 S1 q) P0 V
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);4 N4 H/ V7 g- x
}

$ k* Z1 Q8 `. o; a+ d) w6 p. D
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

5 n+ u& i  Z3 h' }




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