嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
* s8 o7 C* ^( T3 }input mcasp_ahclkx,
9 K* T) [" `0 p& H9 k4 |input mcasp_aclkx,
' ?2 X7 F. @. s( Q+ g: sinput axr0,( N- u5 R+ e7 K

* T( f8 r' {9 x, U/ u) K) \output mcasp_afsr,
" o7 [0 x# }+ w, Doutput mcasp_ahclkr,5 [; `. K% h0 o' g) k2 t: W  l
output mcasp_aclkr,% l+ \( y) n1 Q; C
output axr1,
- J! e0 I1 F$ y2 k  X% l; r
assign mcasp_afsr = mcasp_afsx;
) w; o7 N1 }, I4 t9 T; Wassign mcasp_aclkr = mcasp_aclkx;1 M! S, I! W9 S0 {- ~
assign mcasp_ahclkr = mcasp_ahclkx;. f& S) E7 d! e4 S5 t) ?2 j5 h9 _4 J
assign axr1 = axr0;
3 p: v% z+ M! z. m! a8 G4 L

% M5 [  L  u" Z; B8 x
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
) E: W  ?5 k/ i
static void McASPI2SConfigure(void)  t% @8 ^* d+ M( ?
{, h* n" F6 f) C9 a
McASPRxReset(SOC_MCASP_0_CTRL_REGS);* y8 I3 F# t5 `% y4 q# C
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */8 y3 ?% o  E, E7 l/ l
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
; v8 h* V+ l: i* `. u9 ~6 gMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
) D$ v* _) E+ f) Q) I+ o5 dMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,0 v( S6 V! D' ~) B  x
MCASP_RX_MODE_DMA);+ M% l6 Z. p& a, V6 s, t
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,. X. ^+ O; W5 P) S) {
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
1 u1 G( l( |- z7 H* W7 o/ UMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, . ]$ I3 t1 y% H6 J2 q# T
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
/ w( j& g1 e* FMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, % J( A0 e6 }3 e* Z( c
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
0 [; _8 K; Q# k! M5 MMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);2 T6 t# y; n. z1 d2 T8 O# ]3 r
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
9 H2 ~) l1 X4 n" U6 g8 U2 b4 e3 g2 PMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,3 l' R  B5 [2 x2 R* s+ {
0x00, 0xFF);
/* configure the clock for transmitter */2 X% }# s" v- \& D" R: w+ C! K; W
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
  F/ a, S" P7 ~3 eMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
$ ]% M2 B3 C, P2 pMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
( f9 U0 S9 c' c5 V* N0x00, 0xFF);
) c0 z4 C1 T3 g* l3 |1 |
6 ~) M6 ]; d4 I/* Enable synchronization of RX and TX sections */ 7 o0 B5 S- q3 \
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */6 j( N  i! B; i- v; ^" v- ^: {9 j. a
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/ h8 j/ f9 h' |! r& MMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
4 b' k6 W6 M# f. v3 j  S: d' ^** Set the serializers, Currently only one serializer is set as. ^; p% b- H! \, T5 n- h+ U
** transmitter and one serializer as receiver.
6 {% D1 u9 j: n* {*/2 ~2 E, X0 t6 N6 N
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);# Q, i7 q3 _4 X  e
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
/ T. V; g4 R" S, _% @% g& h4 q7 d** Configure the McASP pins " r5 o) {/ z5 u( T2 B
** Input - Frame Sync, Clock and Serializer Rx
5 A9 T+ l$ J7 y" t** Output - Serializer Tx is connected to the input of the codec 2 C& U+ H1 B, @  s( z0 S1 m9 a
*/1 \1 `/ G+ k% e1 P
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);( M1 Q& j+ c2 r  Q
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
  B/ U( b- A/ J# bMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
0 k, P$ w! A% r' n6 M& u0 U| MCASP_PIN_ACLKX9 ?6 K1 u6 l/ |1 x
| MCASP_PIN_AHCLKX0 _/ r; _# S9 }. n' [
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
4 S0 B* O) ?! C% ^4 bMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR / D. o! i9 c1 C1 ^4 z; Y: \# R
| MCASP_TX_CLKFAIL 5 ?& o. P# T$ x
| MCASP_TX_SYNCERROR* N0 D, A- R" H3 d" |0 f# w1 @
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR ' ^. D6 J, ?0 K+ X. H: w2 t: E; R# I
| MCASP_RX_CLKFAIL" Y! x# I3 a% Q. g( @$ p
| MCASP_RX_SYNCERROR
6 v' I; v1 {2 I) b/ C2 O) F| MCASP_RX_OVERRUN);5 W+ I8 W5 D7 a5 ^1 M1 a/ ?1 P. h: s& e
}
static void I2SDataTxRxActivate(void)" p. H# b) G8 n
{( l- L% q+ ?$ |" u" ]
/* Start the clocks */+ \, _8 c$ d, k+ i& I
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
! Z/ H* j1 S* w. W3 \McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */- r# q; L: Y" c2 u/ D1 T
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,& x" J( e5 E$ P1 s( U8 S
EDMA3_TRIG_MODE_EVENT);
! f+ c$ ~  k" C4 ]EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
6 P$ z! X  F: p2 aEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */* }" g& p. r+ r2 e- }% M# S
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);4 A% q$ w9 A* \$ K- A+ F
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */: o0 M4 N' G& ~
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
( x# w2 Q8 x. w" d, MMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
# e4 t/ `5 ~; ?0 ?# n" DMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);6 S. C% ?0 {. ^9 n7 j. q
}

& E( q/ F. x6 {
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
1 K2 c' H9 f, c2 @- E/ ~8 }* b$ |6 u





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