嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
2 {5 E  j: W5 t, cinput mcasp_ahclkx,
7 ^8 m  t2 x$ O% d% E& @5 Linput mcasp_aclkx,' O, G3 p4 A$ \4 Y1 g+ b
input axr0,' f8 T; W6 `! U+ e0 n% I

; t) L; W  A6 c( Q8 g& Youtput mcasp_afsr,- D/ s- D1 @/ G# G. v; Y  P
output mcasp_ahclkr,
- L& h. }1 E" d. ?output mcasp_aclkr,$ R8 ]2 }/ Z2 s" ]
output axr1,
: u9 L+ S( E$ F& u0 H6 @: n
assign mcasp_afsr = mcasp_afsx;) G2 F! e7 }2 e4 e
assign mcasp_aclkr = mcasp_aclkx;/ @$ K8 S0 i$ i& ^2 a
assign mcasp_ahclkr = mcasp_ahclkx;! M; H' a4 y) |0 [- T. i
assign axr1 = axr0;
# A- q) p. L; j' ]- g9 t4 H
  \4 b5 B8 K9 u. J7 G
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

7 @* f7 n& C+ J3 D- j  M
static void McASPI2SConfigure(void)
  W6 M4 v' @8 `* O5 }$ f* s2 G4 B{
! z/ ?5 o/ M' s/ PMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
0 r  p! x, ]6 X3 j) mMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */8 I: S- r0 P& k
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
$ B# ^3 s. q  X! U* e: P* HMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
+ S8 Q: l3 y2 T; S1 NMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
. M" x" O! i) i% fMCASP_RX_MODE_DMA);/ O' J+ C: f' ^9 A9 C: T3 N6 K1 E6 t
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
& a  C$ s) J" T1 O* PMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
4 B/ x6 g$ B+ p, N3 M- y; u9 fMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, & A: }% g% ?, F# d# r5 p& J' Y
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);  ?0 z% o; @# g
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
- K; e/ [' Y, ~& ~MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */" [" u! _' J! `. @# x( Z4 D6 o5 G  ^- h
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
; `. ^7 A( }5 w% g# AMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
/ v1 T" |2 y" c) W" T' C3 iMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,& L6 f% P- H8 A1 P
0x00, 0xFF);
/* configure the clock for transmitter */
: P6 f5 ]2 |% T* W+ S) [9 nMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);2 M( I. j( D/ z, w6 |
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); . }. n4 L& v4 g" A
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,% w1 v/ m4 H* p( ^+ p' ~6 w- r/ d
0x00, 0xFF);
6 f3 i2 z1 ^2 n" F* j+ Y# D" ~) K* a0 N7 a5 C6 `
/* Enable synchronization of RX and TX sections */ $ P- H: b* ]+ R# N1 b7 k% T
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */4 T- \/ }( n$ A+ C  k+ }
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
: _  [8 a& C2 s# j9 ?5 i1 [McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*. C* {6 M1 ]) ]5 s5 q
** Set the serializers, Currently only one serializer is set as  c$ z' t" h4 ?: _1 F5 |& B8 w
** transmitter and one serializer as receiver.9 ?2 E; n1 N1 F) e0 j
*/8 Q! @* V9 Z  V% H( [% k/ M! X
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
9 Q7 y0 H; d3 H6 GMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
: X! Z& v- v% U5 \5 D' w** Configure the McASP pins / K8 Q, j. E0 j! D' Q% m
** Input - Frame Sync, Clock and Serializer Rx
2 R( k% P  J" U- A3 e  J** Output - Serializer Tx is connected to the input of the codec * ^# r! u6 Z2 ]. O4 {: H7 ?" d
*/
( P8 c$ O, k, WMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
0 z' x1 T& a1 H& G7 p: ?McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));8 l$ l( a7 N+ @1 }9 r4 \
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX1 a; [* B4 X' C" k: e8 A. o( l! B% f
| MCASP_PIN_ACLKX6 S+ @+ T  ?# Q( n
| MCASP_PIN_AHCLKX* ?4 R) Q% {+ }  R4 j
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
0 B* e" r% y5 D# F; hMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
9 ?( r1 `( t6 X; H$ e% h+ T6 [2 p| MCASP_TX_CLKFAIL
& ?3 F4 r7 e) G| MCASP_TX_SYNCERROR
9 E: b- \% s- n# M2 A| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
4 C/ g! G; M% K| MCASP_RX_CLKFAIL
9 V: H  H% C8 ^  s8 J- y| MCASP_RX_SYNCERROR ) ]0 |1 U% `' g7 N1 N/ m; C
| MCASP_RX_OVERRUN);2 s" o+ K' x, T9 v. N6 U
}
static void I2SDataTxRxActivate(void)+ o: r' ^! w8 V& A% }
{
. x3 Y' E: Y$ R$ U8 [/* Start the clocks */
6 H# H- }$ a+ BMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);) h# K/ [6 x, q5 ?# s' |
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
! G( s) Q; a* Y8 {% b, k3 mEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
! e5 S2 Q$ D$ u2 m' g, i/ QEDMA3_TRIG_MODE_EVENT);
- P) \' y4 G4 O( M( m* G  b, UEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, : d7 u( J/ n' a
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */7 D: I* G+ h' A  ?
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
+ H& D( e1 _$ Q' U4 eMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */$ U9 w4 d! p5 h$ l, O2 z
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */% W# y: b5 p! f2 g+ S7 h5 t
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
+ j$ j& y4 g. p2 jMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);$ _# t' r. ]' Z/ M1 X
}
/ A( B3 \# z0 M, [5 c/ n
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
0 v$ C- |) q* R, k& _  W





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