嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
% \8 P3 p4 M$ ]$ M0 {. E1 [input mcasp_ahclkx,: V7 C7 J% L1 j; O* l
input mcasp_aclkx,4 k7 O# g) P* F& m
input axr0,. r5 L; t+ s* f' I
5 Y! S! g! u* ?9 H
output mcasp_afsr,
# k* z- f5 o" R. D  V! [* O3 i2 V7 Woutput mcasp_ahclkr,
4 V( D6 {% k2 x6 ]3 m# O$ b+ koutput mcasp_aclkr,6 \, l* `, K7 ^( V) q
output axr1,
" X8 J0 G4 C* I/ z: A8 Y
assign mcasp_afsr = mcasp_afsx;
: z$ F. `: M8 L/ c# u8 T. ?5 Tassign mcasp_aclkr = mcasp_aclkx;! h0 O% m, r1 A1 A! D# D" U
assign mcasp_ahclkr = mcasp_ahclkx;
2 D3 p% d9 [4 \* K& j( U. yassign axr1 = axr0;

) x% C( n! A# P7 A" p+ R2 A8 p
' L1 g1 k) k2 C4 F
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

3 v1 l: q  k7 i- M) B8 Y
static void McASPI2SConfigure(void)
4 F: J' ~$ Q; y; Q; w. U{) w8 @( q3 p+ M/ y
McASPRxReset(SOC_MCASP_0_CTRL_REGS);/ V" U! a1 p* c% w
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
3 W) M! L, k. ^/ _* O0 R% PMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);: C  g6 \  U' l0 U" f
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
+ x" u. d4 J, ]McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,) g4 U- x0 r; |# L6 F# v
MCASP_RX_MODE_DMA);
$ P8 w  F7 w( p0 s$ }McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,9 p0 J7 u5 F' x. F
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
; e, c) \1 x; x' m6 W: I" e0 tMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
1 }7 s! B1 O- K" B- vMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
6 L; g+ E/ e/ w( RMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
  V7 R) `1 }! I' WMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
, T- y# _  w" |- CMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);% V0 q& G$ l# r& m7 t
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 0 C8 q3 n7 l. y) L" X; X
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
. `. k# _$ K( x# H8 Y0x00, 0xFF);
/* configure the clock for transmitter */
1 }) ?6 }) ^2 WMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);- n4 Z2 b7 e. H8 y+ K1 p
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
, ?9 g2 ^) v+ L! jMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,! Q9 ]" U% s* v3 z- D8 w& v7 R* L
0x00, 0xFF);, s  w# V: I, d5 C6 f/ Z" u

5 M, v) t3 V6 M. j5 U- @7 R2 r0 Y/* Enable synchronization of RX and TX sections */ $ m7 x6 u7 T0 c
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
; |' \# B6 t/ d" |9 k0 kMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);$ Z+ M+ Z3 l8 P$ l
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
- F0 P+ [( ]* p! b** Set the serializers, Currently only one serializer is set as
) \# t/ v) S, d" l$ h** transmitter and one serializer as receiver.( a; H* ]% }. e6 ^
*/' G8 W* [3 C# V  C
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
, L4 q" r1 s6 J" m1 }0 s0 }McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
4 u6 `% N5 ^/ X+ m** Configure the McASP pins
4 |- T4 V2 y. _* {, `& y- ]  V** Input - Frame Sync, Clock and Serializer Rx; u/ g) D2 @2 M
** Output - Serializer Tx is connected to the input of the codec
( B1 B6 I1 I" M9 l*/
: N, L( ^6 J  p# X# |McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);+ E; ^% H' I" n
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
  A! i) J! O/ E9 @6 M  `McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX2 R- _- Q. P. S7 V: ~
| MCASP_PIN_ACLKX# ?+ R, o9 {: Z
| MCASP_PIN_AHCLKX
# f$ Q; n$ _9 c) P) }| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */5 w$ {" Y8 |  Y0 ?5 k
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR % ~# \  s: |; d
| MCASP_TX_CLKFAIL
5 X6 w* m: x- B2 i* f| MCASP_TX_SYNCERROR8 f" x, q" M0 H$ @0 @
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 3 h) A' }* q( V. k2 R! F! V7 G
| MCASP_RX_CLKFAIL
! |/ W( |1 F( E) n( X7 Q| MCASP_RX_SYNCERROR
' N( x7 |5 Q3 r2 h# T; E+ M| MCASP_RX_OVERRUN);* C/ X. P2 G& Q* h; ~
}
static void I2SDataTxRxActivate(void)6 D- u2 j" ]# }/ v
{+ ], U8 x1 g- Y- F) f
/* Start the clocks */
# a; [( W& N; O3 G: y( n  D% OMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
. c$ a7 G' ~- J# a) C6 vMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */9 z1 i1 j5 N: A7 u: Y
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
/ v: ?: b/ {! U* g: ?% d* U4 wEDMA3_TRIG_MODE_EVENT);
: p5 D/ P8 u4 t& g! WEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ( e7 ~3 F+ k8 P  n5 @6 h: a' s
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */3 E  c3 y& F& q# K
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);& K! H. Q0 L3 R8 b, k9 `' m6 Q
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */, N$ _+ Y" D5 w+ m8 b# u/ ?
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
$ R3 Q: x! ?  }1 V' PMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);- J3 @% S! ]4 I' u, O: v
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
8 l: K5 I% @* R3 _& u$ y& w0 j9 h+ k}

  L  g( w# C6 ]5 q" L
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
# o4 B9 K* r! x3 s" s9 Y0 {





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