嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,( h; B+ c/ {5 r0 P8 v
input mcasp_ahclkx,
: Z% i1 |# M) R, ]8 [input mcasp_aclkx,- T7 y  n0 W# W* u8 y
input axr0,* O; W5 }( e1 \& P

/ U0 _5 a4 j. N0 k2 Z* `output mcasp_afsr,
! H+ q* |% M9 O1 Uoutput mcasp_ahclkr,- l- X" C( S8 Y0 X2 V; Z& b  Q, s
output mcasp_aclkr,8 h1 T5 }( l3 ^; ~
output axr1,
9 _; G4 _  O2 `% t% q: v
assign mcasp_afsr = mcasp_afsx;
% n  a5 J0 i7 d- @, S0 ]) ?* l- yassign mcasp_aclkr = mcasp_aclkx;0 Z' a3 H- m. k
assign mcasp_ahclkr = mcasp_ahclkx;) C. j5 G4 n  P" c2 F. t
assign axr1 = axr0;
8 h- v; H2 a6 x8 S& @
, n; M+ w* e" T) o9 x
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

) n8 ^8 G0 M; A
static void McASPI2SConfigure(void)' g7 @; V+ x0 K6 ~  M% q
{
. |3 J; a* k& zMcASPRxReset(SOC_MCASP_0_CTRL_REGS);* l. j, e' r% B+ F7 F: g* P
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */& H5 z, E3 ?& ^; ]
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);$ m& o" w4 D" Y$ {0 }$ d1 i
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
+ [4 K6 O% q& e9 _McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
2 c, q, B5 N9 G4 gMCASP_RX_MODE_DMA);5 G, r; c& Y# [! D
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
, d! g0 B' s3 \6 Q& Y% RMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
+ k" g8 b$ Y* KMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,   S2 U# H; X- ?5 `* ~
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);, C  O. [, B5 y* w8 W% S9 ?5 _
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ! @4 V: \7 F' F! _/ c; v5 a
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */' e" q( \$ O0 _
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
% U, V- ?; f+ c3 c8 z- X6 SMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ! p- k  i8 J$ B' j3 H
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,- g, }3 S% \+ {& L
0x00, 0xFF);
/* configure the clock for transmitter */4 N# ~+ q$ I3 v0 ?: S4 N
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);& P+ K  ^8 n5 M8 U
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
. q3 c6 \( [8 jMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,' M$ L' Z) |& [9 h
0x00, 0xFF);
0 E! |" c( U# R: B# j/ I; |* x' k: C. h6 ?" B6 C
/* Enable synchronization of RX and TX sections */
9 t6 S1 `! a2 E" MMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
: B" M! I/ }% ?% y0 mMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
7 j. D0 K& K. ?2 R1 k+ pMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*( [0 j1 G- E0 [+ Z
** Set the serializers, Currently only one serializer is set as5 O; a" ^! e, q" |) I
** transmitter and one serializer as receiver.
/ S" l9 \  F: J) p7 Q1 t  A*/
9 v; S: `9 q9 }! V1 u$ nMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);- I& _6 F* I( s5 J
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
, r; H' h0 z4 \4 H* q** Configure the McASP pins
" C: a9 w1 m. F. p- Z" y, f+ Y** Input - Frame Sync, Clock and Serializer Rx
% G* B3 o4 @3 d0 Y7 ^** Output - Serializer Tx is connected to the input of the codec
2 j+ g% C% d" X* w*/; c, I# {- r+ _( d2 v; U; F
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);* z; x8 Z0 z8 ^! z4 A
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
. h) j! p+ D, b  iMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
8 y6 @6 K4 c) Z" ~# \, n/ `# H2 n| MCASP_PIN_ACLKX
/ q. D% v; @1 d+ ^1 }! ]8 x7 ?& X| MCASP_PIN_AHCLKX
% e/ }2 F* Z/ g+ E. [% u6 x7 S| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
* j- y* s  l3 D  uMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
) W. ?% c/ f8 x4 s| MCASP_TX_CLKFAIL 0 h6 ?7 Z" x4 d3 M  n: I6 F
| MCASP_TX_SYNCERROR' L" b! B4 M1 u5 _
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
% K$ N$ M% X3 ^) e' W# q+ S+ p| MCASP_RX_CLKFAIL
1 a0 ]; b1 B( A( ?7 m. ~" B| MCASP_RX_SYNCERROR ; G5 ~# R% W. ~9 i, s
| MCASP_RX_OVERRUN);2 V; [! c/ L" a. ?+ f- T  p4 q
}
static void I2SDataTxRxActivate(void)( X' i% x! h( ?) Y5 u
{
( N) l" Z, `, j8 Y/* Start the clocks */
& X! _; a# {9 `. H! y+ q! YMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);. w( y- Y- N( s% ?( B, `( c- p; ]+ H
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */# L: D2 H$ m6 O; y1 m
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,0 S- j9 N" F% n2 j9 m& n
EDMA3_TRIG_MODE_EVENT);
! r5 G# {- V, b, Z  ^2 @! l; oEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
3 Y# z! P1 B7 S+ I3 SEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
0 c+ G3 t6 d+ Z7 d# W% Z3 k! ~McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
) o5 \( D; S% \. P6 ]7 ZMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
* K& s' J; y  k4 o$ Xwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */1 @; N9 r) C( ^# g+ T# w
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);" p+ G" _! H; k) b" X
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
8 f+ i! Z. P/ h+ f% l9 N! Z( |) W}
- ?( |/ Q0 N5 k$ O, X  [
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

3 c1 t7 u; {0 x/ P! E




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