嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
7 w; S+ P6 L5 U. [input mcasp_ahclkx,
1 R/ H2 z& R: D% i, `* zinput mcasp_aclkx,' B2 E/ E9 `  V8 H  j1 x" [! B
input axr0,
& c( N8 O7 b* {2 P" K3 e5 E+ U( O; A2 C4 t: s8 q- r
output mcasp_afsr,2 m+ l0 f: t; _: ^1 `) R: N0 \* Q
output mcasp_ahclkr,
. O/ K" w8 Y' e8 J& l6 F+ Xoutput mcasp_aclkr,+ a1 d3 g8 b) [$ f* R' f
output axr1,4 V" v4 o7 e5 M6 U! @
assign mcasp_afsr = mcasp_afsx;
) j- m0 S2 `0 ^. c5 r8 k" K1 Kassign mcasp_aclkr = mcasp_aclkx;1 T$ D2 ^7 N  e- w) V0 B" o( M3 k4 x
assign mcasp_ahclkr = mcasp_ahclkx;
" x% J$ {( T3 z, c' H/ M; u4 B6 C6 }assign axr1 = axr0;

) W$ B* [3 F8 s0 h' n- `  }7 F( t, l5 R! J. _. v' [$ B! a# Z
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

, O" N) H4 `( B& j2 Y
static void McASPI2SConfigure(void)
* S) Y9 E* z+ z9 ?: L{
% ^4 x! Q& m; R3 T, hMcASPRxReset(SOC_MCASP_0_CTRL_REGS);5 A; N' d9 {; k
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
4 K# q* E  K' I0 {" F' NMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
$ A3 }0 z$ f- V5 n- Z0 E% ^McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */1 ?  y0 L0 V" @2 X1 X; j( T
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,& W( ^9 ]! W4 G0 D; T% b2 a! {! o( ]
MCASP_RX_MODE_DMA);# p9 o- G* A5 ]( z
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,6 }" W4 b2 B+ t, @* U. X; k/ j
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
4 E. a! r  r* D- yMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
3 b& d& f/ t% ?6 ]7 KMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
' ]' j! \7 M' u, y1 AMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
! Q) B6 i! @$ a; q/ b. C" ^MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */+ d6 e4 S: M; m" g
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
& X* W- z2 L8 dMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
- o. r( c" j4 Z* f% YMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
1 F9 p. h  Z* a- i/ x1 l2 V# P% E( G0x00, 0xFF);
/* configure the clock for transmitter */
( U' P1 O' I0 S; g8 AMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);7 ~) Q6 F  X" V/ U- l0 T, ]
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
1 `6 E6 e5 m/ n# J. S3 A6 LMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,1 t$ a, Y1 [  c% N' K2 S% W1 y
0x00, 0xFF);1 E7 A  d! p& X5 o4 L5 p# H* W

+ S" g3 N$ ~1 w2 [/ a- Z) r/* Enable synchronization of RX and TX sections */
8 j- n, `0 l9 O$ P* ?  L) z* m- vMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
+ x4 Y6 _% Y3 c, J; m2 ^McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);- l; \, c+ v0 l8 O" X# s$ p1 n. Q
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*. t" J. H5 H, h
** Set the serializers, Currently only one serializer is set as
- ^" }) h1 j- X) y7 a6 c** transmitter and one serializer as receiver.
; _3 p, Y! e* B. x; f: l& ~*/' D- t) ]1 F7 Q3 e9 N$ R& \
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
* [- B! a8 D! Y; o6 GMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*; N7 e/ u+ {- n7 D) M% E+ u( f
** Configure the McASP pins
% Q; o: [- ?" [6 A7 m** Input - Frame Sync, Clock and Serializer Rx
2 U0 {# Z$ ?  n) J7 x* x** Output - Serializer Tx is connected to the input of the codec
% @* Y7 _1 S& f! A*/; B0 {  y- E  e# c# ^0 k% D
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
$ C6 I; w! L* @3 V2 b. PMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
) j( N! t. t, J' K. o5 EMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX" d; t* \% W7 _
| MCASP_PIN_ACLKX
  v- M1 S* b. W2 \| MCASP_PIN_AHCLKX- ~/ T* K. o4 \5 {4 T: m; L# e
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
3 y/ J/ k/ f- [1 {) C( vMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR - ?' Z" F0 Q4 }$ v
| MCASP_TX_CLKFAIL
! b- Z& K* o! Z* ?! n8 p| MCASP_TX_SYNCERROR
) d  }5 z  V* I/ K- \6 d| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
. }6 k- k& S, p  o$ Q% Q| MCASP_RX_CLKFAIL
. q9 Q% J  o) b' A3 E$ F" A| MCASP_RX_SYNCERROR % |7 X$ H$ r. L; m
| MCASP_RX_OVERRUN);
6 C( ?2 G# p9 c- @" `}
static void I2SDataTxRxActivate(void)+ |- x( j: H' z5 L* Q
{& {) Z: |8 ]2 c4 g$ N
/* Start the clocks *// t" @6 q9 m: r: w9 s
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);  b+ C/ F- {: A8 B7 S" g9 c8 y4 e
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
8 ~4 j  j/ {5 R/ rEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
* \* k- p4 G( f  F. I2 aEDMA3_TRIG_MODE_EVENT);  ]' c9 l! F$ F% l' N0 N* p
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, , F* A! s5 {2 v: Z8 U
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */) e; i. g" o) G4 A% t3 k3 J
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);) c$ l' ?5 M. I* e% c
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */  b) v) [& J- o/ G2 [' b
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */2 @9 t* `  P( k
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);9 I4 X8 D! q  Y6 a
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);& z- `  _/ x& L7 N5 P
}

  I; Z+ ?5 F, D8 w. K  Z
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

3 ]0 P) w& p3 n" s( G' |" v




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