嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
5 j% }; ~; h2 o5 H5 ?  yinput mcasp_ahclkx,
3 `3 X( V0 s" m! e2 b- Tinput mcasp_aclkx,
9 Z/ W- p& e  a; o, \input axr0,$ Z0 Y; j8 \# n$ k/ U  p

( B" U9 e7 j: |& G# \7 ]output mcasp_afsr,& z. I" y* S7 \3 L( ?! {- Q
output mcasp_ahclkr,& Y( K- S9 T& Z9 m' o- W
output mcasp_aclkr,
5 l( [' k* H& m- d- ?output axr1,. L# X2 S& h/ \1 N9 k  |- N) K
assign mcasp_afsr = mcasp_afsx;# Q; t& @6 b9 v9 u1 v4 |
assign mcasp_aclkr = mcasp_aclkx;
7 t6 j" P( E) {  W. L6 q- Zassign mcasp_ahclkr = mcasp_ahclkx;/ E  f3 I4 q3 ^2 Q- u. |
assign axr1 = axr0;
3 J; g8 i5 j8 T
9 \6 _- _! }/ ]' p4 x/ u
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

' a: A3 o1 s' Z7 \- j
static void McASPI2SConfigure(void)
3 u2 K" V3 U+ K6 W% x6 e  G{
/ a% v9 n$ Q: Y  x$ x1 nMcASPRxReset(SOC_MCASP_0_CTRL_REGS);0 {, y2 h" N3 ]3 r5 [0 v0 d2 C
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
3 M$ y5 V% b7 q- u8 A/ tMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
1 n; V5 d+ e6 uMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
$ [. j* L0 v; k4 dMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,+ E. }% V* g$ `1 \# n8 C$ l* g
MCASP_RX_MODE_DMA);
) h) p$ r" @# X+ IMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
7 ^9 m- J" l  a0 X" V- BMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
/ m8 L& U& {3 h0 y: TMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
4 i9 i3 F- x  E( Z. ^  j5 Y# x% F3 UMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
- F2 t- Z! f- y0 D  |; X  qMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, % l  f" ~) }! b1 _
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
; ]# V, B& Q- j9 b: m3 o) l5 VMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
( d" K. b) u( s, M# U' k1 _McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
+ O8 i2 k! L) n0 NMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,- U2 P  I" u* z
0x00, 0xFF);
/* configure the clock for transmitter */6 C% Q5 m! e# ~" O" \. i! X
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
9 O/ H, ^- R  \* d7 w) h6 i3 mMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
* h) Q4 r/ E6 r% q( o1 U& E& T. XMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,3 I6 Z6 J6 E2 e: E& ^) Y2 k2 x
0x00, 0xFF);. C. i+ T- @+ P5 L* z; _8 }
# r5 V6 j1 P1 w# A
/* Enable synchronization of RX and TX sections */
0 L8 ?+ M3 ~/ n; P2 N) HMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */, W1 X1 U+ f5 b7 \7 j. Z" ]5 z
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
7 R& S8 }8 i6 f5 \+ o9 Q. xMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*. F3 r9 |: H! X4 l1 T0 l8 K! _% U
** Set the serializers, Currently only one serializer is set as* Z, Z/ @: S4 q# t8 l7 p% N8 f
** transmitter and one serializer as receiver.
4 Y) U) L4 x. ^*/
1 M. T3 a. M+ [  Q6 a: qMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);1 \2 U+ f* k. s7 j
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
: o* ?8 t% a+ z' a0 D2 {! j** Configure the McASP pins
4 p+ [& H+ Y( H$ y* g+ h** Input - Frame Sync, Clock and Serializer Rx
6 q: _  N  Y) u2 f** Output - Serializer Tx is connected to the input of the codec ( ^4 M8 s* [9 w& [) C# v+ F
*/
0 q6 ?$ X( ^3 i! xMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
, @4 C7 L# o6 S! f8 f: Y8 q: o- vMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));: F9 ]" k& C% V) m
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX: N% T. f: j' n" n0 ]% u
| MCASP_PIN_ACLKX* W% _* d* m7 O
| MCASP_PIN_AHCLKX
$ \5 b% ^8 e/ {  {1 c/ C| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */, W, V" G2 T/ H3 A/ u& \& g
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR : S! a; H; {4 m8 u2 P' l* J, G
| MCASP_TX_CLKFAIL : B+ T1 u, m2 U0 C% \8 s
| MCASP_TX_SYNCERROR  [$ D: z" H7 E% P8 N: N+ f: l
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
( s7 s4 O/ M* J- p# A| MCASP_RX_CLKFAIL. A; P8 Y* ]$ h' c7 Q. Y5 \; h
| MCASP_RX_SYNCERROR # \0 W& U% V* H6 ]3 Y7 S6 [- O$ R
| MCASP_RX_OVERRUN);
6 X) R0 p6 y# Q}
static void I2SDataTxRxActivate(void)
2 e1 s7 g" H/ x4 A{5 m! I, u$ c( A2 j  k* F7 A
/* Start the clocks */7 g1 T9 J  s9 Y# l9 j
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);+ i+ z: l# I' ?% H$ b, e, H. ~, v# i* S
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */8 U* s& R: _6 l. F3 D
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,1 h! y/ k8 l/ H$ ?
EDMA3_TRIG_MODE_EVENT);) p% C/ N4 \3 l5 g
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 5 c: O9 x2 k! b1 T3 T" Y5 K  E$ t
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
9 o6 v; U, w9 r3 ?* VMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);) M. B9 L. ~* I2 T! K
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
/ {8 d$ m8 J! l1 l1 r/ p* Gwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
! i  x3 v" ]( W3 H8 C9 b% FMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
1 X& q: H+ a* _6 \, C3 ~& {& {3 _/ tMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);, l( p% P6 |0 d7 V2 T
}
, b2 E3 Y# Z5 C- q. U- |7 B
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
0 u( t# x3 g9 v7 J





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