嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,* ]- ?* H5 U; v$ ~$ \. p+ n
input mcasp_ahclkx,
# C. W5 Q. R- j- F- r& m4 Pinput mcasp_aclkx,' ]6 M; E; M# I
input axr0,
) o# b# B1 w7 f0 n1 ^
8 [  E( n' f% P& |5 Houtput mcasp_afsr,! r* |- t; m" B1 y
output mcasp_ahclkr,
& M! a& h) G1 j' @; Routput mcasp_aclkr,( G/ a2 G# L! w1 B/ v  L& r9 |3 h) \+ J- d
output axr1,
3 a; z# ^* N8 g' t
assign mcasp_afsr = mcasp_afsx;
6 T/ ~- g  X, w. j; hassign mcasp_aclkr = mcasp_aclkx;' H3 V, n. f0 G5 ^& Z
assign mcasp_ahclkr = mcasp_ahclkx;& q' y# c4 g: x  j' ~( m  R
assign axr1 = axr0;

- |! _0 F: n5 d/ b8 r- ?( L. s( y9 r9 [2 }
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

. F% o6 F$ a/ z' \# ^/ L! ^  V
static void McASPI2SConfigure(void)# e! z9 v/ H1 \* d- }  _7 `
{
( D  P$ x  J4 F% [8 @* ]9 zMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
) \- ]) Y8 _4 I) f; V; yMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */6 E. i0 N  w6 k. A0 X0 U5 x
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
% N+ x, y9 x  n& u1 k1 xMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
8 X/ s" a: Y; x" h4 c: W. E" hMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,7 a# }$ k& U* a) {
MCASP_RX_MODE_DMA);4 X' _6 x/ K0 j- a: k
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,: m. r$ A7 b* j8 g8 B0 d; O2 ]' L
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
6 E$ l8 z8 I% SMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ( q$ M( ?+ m3 f; L
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);0 W' ^/ F2 B0 ^. l3 d6 M. v7 ^4 {
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, * t$ I5 G' _: c$ h! H0 y/ l$ T$ e2 Y! L
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
' n. `' b4 N6 x8 ^! {McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
. X8 b5 B9 E6 J' l: x* \( }McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
- H7 J3 c! \1 G+ V" K* V2 q$ @4 J, LMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
) w9 Q7 _* `- S' W# d# W0x00, 0xFF);
/* configure the clock for transmitter */
5 ^2 H) x' K" ^& S" L. OMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
2 \# x8 a5 {  g8 E* R8 o* w( sMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); - i( t3 w) J4 U, J9 ]& ?5 V
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
% W% E# D% l# H0x00, 0xFF);
  W$ T' I7 r! B9 T5 \# r8 y% u  U# M- ]  f4 Z- b% }: o
/* Enable synchronization of RX and TX sections */
+ s! S1 H- s( @  l( DMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
: I( R6 l5 k) Y; a' Y! c& T! I3 X( HMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
9 Q# f: q, U/ PMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
: ^. p: R% p" ]# t5 s( D5 l** Set the serializers, Currently only one serializer is set as+ a2 Y: F( _5 t0 i' a  F6 u
** transmitter and one serializer as receiver.
5 X; m; E# @1 p- w- a*/# j1 T+ ?5 t3 J( E9 H' J
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);* D/ N* y6 ~! K" N
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
) t1 {- n! y0 x9 T: F** Configure the McASP pins
  u5 G! M. r) h: X$ e& N** Input - Frame Sync, Clock and Serializer Rx
6 D& \, D' B! ]3 z3 Y0 ^** Output - Serializer Tx is connected to the input of the codec ' G! ^2 @. y8 W) w: ?) a7 |
*/1 d' t& ~- [: e8 R( r
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);3 a9 D- B; @! H/ l8 {' `3 z/ U! Q
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
5 q4 r$ j6 Z) [% m( I5 I% zMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
0 ^* K  z# \  y! L, o| MCASP_PIN_ACLKX
7 A: Y3 e- o( N+ m$ q  M% }# J| MCASP_PIN_AHCLKX
! s9 n0 }& `1 ]% C| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */4 S' v3 p9 T5 e+ K
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR & X* B" p7 v! q- ]
| MCASP_TX_CLKFAIL - A5 H, U, [% ^9 N
| MCASP_TX_SYNCERROR
& @% k7 v1 l; n# {3 W, l| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR . O7 ]- m! N8 J+ O- q
| MCASP_RX_CLKFAIL
  ?! W7 {: w, W- \  R$ h" B* g| MCASP_RX_SYNCERROR
( R  o- b, C7 @2 ]8 t$ f. D. N| MCASP_RX_OVERRUN);
2 i+ r" O/ T# W}
static void I2SDataTxRxActivate(void)1 d% P" W- @% X3 u2 h+ n
{
. ]4 N. L7 c1 m4 w2 J7 e/* Start the clocks */
3 [6 P  K6 _. ]* s" QMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);! [* H$ {$ b/ }8 P, J6 \
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */5 }, M$ M  i/ P; q" L8 m
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
3 I9 [/ [. ^5 N, nEDMA3_TRIG_MODE_EVENT);
! i8 p0 m0 N3 gEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
8 t+ f: K. c3 wEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */  E+ H9 Z7 j7 ]) [% U& P
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);) j, F/ R" `$ ~
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
& ?5 U* v7 n: s* r) @$ owhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */# [: i$ e5 I$ m) p
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
; ~  L! |, g/ {) g; HMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
+ @- `# a8 R& f: L1 U}

( F0 \! x; g+ _5 H  G+ G6 n) U
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

1 W2 O6 y6 Q4 c' U  F+ ?




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