嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
# ^+ ~" f9 J$ ~$ tinput mcasp_ahclkx,
/ L* @$ K$ t2 a8 Sinput mcasp_aclkx,
" L" q9 k! o) y# B4 P$ Y5 L9 rinput axr0,7 f0 E& @6 F' {5 |$ O
7 O8 [) g. r* v8 [: c0 ^
output mcasp_afsr,
! S, q) L8 t9 k9 ?" ?- l9 {1 `7 aoutput mcasp_ahclkr,( f3 s6 X' c0 r3 O9 L  ?4 l
output mcasp_aclkr,
$ M4 r: g3 Q; S% uoutput axr1,
8 R" X7 R* `/ Q
assign mcasp_afsr = mcasp_afsx;: F8 M" k" D) `$ a
assign mcasp_aclkr = mcasp_aclkx;
( Q. M3 S. z! F* A  ?% k( E6 r1 eassign mcasp_ahclkr = mcasp_ahclkx;3 a5 C( @+ ?& v& L1 B( [
assign axr1 = axr0;

. o5 J) M1 J0 x! M) R! X) e# m0 V9 c
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
) y+ m9 v7 F8 I
static void McASPI2SConfigure(void)
+ p) R; [4 x) \- P3 a{" T' W; H6 X+ f' l- f9 W
McASPRxReset(SOC_MCASP_0_CTRL_REGS);* I1 ^" N6 W6 }* L
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
5 a: ~/ l- ^( R4 ]) H+ u! rMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
4 A4 j; a: i0 ZMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */- t( j" |, T: x8 \
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
* a3 m( B5 E) Y# ^MCASP_RX_MODE_DMA);
- b9 }) T& g& D3 C2 A/ s6 w7 @McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,+ l* J! g$ P! R" n, V1 f
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */, |- I& A+ d7 r9 }  W& Y
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
; V6 j& h& g; I3 ~1 VMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);/ {- ~! m1 `2 l* F4 f* d
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, " f! T9 _* @- p" R
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
4 Y5 f5 \5 G0 c/ \3 dMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
7 P; E* b( \" E( Q& E8 |McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); / N0 E' Q2 |6 c3 Z; V
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
! T% c3 O& a- x0x00, 0xFF);
/* configure the clock for transmitter */
: q- n  x' r+ }% l7 @- NMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
$ L, u) M* T( n) ^. z* KMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
0 P0 \+ B7 A5 S7 |5 XMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
/ a7 D$ l3 O7 c" J; c; T0x00, 0xFF);
5 v/ M1 d/ ]6 W" V3 ^! {8 C# n% t$ b# j  q5 M* w
/* Enable synchronization of RX and TX sections */ 9 f; q- q8 M: y9 Z; d
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */5 x) R' p; E$ c# P" [! A
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
; m# U2 ]) v: Q" p4 nMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
2 ~3 i+ o$ q; K% R6 m1 `** Set the serializers, Currently only one serializer is set as
, c! m! [$ `0 g4 @3 _# R! |6 f0 N8 X** transmitter and one serializer as receiver.
: @3 j* L; n6 B$ k*/- N3 o$ d8 W# T7 E0 o9 L
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);: i1 \6 q; W2 d+ i/ J8 O8 i
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*; u, u. h- n4 j8 o9 d: V' t' F
** Configure the McASP pins % _  K$ T) Y! U# J. @6 ~- L1 `
** Input - Frame Sync, Clock and Serializer Rx' Y, f8 a! T( O
** Output - Serializer Tx is connected to the input of the codec $ U& G$ i0 @% U
*/; g; g8 P: C2 Z7 h% K) E4 `! |  L
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
. o0 N! {( M  v+ X& _4 I8 R2 zMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));% W; m2 h! @% W6 j' _7 ]9 `* Y$ r, D
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX: M- I' r5 X- C- t" H' {2 B
| MCASP_PIN_ACLKX. ]. H+ g9 e! f( X2 X# E
| MCASP_PIN_AHCLKX; t" K2 {# W; U5 b! \1 c7 d) e
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
' B& C0 V/ e5 {9 }1 G  K  q4 tMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR + A4 j4 @# z8 h0 M+ `8 L5 G# M
| MCASP_TX_CLKFAIL 1 S, r5 S% S) M; f% d* a* H
| MCASP_TX_SYNCERROR
: w% ]) L6 X- b& n; J5 r| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
2 k* A- f' x( S* q1 l4 Q| MCASP_RX_CLKFAIL
) S* ^8 [% n1 x7 h/ ]3 C5 q6 [7 j| MCASP_RX_SYNCERROR
) t( }4 P8 J, _6 O+ G6 q7 L  h| MCASP_RX_OVERRUN);
- h9 ?& I0 d' z" {$ r}
static void I2SDataTxRxActivate(void)
4 i, @. p7 x3 O& D4 ?  {/ c  z{& m/ H, e3 e7 I) |$ F/ e' L* C
/* Start the clocks *// R: h! T7 j, k
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
. W; t# D2 D1 J% P# Q, hMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer *// Q1 h# j7 g  o
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,* X7 v3 u- O  v3 D0 ?1 }
EDMA3_TRIG_MODE_EVENT);& T* P- t8 R0 H2 Y7 {9 G* D" ?) L2 c
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, / T" |; Y6 c7 }) t
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */$ T! I6 H" H( T/ N$ u& y
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
& C$ F' K! c; t2 eMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
& `; O/ E1 ?( q0 f2 @7 ^9 v* j9 vwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
' |  K8 Q5 `! L$ t9 I" WMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);8 ^/ Y( s% ~, y' ]+ {
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
' X9 `) ~7 y$ z. u  ]( `8 A}

3 z" `/ U* z& N( ^
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
# `7 r; W& `/ K9 R0 X  o0 w; d





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