嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
& K9 M' ]7 y# N# d  J* |input mcasp_ahclkx,& t( Y7 X5 }) a; j% w: R3 C7 T
input mcasp_aclkx,$ P0 u1 S/ E  W
input axr0,
( m# o% H7 R  y$ s+ @* p/ f+ W
$ X0 A  z& }8 woutput mcasp_afsr,
0 T+ {# E" l; [" A# E+ poutput mcasp_ahclkr,3 V" k* I' r, l: M  r
output mcasp_aclkr,
7 o8 }3 i$ i9 qoutput axr1,
* T* m  {/ `# k6 X
assign mcasp_afsr = mcasp_afsx;9 y9 o+ V4 W6 x( u# G6 D8 L
assign mcasp_aclkr = mcasp_aclkx;1 n. o- @* N& `0 x5 H& M: q1 e
assign mcasp_ahclkr = mcasp_ahclkx;
+ V; H1 @$ s) W. T! d+ O$ \& Xassign axr1 = axr0;
9 @( [( t# `! y6 B- E# h3 H! r

" x% c' g, h# I2 H9 n  Z
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

& _6 R+ @+ x3 }5 E! R' J4 n
static void McASPI2SConfigure(void)
# C4 s3 \2 B  _. \{+ I# c% G3 k  i5 {
McASPRxReset(SOC_MCASP_0_CTRL_REGS);5 H1 P  E" f) J% x4 X$ ~9 C
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */! `" C9 {* [. O9 D/ l
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
, z( d5 X# \" QMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */5 V9 x2 T" }. \9 B! ~
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,$ {: G) K& {/ m9 f$ H- u% H
MCASP_RX_MODE_DMA);7 R9 V# _- w2 s2 h; Q9 d: L
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
7 {( B2 A: }1 B2 [! dMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
" r+ h, j: j# X) P" \2 R" K# a- gMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
5 y  h0 Z% k7 H2 `( s( p  rMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
6 q- s: ^' |; f8 C" s$ T/ |McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 3 S9 @, n7 `6 ]+ `! `; g
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
3 X, Q9 J5 T9 \" f: r5 g& rMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);: p2 o3 S- ?/ Z& B
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 0 }# ?  H, G: R  ?( z
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
$ e: g2 i1 P1 M, @" u0x00, 0xFF);
/* configure the clock for transmitter */
( _# K- O: F3 ^2 H: R+ V& iMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);4 h6 D% Z$ c4 d% s) c
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
, w7 x/ _: T9 T& E( l: xMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,, z* M& T) n: L2 j  f) ^
0x00, 0xFF);
( n( g; A3 v6 U
) R  ?1 [( n3 g6 p/ Y* _& G/* Enable synchronization of RX and TX sections */
6 D  r2 E0 v& A  U6 A9 ~5 |# Y, fMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
0 B7 R( X& G) B+ n! Z" TMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
( A, U6 o  ^1 [% hMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
% Z5 Y6 R# L1 o9 Z% K" a** Set the serializers, Currently only one serializer is set as5 Z0 I: y6 L* r& N+ J# @
** transmitter and one serializer as receiver.4 N) U1 z/ m, v: Z
*/
% v% o$ i3 h. r4 Y/ w5 T7 Q* i, dMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
' `8 g7 w, t. J. tMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*. d% @* O/ v7 e# I1 |7 A
** Configure the McASP pins * H8 C+ I0 P+ r) g& {! Y; C
** Input - Frame Sync, Clock and Serializer Rx
0 ~* P' p/ S) {** Output - Serializer Tx is connected to the input of the codec
" E! s- l2 g8 c; x* b*/1 B" R7 _& |7 ~5 ~% R$ f, l
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);: z/ Q+ @' i( ^; R; Q
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
* x0 n0 }& L' s1 f1 D  NMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
' q% P2 X9 Q, F% C# Q| MCASP_PIN_ACLKX6 Y" s9 a& X8 K' {# ?3 N+ ]4 n
| MCASP_PIN_AHCLKX
! i/ U! i1 m0 F% B| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */5 n; c+ j& u; k
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR - `. s7 {' R% F4 @9 d( v
| MCASP_TX_CLKFAIL
% g  v( {! d/ t8 w( z% m6 E| MCASP_TX_SYNCERROR7 W; ]* _7 j/ {# n7 b, n
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR - _/ l; q- s7 M- B5 r
| MCASP_RX_CLKFAIL+ s" s& w* q( @1 A* |! `
| MCASP_RX_SYNCERROR
0 j; x  ]3 ]. @4 u# W  B| MCASP_RX_OVERRUN);
7 H9 J: ~  ?$ K0 W  M9 D  X  Z/ q}
static void I2SDataTxRxActivate(void)
$ Z( q% }/ ]* ~: k5 s5 }{) B7 E+ i* C: n" Q, @# W; e
/* Start the clocks */9 L8 k  W& c1 ^
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
1 n5 ?% v# g/ X; B" NMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
3 H% l* C& w; yEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,8 F5 h" s2 Q4 W3 J5 g& Z
EDMA3_TRIG_MODE_EVENT);
  v, o: V0 a) {( b, [5 qEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, * o; H2 J: v- ^7 }
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */5 H( I8 j, E. `- D/ N
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
: x* H+ W' s# hMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */. k: `6 b; m5 l1 M# i$ n
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
4 J  W0 I. s9 p; h$ w: FMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);) b# Q0 Z7 Y0 n, a8 g( `
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
- w& r; `8 M1 b& I( `% e}
7 }+ R  b- ?8 t; e$ R0 n, V& S
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

- D. @3 D  N# c/ j$ x! U




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