嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
* D4 T6 F* F( ^input mcasp_ahclkx,
: @7 {: ^; B' Minput mcasp_aclkx,
, b2 K& @. `, c! b6 J1 v, sinput axr0,/ `8 K" J. g9 e/ E* n2 H3 n
. z1 s3 X2 Z& y" r! [
output mcasp_afsr,5 p- V$ H- w7 ~4 k4 H
output mcasp_ahclkr,( T: M8 v8 \) P5 S9 z
output mcasp_aclkr,
! t; c6 t" H, houtput axr1,- @% ^) s. w \# K
assign mcasp_afsr = mcasp_afsx;5 a! D5 e2 _2 }4 [7 V
assign mcasp_aclkr = mcasp_aclkx;- W- @8 U4 A* Z2 P9 B- U) x
assign mcasp_ahclkr = mcasp_ahclkx;
5 `5 c" k9 K$ ^4 O g- kassign axr1 = axr0;
H8 D9 |5 Q; U4 E; p' p$ i9 D% i# @5 w/ X. f/ X- Z7 A* n
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
3 D% ~8 O# s" H5 e3 qstatic void McASPI2SConfigure(void)+ w- `+ c0 V7 c# V" Y
{# M, C9 t# L# H6 U
McASPRxReset(SOC_MCASP_0_CTRL_REGS); h( q8 W8 A, `. D9 L9 G2 U P% g8 F
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */" ]' Z: |' J) R3 @3 I' T6 m4 U
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
6 r& `- p/ n a4 S3 U( _McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */" n/ e* Z' _4 a; _$ C' g
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
" B; t6 a2 ^) O: l2 {( I! W% bMCASP_RX_MODE_DMA);
0 _& Z# d5 K" ^; q% m/ YMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
+ A! D9 @; Z b: ?4 q% Z" qMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */* g) @9 J- I, Z5 t
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ' o/ F$ ]7 X4 u( C" z6 O
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
8 t7 Z. w9 x. J0 \7 x. FMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
. A- G* o6 I" [8 G3 ?MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
) `# R( |# @9 F& r T- m8 Z$ EMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);8 E' `9 X4 j, F$ J) J) Z- \' L
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 0 I: p8 m% o7 S) t
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
+ P! `4 u+ k: ]0x00, 0xFF);
/* configure the clock for transmitter */4 R0 R& \" X2 O0 g8 ]
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);+ t4 X/ b. _4 B/ Y2 `
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
4 _2 z9 K+ @ Q1 R" w, v5 y8 NMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,8 j3 h9 T5 j9 X" O J
0x00, 0xFF);! F- [8 G0 T$ u% T2 V
: j' U4 p( W/ Q1 T U/ {
/* Enable synchronization of RX and TX sections */
6 A- S& l7 o* ^( [& n, [: { uMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
! c9 h; G7 p9 x, M8 c6 D# u2 F- a9 KMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
5 @6 E& }( X c5 |McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
; Q1 C0 v+ A. A. T1 O** Set the serializers, Currently only one serializer is set as0 R2 I. w8 T, w- R& ^
** transmitter and one serializer as receiver.3 _" q! h% H. O8 a* T0 {& e; m
*/
* [. l2 s% ^9 j, r6 ~+ SMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);; J/ f t y" o, n. g% h
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*) l1 X2 O1 U/ J7 n# t* \- X
** Configure the McASP pins 4 K- S/ e# j7 I' q: C
** Input - Frame Sync, Clock and Serializer Rx
# v* P$ r! j0 _8 \1 G** Output - Serializer Tx is connected to the input of the codec " Y1 R# c4 C3 K$ Q
*/
, {1 w3 ]0 d* W5 v$ R3 I" W9 DMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);$ ?0 x6 h9 N+ {; x+ G/ H' I8 M Q
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));3 v/ g3 z2 I5 x" k o7 }& T' d3 L
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX3 L8 s: g) k* g4 i
| MCASP_PIN_ACLKX
3 z" T/ @$ [/ a9 B) A# o| MCASP_PIN_AHCLKX1 X/ S2 `# l/ Y7 P4 I6 n: ~
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */6 U6 A$ q0 _' U; l% H8 H8 U1 Q U
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
8 p. ~) Y9 ]% q: Y| MCASP_TX_CLKFAIL 7 Z D' e4 r- H% ^3 z, t4 N1 n
| MCASP_TX_SYNCERROR
8 g, I* ^6 G/ k5 F& N: B% I+ H| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
- _, u' X! ]2 ?$ i K| MCASP_RX_CLKFAIL& o' o+ ]% o& X; G J" J
| MCASP_RX_SYNCERROR
3 i4 d" C' B* n; C- o# ?8 m- n( y| MCASP_RX_OVERRUN);+ a! b0 {. h7 u" o2 }
}
static void I2SDataTxRxActivate(void)
' R# ?5 S" K/ F2 ]{& N! t7 T9 O0 i! S' ]/ l6 q
/* Start the clocks */8 x T$ h4 d4 }2 A& ~' c
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);# a9 {/ j4 k6 L1 v
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
6 r, q/ p- o( [EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
. O0 {; C4 b2 E9 n" U) REDMA3_TRIG_MODE_EVENT);
9 I: l/ |$ Q2 K' \. E6 \9 q# aEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
6 E2 I! h0 c8 l- k4 E% NEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */% ~; b7 _& S0 N* N" |0 B& K
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);1 Y: i! _# g4 d2 I
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
% A3 Q# P- ~% r. kwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
6 y% r) R i8 N4 c8 s1 W8 OMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);" N5 k! {% u. x3 K6 T# k$ z
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
. X0 h' f; `( I, a% P4 P; M}
! S; X. G/ ~/ i- F. w7 H: O7 O5 X
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
% L. C! Y2 |6 e5 G# L
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |