嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,$ O: [6 {1 Y8 E. Q
input mcasp_ahclkx,
# F5 _/ k) H* q5 G& b4 Cinput mcasp_aclkx,; A; i! D7 R4 g# ~6 U
input axr0,
! W, z! u$ {; L$ M8 N% y) i+ m9 S" u1 n& n) ?" o9 T% {
output mcasp_afsr,' ]2 _* S+ t3 V A
output mcasp_ahclkr,
6 q+ b/ R0 q* \* d' M" U* Koutput mcasp_aclkr,
* U( S" _+ n, _% Foutput axr1,
9 X7 D: t n/ }) U, H# J: ]
assign mcasp_afsr = mcasp_afsx;7 M# C$ X3 I+ C# b7 A
assign mcasp_aclkr = mcasp_aclkx;
9 z" |/ [- Z4 i4 X8 n2 J. qassign mcasp_ahclkr = mcasp_ahclkx;
8 S% ~9 L1 Y% ~# \" ~assign axr1 = axr0;
: ^ M$ [3 k; K) y2 O# g
9 m4 ?( Q, i- f在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
7 p0 V$ E& x/ G9 L: ?1 Istatic void McASPI2SConfigure(void)
Y3 q2 q0 J* i# Z{9 m; K" r/ ^ z
McASPRxReset(SOC_MCASP_0_CTRL_REGS);3 C! h8 ^4 o. u- Q ~; N
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
3 D5 A2 b$ V8 {. a* `% bMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);9 o9 Y/ j4 {2 k6 T$ O" x
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */. e0 x! S# S5 g; R5 E4 Q
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
- C& I1 Q% L% |/ kMCASP_RX_MODE_DMA);
: }$ K" h$ |8 dMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,% }; E E, C( t" c/ Y1 {# g9 ]+ z" u
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */& u, h7 |$ n' A' c
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
: L' p3 k, K9 o! I1 ]4 B* XMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
3 t& V8 V0 }/ H0 r. p2 {McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, e" B C/ j' t/ }, u& S/ o
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
& z( T' O& a% l, {: K6 R1 c* _0 g; oMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
4 a7 v; `9 E! J5 z! O, X# ]McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); f& ~* P/ h- N- O" W
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,* V7 [# c8 ]1 V8 Z
0x00, 0xFF);
/* configure the clock for transmitter */9 y8 p4 t+ F! ?. m
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
: f/ _ g; I V4 K& Z q2 hMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ( k4 X1 V- ]) ^* J
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
; {* u8 @* b. y! R6 f. x! M0x00, 0xFF);: t; V' X6 I0 S( l
" A; C* M$ Q6 d: Q$ E
/* Enable synchronization of RX and TX sections */ ( [' m6 l3 X$ \! n* n
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */5 ]* e# k+ z% n
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);" i( T! ?0 ?, G
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*# W5 Z! s6 b* u
** Set the serializers, Currently only one serializer is set as7 d& S+ m5 e$ u9 f
** transmitter and one serializer as receiver.
) q7 r! [9 ]8 W' }8 P; l*/' N1 P. I! o2 B$ B
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
+ p$ r; Q7 b8 ~; G: c# OMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*; u8 \( P7 J4 g
** Configure the McASP pins 9 ~& n& _& L8 h3 ~ ~: `. ~3 S
** Input - Frame Sync, Clock and Serializer Rx- }! A3 S A* F
** Output - Serializer Tx is connected to the input of the codec
/ P6 M- \4 G; T1 k# ~*/- N. F. [7 B; N
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF); S4 V8 e6 ?7 J- h1 x( K; j
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
) i/ T+ Z! F. BMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX4 j2 N, V( ]$ Q) d
| MCASP_PIN_ACLKX3 S) z; p8 G4 B& W
| MCASP_PIN_AHCLKX( I$ Q# t7 j. |- b4 }2 d8 V9 `
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */8 T$ v9 }7 [8 I0 C1 y5 W# _
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
" E: j. h; u |% Y0 |0 x* w2 U| MCASP_TX_CLKFAIL
7 s' U* D2 C& r4 t0 A| MCASP_TX_SYNCERROR3 u/ }, x. A2 V: G. i
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR * i- E3 f4 X9 g; G- [9 K
| MCASP_RX_CLKFAIL
4 L- r( a/ G! t3 w8 h7 [9 F) t| MCASP_RX_SYNCERROR " ]9 B% Y' E, h7 G% N: ?& ?2 V8 X3 I
| MCASP_RX_OVERRUN);
. Q2 j) V* E# v: d: G1 e+ b, F}
static void I2SDataTxRxActivate(void)) O; e( ]& a w: b
{
1 l1 y, L* y2 B- X0 G) H, l+ |7 U/* Start the clocks */- H. W) U, z# h8 W( s3 k
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
& T+ T, F, w7 o4 k2 g5 KMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
8 m; a5 {2 u% s+ l7 S) mEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,3 ?6 R+ _) M" @0 |. X! H
EDMA3_TRIG_MODE_EVENT);- n4 a1 i- C+ h. W( t( { u
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
' [: o4 x- j; Z x8 [. fEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
/ Y2 v7 s* c5 s, A0 ~: RMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
" b3 Y1 s# l$ |6 ]McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
- F1 h# w+ C* k6 n1 wwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */) \% _" @0 C! ^
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);( h/ S! X; [* G" G5 T
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);: ]" u# I7 ]0 b3 g1 j, M# z
}
6 x, O) A$ P9 k e' [8 a( {
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
1 Y8 }( w4 d- J& l, k* d4 _8 ]& Z/ _
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |