嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,( [0 @. N9 W$ B% @& r
input mcasp_ahclkx,& z, R) V- ?  r/ G, A
input mcasp_aclkx,
% z% \( i9 J" l2 b& x& Einput axr0,
3 q- X) A* ]# L, x  G, g; |  @2 A4 w% c; r: _6 B
output mcasp_afsr,
; P( `6 E, E- K. X: B8 ?output mcasp_ahclkr,
" h7 W: o) C7 u7 houtput mcasp_aclkr,
' {3 P+ Z) b0 t  D! houtput axr1,
' ^& i+ k2 B; V9 I# I/ [0 d& q
assign mcasp_afsr = mcasp_afsx;8 k5 y. i. G, ~% @% E
assign mcasp_aclkr = mcasp_aclkx;
) A! T1 B6 w( Dassign mcasp_ahclkr = mcasp_ahclkx;+ j$ A9 G# Q6 P) X* [" i
assign axr1 = axr0;
  e  T" R7 ?) X7 D1 ^
& `8 f) |, E% ^( o
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

, `" t* k8 _! G- U# g# v
static void McASPI2SConfigure(void)
1 s/ C! U( D4 x{, p  X3 V6 G2 ^: y9 a
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
) F; F7 A' |# T" SMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */, ?; q; e* {5 Z& O
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
- n8 _! f; N$ f  SMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */1 b$ O& @7 N) ]
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE," j3 x8 D7 {* v+ z  i. X* Z2 i
MCASP_RX_MODE_DMA);
2 U* H6 h! F9 X+ w. E4 P7 fMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,; P( v7 W1 @! |/ U0 A7 [
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
; P7 B4 M" _- v$ }& ]McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
; e5 R! ^* v1 }MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);, }3 W6 d5 e0 X5 O/ H, H
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
8 k: G, T3 \% n- hMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */# Z1 b7 a' O& n( H" U2 e
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
7 v- ^  w) w% ~0 C# J6 Z5 F+ nMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 5 |) `. b2 U5 h2 ]- _
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
0 c8 q' I9 u8 w5 ~& O3 V0x00, 0xFF);
/* configure the clock for transmitter */
( ^, c" A6 A, kMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
9 m0 `4 y& {6 k; TMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 3 `% b* T. P5 s2 P) P/ U1 J+ T- n
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,* P1 B5 ?0 ?5 X8 N/ w4 ~: a7 c
0x00, 0xFF);2 S+ b; }6 E! s* J! S4 p& K

6 F3 ~6 g, i8 a" H/ }9 v! F/* Enable synchronization of RX and TX sections */
4 Z4 c) e) ^6 C4 H! DMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */2 }) L0 x) N+ F/ q
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);2 F& Z3 a; s) z+ L1 G0 G/ ], H
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*1 `( t. s( [4 \1 M: \0 T9 E" W
** Set the serializers, Currently only one serializer is set as; R8 R$ Y( _; ^; ?. F8 o
** transmitter and one serializer as receiver.' l; _  w% v3 P: _: x7 g
*/
+ p! M! ~, T; t% O6 V0 \. W; H: v+ mMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);( X! x3 @: c! s; K1 I2 P& R  h0 b# d3 e
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
1 g; m2 c# N: C** Configure the McASP pins / d4 R' \, m2 Q3 p- l1 J
** Input - Frame Sync, Clock and Serializer Rx( C4 p; c0 X2 ?9 E+ P
** Output - Serializer Tx is connected to the input of the codec $ e' t+ k. D7 o! f9 d1 |
*/
* ]$ k5 T3 X! p0 Y& r. M- u5 eMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);1 e# e4 b4 k5 g3 m; p1 Y
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
" f9 F/ U' h0 A9 }3 O0 ]9 B" IMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
" m, j$ H2 L# c' H7 i( k| MCASP_PIN_ACLKX$ g5 J6 T, C; v; }1 i" C8 O
| MCASP_PIN_AHCLKX
* Z2 y* ]3 b+ b| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */# j! H- A, K. l) ~/ J0 G4 L
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
- u! f% y: U6 J% e" i* n| MCASP_TX_CLKFAIL - V/ S! A; C4 ^2 S
| MCASP_TX_SYNCERROR0 S- b2 [9 e/ G7 l) b! t! ~
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
" t3 S" d! O9 G8 w9 r| MCASP_RX_CLKFAIL$ k( L0 v  C$ g# r, A
| MCASP_RX_SYNCERROR + @; Z& J% z6 R  h) H- r& ^
| MCASP_RX_OVERRUN);: ^7 w/ R3 r" K" v
}
static void I2SDataTxRxActivate(void)3 g( q' f' N9 ^% h- k, A7 |+ H
{% s9 [- e4 [8 \6 }" |# V
/* Start the clocks */) ^! B' w5 M* O& l1 F5 Q7 Z
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
; J! \" n5 L8 P/ aMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */9 w! \) Y2 B) j. ~8 [2 R7 V, \- _) X
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
% t" s9 R, M) WEDMA3_TRIG_MODE_EVENT);
$ H* P3 a9 `4 Z0 j5 REDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 5 ~( `& F. [1 O3 H: A; `' Y& o0 \
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */2 ]2 d5 J- s3 |, x
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
6 @1 ^3 k' I/ o3 p. D1 j% MMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
, `$ c; X& D" z! j: zwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
; |. B9 x& G6 \! q) {McASPRxEnable(SOC_MCASP_0_CTRL_REGS);" m) R/ c: o9 X1 D) X: O
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
# {2 l* b" L0 N0 M}
1 W# [" f. r. ?- X) V2 {
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
2 E" z' y1 Z" e3 f3 R  |5 w) n2 S7 N





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