嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,' R. U; ~  t% L  I2 [
input mcasp_ahclkx,
6 X& T* `; }9 f+ S, z0 kinput mcasp_aclkx,
. @, B' m  B0 M3 i: B" \input axr0,) P: h4 x" t) |5 }8 I# Y5 v
4 u: B2 e- j$ P
output mcasp_afsr,
. y0 H6 a* |. t( W+ Uoutput mcasp_ahclkr,
# U. a0 d2 t* D- J! v. Poutput mcasp_aclkr,
& @  L! [9 j( K& c. X& k# zoutput axr1,( [% M" [/ m) Y4 {
assign mcasp_afsr = mcasp_afsx;
0 B6 h2 _6 y# n* m! Iassign mcasp_aclkr = mcasp_aclkx;
; z: z; J/ `% y. G/ ]/ z5 B3 ]assign mcasp_ahclkr = mcasp_ahclkx;
* t* Y1 p# z- c) m9 Zassign axr1 = axr0;

0 Q1 ^: v+ h5 T: P6 N( r4 o
! Y! h( @1 K" S
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

! p4 [$ s6 w3 N  ?* @$ Z
static void McASPI2SConfigure(void)
2 S( a+ _& C3 i! G$ b{  d& ?. r) r5 w/ v: f
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
$ \  G' n2 C; `& cMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
, T: B# ~' j" Z0 K. RMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
9 p7 }9 X+ d. S& [/ \& SMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */3 q7 F" ]9 A7 [
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
: Q" O6 _* s1 ~, M% KMCASP_RX_MODE_DMA);
. G0 i3 m. b: z& Z# x" A7 t* ~McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,5 w* |$ ]; }& z3 J% J
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */0 X& W) \0 t! H. f9 f. ^1 l
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
( B8 f  g' I4 b7 I. y( KMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
& }7 D, [' B& A1 t  rMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
* D- w) B- i' x( g! I% I1 T2 t1 HMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
2 w$ R* R5 o* I1 RMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
+ V4 A- @& K" ]0 `  i5 }McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); & k# ?# {' Z5 d
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,3 |/ w+ Y3 l# {3 E
0x00, 0xFF);
/* configure the clock for transmitter */) g# [  p7 U& _/ W
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);' k6 F# S: S: H
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 5 M( L+ @  \8 j& S5 n9 k* m
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
: C$ N6 Z6 R1 F) o$ T" O0x00, 0xFF);
2 h/ [" ^, m: ^# t! W1 P+ Y+ B% Q, @5 b* _
/* Enable synchronization of RX and TX sections */ 3 l+ n( b# H+ {9 A# D
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */1 s) j7 S; m& P8 H+ e3 H2 ~
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);, s( W/ j* c% |/ [8 t. k
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
& X7 Q$ Y% e3 j8 I" R** Set the serializers, Currently only one serializer is set as
3 T/ J0 F6 ?7 O9 [4 j) |0 J** transmitter and one serializer as receiver.
2 P' k0 @. l+ f*/
9 S9 g: o  Q( T# ?+ Y3 k, R, IMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
; D1 d/ r7 r# Z5 R$ }McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
" Q4 n6 v7 i. x4 V% {4 ~# q** Configure the McASP pins % t  `% G' r8 F8 T7 P% [, l
** Input - Frame Sync, Clock and Serializer Rx
" S% O( I' \8 B$ [* E! {2 b2 i** Output - Serializer Tx is connected to the input of the codec   H+ n/ p9 r( {' K5 @9 M1 b
*// y/ C6 _$ [+ h" o. o
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);( ?5 T, e( k8 {' j" S! q' P
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));2 m" |# k# c8 S/ F8 Y
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX+ Y: Y# C# |! |3 _
| MCASP_PIN_ACLKX
( J2 @9 L7 Y- b8 U3 m4 r7 q6 l| MCASP_PIN_AHCLKX% @& D+ D9 k) L7 d
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */  ^2 h: z3 Z" Z8 U; s
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ( n8 L; ?- h0 N* t. d
| MCASP_TX_CLKFAIL
+ y" ?6 X& t5 C" c! Q  ~$ [5 L| MCASP_TX_SYNCERROR, O" M( L# J8 ]6 I5 a0 w, l& L
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR & r' p4 z3 H- ~' X
| MCASP_RX_CLKFAIL7 C/ ?! D9 R7 w+ e* b
| MCASP_RX_SYNCERROR
9 \, E/ q1 o" K) z" z% X) v; L| MCASP_RX_OVERRUN);0 H) x4 v, A$ h
}
static void I2SDataTxRxActivate(void)
. D' ?% d& f7 s8 k) _5 y( \8 w{) f  v) T6 @( {0 y
/* Start the clocks */8 p/ V4 r5 q6 j  j
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
+ s2 `2 j- I% e  QMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */% }& `4 \$ X4 h
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,# q4 t" }$ C! e1 J- Z' j2 V
EDMA3_TRIG_MODE_EVENT);
# I# m9 P. |1 I: n& y* @EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
( z+ h# Y" u( O# {6 {. AEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
' k" F, m6 b0 U* D; B7 h9 M9 fMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);* \" {4 A% Z- v$ t6 C- c3 l  _
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */# o+ n$ n  q& s8 }3 |6 Y
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
0 t; F' K. C7 X- kMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
: Y& F6 Y$ `5 R" r) a/ A9 t5 @McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
/ ]. L7 n  O( f& p- ?}

. s" {# W! {4 l$ X" J. a
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

# a3 ]0 }' b/ u" U# `




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