嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
  X' J2 q; Y' `, T( l& ^5 Xinput mcasp_ahclkx,& m( S9 R. e( e
input mcasp_aclkx,9 E+ b- p3 |# O# R4 s4 h0 x' M$ ^! Y
input axr0,( `- E) k3 [1 Z' U0 Y! x

$ Q4 l, ~0 m2 Y% P' k0 b0 Ioutput mcasp_afsr,
; R8 N8 w$ \. {  Coutput mcasp_ahclkr,
) z: h1 v. A. P4 Ioutput mcasp_aclkr,' V3 o) ?  ]7 K% }: z" `
output axr1,
1 l7 C  V* H! K$ {' T& B
assign mcasp_afsr = mcasp_afsx;
2 I4 W0 L4 W) I1 D' P* p3 O) @& rassign mcasp_aclkr = mcasp_aclkx;
7 c( L! K0 i: U$ h  q) Kassign mcasp_ahclkr = mcasp_ahclkx;' g/ E8 _8 Q  S! T
assign axr1 = axr0;

9 r6 S+ a( B9 L% V
% l. l0 l6 t2 L8 R! F
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

, s: v- x, _+ N% g. i
static void McASPI2SConfigure(void)
( `" W! [1 ~: g# ?0 g. w$ ^  y{! l8 D4 v7 |% p$ i: H* ^" E
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
2 O2 m4 N* N( Q" g% r8 |McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
4 h. T) q! I& S2 A# ^9 [McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
+ L( l2 N- l. B/ M% Y% b, VMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
! m$ g. U. N$ m$ G  ^/ S; B3 W( e% e) jMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
6 @0 z: _1 y  t* a; X: U/ n+ y( {MCASP_RX_MODE_DMA);( }) A$ S, v+ ]* ^: @* ]
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
/ w7 y" \, Q: ^  P& W$ }1 uMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
9 T  _$ @9 w1 H$ mMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ! \" _( J6 ?' a1 j4 n
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);) K6 B) p  d* c: f
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
" U4 _* o: k! @8 m! U7 rMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */8 W* U9 V1 p. ^: h/ A2 O
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
( Q- A! ?( }0 M0 g2 ZMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ) x6 S4 F. F( q( R7 B
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,  ^! _1 `2 e$ C! ]
0x00, 0xFF);
/* configure the clock for transmitter */" i1 ?' l0 G' ?2 J: v8 Y- O: ^
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
8 V4 S! a6 a: u, T2 I( lMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
( l# {& O2 b$ _, b  v" BMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
# e' p& c9 P1 ~: B3 H5 b0 _( c0x00, 0xFF);
; w% `0 C  x; P2 a  ?! c) {/ c8 ?1 Z- F0 ?9 A  I* V. z
/* Enable synchronization of RX and TX sections */
7 B; X: _# |- r: zMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
4 }& f9 L+ m3 `2 h$ n" }  M4 gMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
- A! S" J4 p; r, JMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*6 m, J! S& ]' `# X
** Set the serializers, Currently only one serializer is set as
3 g/ t9 T. D" O) i- w7 W. B** transmitter and one serializer as receiver., M3 f# p6 k5 L& Q- k- e
*/
+ e9 e5 F5 J7 BMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
8 A; K# A$ x; V" j! y- |: a' U# GMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*3 s1 ?  }# U) {2 \; v. b2 O( K8 {
** Configure the McASP pins
) X  S, d2 @- b; a** Input - Frame Sync, Clock and Serializer Rx
# d9 Q- ^' s! ~7 l5 \** Output - Serializer Tx is connected to the input of the codec
, q0 t& h% y( _*/3 |5 r% l) O4 V# ?! T( }& Y
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);* G# g2 t# a/ Q' w( @9 E' u5 K* V/ j$ E" `
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
% ]9 n: O6 H) }McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
( x6 H& W- z) d& i: J| MCASP_PIN_ACLKX
4 Q! |3 {( N6 t) j: }9 H| MCASP_PIN_AHCLKX! z, w( j0 x, i# C
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
3 o: c& K) U  s8 ^: t' a  Y2 ?- eMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
: b& l) _- H9 a3 G( o| MCASP_TX_CLKFAIL # b# p" J# \7 H5 A
| MCASP_TX_SYNCERROR
" n6 P$ R9 O# S| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
) p8 o) Y3 I8 k% D| MCASP_RX_CLKFAIL
- Q6 ^& Z; v  V& t( b3 r| MCASP_RX_SYNCERROR
' T" N  D8 @" X$ H. L| MCASP_RX_OVERRUN);
; F* v$ y" \9 g6 K1 P$ @% M# ^}
static void I2SDataTxRxActivate(void)+ j2 f7 [% F; u  R$ h# \
{4 x: m6 t6 m) i& q' Q
/* Start the clocks */6 I3 j. y% m/ q* L
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);( V2 [& y3 Q# a# R* T, d* \9 @
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */! S* n+ P+ f' U! u
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,5 ^. t" ~( K& q. r
EDMA3_TRIG_MODE_EVENT);
9 c) h& |' f9 p* a# E6 _EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
* T+ i0 H' v& D7 n- N5 PEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
" q$ _  ]+ d* `2 CMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
1 f( {* l( [) ~, H# qMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */  J/ a8 P3 ?# S* B( _+ f1 I. d7 P
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
* F! L$ d, o1 Q& qMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
; U; e. M1 t6 K! KMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);; I+ b5 S. B" t( ^* y. G3 P" ?
}

) i0 T4 ^/ A  _3 K* o# i1 z$ S
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
* K/ S, {# J& [- B8 B# l3 W$ x





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