嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,0 ^+ G% D0 d  R+ j% J
input mcasp_ahclkx,
( M$ C! G8 h! A4 H" S- W  Zinput mcasp_aclkx,, F( O) X: X" ^( c  M3 N: S; O( w
input axr0,
' ~& y) @* S( l$ P/ L+ R# X+ ^9 u5 ]5 o) w7 K7 k
output mcasp_afsr,
; d6 j7 f( W, d: Koutput mcasp_ahclkr,
8 ~0 h( c7 L& loutput mcasp_aclkr,
4 S7 i5 W4 A6 B7 `; Q% B- ?/ k$ Doutput axr1,
: Y* k. l7 B  K
assign mcasp_afsr = mcasp_afsx;( y7 E% v) _, e, l- U
assign mcasp_aclkr = mcasp_aclkx;
! c* X( ?$ P% Kassign mcasp_ahclkr = mcasp_ahclkx;
7 @' ^6 a+ i) Bassign axr1 = axr0;
0 W7 s1 _9 g6 s' @* z

1 @+ _, J+ ^# \/ _
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
9 [9 V/ n! ]- q: @: `- Z
static void McASPI2SConfigure(void), {3 X/ a) ?( Z% i5 g+ W& D
{
5 X* o. p4 l9 a- Z* `3 l8 B( rMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
+ U, `0 |# R6 \7 C& X& X- xMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */# b9 v9 G. ~/ S; `
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
% \+ }! }' V5 UMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */1 U0 h: i/ ^+ O) ^, k
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
! D, T7 g: `2 j' Z4 hMCASP_RX_MODE_DMA);
7 }3 W- E0 C7 v% @# l( M) YMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,' P* Q+ y7 }, [( t* |+ P+ z
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
) b" s7 t) @# J& g' r; I3 EMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 3 l( f+ Q; H5 r: }3 W* R6 o7 G
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
. A3 {; w8 t7 M: eMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
7 y) }/ ?' D- Y# m5 q0 uMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
  v9 a+ P& G0 p1 j4 R# G& ]) XMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);8 W1 z) c, y+ g
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
# _6 b) G) B8 ]0 OMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,' U; h& ?: q! Q; g) B; w; [$ L9 v
0x00, 0xFF);
/* configure the clock for transmitter */
) @% a1 H! V5 \% RMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
. t# _; F2 o" I0 Y5 H3 d& ~McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
% G& y6 Y; m8 U7 j. j$ j5 M: TMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
2 V) h$ {$ r0 {8 P3 u. G0x00, 0xFF);- u3 H. D' G2 R4 i. C9 a9 ]

5 l" k8 O' Q+ q1 b' u/* Enable synchronization of RX and TX sections */ / V4 b! |* r7 `
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
3 M  E! _0 w" U) \McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);$ I8 O1 h: c# g" [, \% Q
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*3 [' E% {% d% c
** Set the serializers, Currently only one serializer is set as4 H' H- X( t/ U, a( ^
** transmitter and one serializer as receiver.6 m* }7 Y" Q* R" D  l+ }$ _, O3 t& i4 W
*/
/ m) X# d& w+ L5 M& \$ |$ a$ OMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
5 w8 c# v6 {# A8 q0 FMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*) o4 a+ J5 _# A+ L5 M# m, i% E7 E
** Configure the McASP pins 3 f' J7 @. U8 a! e& e. x
** Input - Frame Sync, Clock and Serializer Rx
; Q8 x" E' B# g. _** Output - Serializer Tx is connected to the input of the codec
3 L) D) o8 ^( z2 k; I; `$ Y*/0 `/ x/ s3 ^. }) ^& D+ V8 I( U
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
& O3 m- J) m  \3 b3 h* pMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));# |  y( z- d$ H( @9 B
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
' T1 ]) F: K$ M6 L8 w5 D| MCASP_PIN_ACLKX
7 {& o+ q  V- f* ?; |  z3 `| MCASP_PIN_AHCLKX
* V7 \/ }7 R0 C; f' q| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */0 _3 v4 ?  k4 h1 P0 a2 ?# u
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ' @& A8 n/ _1 P
| MCASP_TX_CLKFAIL ' _7 W( p8 \+ Z3 |1 U
| MCASP_TX_SYNCERROR
" F4 Y$ u! A1 e2 Y+ B8 L% y| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR / C2 W! m7 E) I) B: s% r4 E
| MCASP_RX_CLKFAIL: p3 P: ?# m% c5 S: K2 Z) h; c
| MCASP_RX_SYNCERROR
& s  Q) l6 G$ }8 w9 i0 V% `| MCASP_RX_OVERRUN);% k- I% W" d( e7 D4 _: ^+ Y
}
static void I2SDataTxRxActivate(void)# c9 K0 L: z1 o+ _4 i$ v0 t
{; Y" V/ S, g; c: x) d3 M* Y2 m* ]
/* Start the clocks */
2 t  A5 Q. r" q# |McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);2 X0 x: s$ |% E" l2 N
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */( _; i9 f! Z. W5 ]  D; D
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,( t# g4 ?2 k* e# L  U7 [
EDMA3_TRIG_MODE_EVENT);; d# h) w9 Y7 p) [' k8 n
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
& M6 z; m. m( W" t4 J, J* BEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
' E( n; t4 p& mMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
+ V  o6 Q* |2 RMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero *// h4 b  Q" O6 D6 l1 [1 w. |0 v' \
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
& y3 o0 z) |7 F; ?1 R* J5 ^McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
  M& ]4 W1 y8 X& ?9 j# AMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
% i: m1 A  {& m}
9 y% q& [7 s+ @3 b; j: t. t
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
" O# Y9 S$ D* A6 u0 Y! r, [3 {





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