嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx," O$ R7 F! \* W6 X, i2 u7 v( ?
input mcasp_ahclkx,& q( x% I- I3 Z% F8 `( q/ H
input mcasp_aclkx,& {$ O8 G# w5 ~9 _3 ?3 N1 C
input axr0,+ c/ L& W, P- _9 t6 B5 I
9 n7 {' G; G7 S  X- @7 ^, ^; W$ q
output mcasp_afsr,
1 d5 w, p% ?0 V" `/ i% eoutput mcasp_ahclkr,
' |7 g. \2 A- L# e6 Woutput mcasp_aclkr,
. q" I2 n# y0 g4 ^output axr1,
& V" S& c) o& P3 t) @. t, b
assign mcasp_afsr = mcasp_afsx;0 E" m! y: `: y! G& x0 e
assign mcasp_aclkr = mcasp_aclkx;6 m: \# L$ o/ [8 K5 C. c
assign mcasp_ahclkr = mcasp_ahclkx;
* h4 P+ e4 [7 [' ^! ~' i6 J2 d& ]assign axr1 = axr0;

8 g/ {7 I$ w% ]; K# {* A& P. v
( ^: `$ ^* b$ u4 g8 I  R8 E4 ]
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

+ m; b" ]+ U' t% q5 ]( C; w
static void McASPI2SConfigure(void)
3 U7 }+ W; i& s$ r3 P$ R$ B{  C/ K! g! P9 A1 |! V
McASPRxReset(SOC_MCASP_0_CTRL_REGS);" a1 E. S9 u4 {
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
' q9 O. u5 m9 z) b5 T: k( r: }3 LMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
8 Z, R7 `; O& J3 ]! G( QMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
. ~. H, @3 t9 H: q4 gMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,! k* {- U9 E, }- o! E
MCASP_RX_MODE_DMA);
  l* J" f2 O  B* p; mMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,9 m  ]' ?5 F% q" Q
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */( Z3 T: K0 H# P# U' M5 h
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 9 r9 i0 V: m, A5 S
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
  ~: ]5 k7 s5 o7 }: YMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 3 h! [4 G' G5 X2 A4 i, D
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
! E1 C& X2 w( z- l& o3 wMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
  ^" h+ l" o; A: e7 XMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); . J$ {/ E7 m* `" \
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,2 t" }; o" r. H# f% O! s9 Y
0x00, 0xFF);
/* configure the clock for transmitter */+ `/ w, A2 B$ D8 i, ~) S! h
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
7 y7 p  R' V7 S1 CMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 4 t% W) F9 q' t  Z) [
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,# Z9 X- S6 w& h; ?9 Y8 B# E6 O
0x00, 0xFF);1 g5 B9 c" ~& _! n, {
. F, M7 W1 n& L! r
/* Enable synchronization of RX and TX sections */
" h4 f  ^  [* P& H# m& RMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
( g0 O+ k0 e% o( H# K( ]9 AMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
: U( q2 N9 @" M0 NMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
0 h4 o/ P' A0 ~3 v. R, {0 Y7 `7 L** Set the serializers, Currently only one serializer is set as
0 y/ Q) z1 H, S: ]9 p+ F; U** transmitter and one serializer as receiver.$ Y0 C2 h& ^( E/ X$ G
*/8 e5 p0 X  N; v7 @: |& H, c
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
) x4 g/ l/ y# U9 `McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
0 I6 B6 C9 \3 N% x** Configure the McASP pins 2 Q9 |& G) g( a% a" C
** Input - Frame Sync, Clock and Serializer Rx0 I; V3 @" h% b3 H" c* Z
** Output - Serializer Tx is connected to the input of the codec
9 |8 ~# c( L- T) H" f*/0 [! n1 R; M# T5 K+ E, e4 ~
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);( y+ N* F, x: {: |( K9 S  `
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));- l% v$ t( E" N; e/ M
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX, F& F5 y$ B. o
| MCASP_PIN_ACLKX
, C" e' Q% ]& B2 k| MCASP_PIN_AHCLKX2 c! E2 P, M/ a
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
7 r$ |6 `) z8 Q" y& b$ n0 M6 LMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
3 H# t2 f" q! R9 r4 F* V| MCASP_TX_CLKFAIL - g8 |6 p2 E. @% X7 h( j
| MCASP_TX_SYNCERROR
" k: L. r  `7 H$ i& V. g| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR ' d7 A, B  B/ B
| MCASP_RX_CLKFAIL
; L0 O; Z7 |* b7 x, G) P6 y| MCASP_RX_SYNCERROR 7 E2 h  X) G" h$ \  y
| MCASP_RX_OVERRUN);
& n4 A- N8 `% J1 q$ r9 j}
static void I2SDataTxRxActivate(void)
0 W6 r+ b/ e, k; p, T/ E# A{6 L0 c( F6 y5 `) C& S+ P
/* Start the clocks */: e3 E5 \$ v1 q+ M" M8 F) x
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
& H* b! ], U. \( r5 ]McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
, g3 f4 u: }5 e) h) HEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,; q( w" d3 a, @& t% h( e/ ?
EDMA3_TRIG_MODE_EVENT);8 e1 k9 _0 J( B8 o
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
4 x5 W- L1 ^- WEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */3 X6 D  J$ Q3 M& O
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
& x8 W" R7 v6 d4 Y! R9 NMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */9 e1 \2 q7 y. M! u
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
1 y/ B( N7 \1 L( |& |" GMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);$ Q1 T: d4 C0 U
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
+ E0 x  B! d( U$ e& X- W}

9 o0 l1 Q+ f. R$ m- J+ ?) q
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

" i, k+ h+ g; H7 Z/ q5 e




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