嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,* q" }: k9 B% r: k2 S) u* t
input mcasp_ahclkx,( Q2 e. ]. p! L1 [6 H
input mcasp_aclkx,
  S6 r4 t' D% I6 @2 Vinput axr0,! `' \7 d2 j$ J; y3 D( b! M2 a
7 L# A1 U7 ^6 l) b& P0 n3 B5 r9 P
output mcasp_afsr,
+ A! Q( f/ m2 Voutput mcasp_ahclkr,  b6 F6 D$ C$ u; g
output mcasp_aclkr,- h  O8 V" `: _* h5 ^
output axr1,' q2 R+ G1 l1 Q7 u8 O! u, r
assign mcasp_afsr = mcasp_afsx;
% w5 f' V' A$ y( Q' K- c# w$ ^) Rassign mcasp_aclkr = mcasp_aclkx;( Y/ @  N" N# U
assign mcasp_ahclkr = mcasp_ahclkx;8 @2 x  [% I1 S- G1 o2 z* W
assign axr1 = axr0;
# O6 ]" z6 k/ r5 z4 E+ _5 ]1 j7 R

' D* f9 j' l1 H% z9 B" l* |
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

. M2 T, f6 T- r. S, X2 l% N
static void McASPI2SConfigure(void)6 ?# X1 @7 a5 Q! W! k
{
( y( I  ]  A+ u8 b  p* s2 CMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
9 J% G$ h% N3 d7 r8 {9 v- n+ |McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
! m, F& c) O+ ^$ O0 M$ uMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
' p) E/ _+ V& e0 a2 u. F9 MMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */, F! l! j# S1 Y' z! x, ~. O
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
5 l5 U' ?: y/ v% ]- _# NMCASP_RX_MODE_DMA);
' @# x. S3 J' q2 f. c2 QMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,( j* v4 V) @- V% s9 W) H* t+ E
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */) G3 M! A8 @, X! q' ]- i: ~
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
3 Q! L1 a' `+ x1 J# x3 Z, yMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
% j2 c) t3 b- TMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
' W( |% l9 P/ L# rMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
; w( S, p2 U- W8 g' T  PMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);0 ]6 M! T* i6 z7 Q9 t
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 3 t! X4 q: q6 e- a# q( @4 d
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,. ]( `2 r. s$ D* l( I: ~
0x00, 0xFF);
/* configure the clock for transmitter */
" v' Q6 P! l6 I+ w' {McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
6 ~1 O3 i* ?; L' n: f( H1 Y" pMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
0 |8 k; A. Q! VMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,, P$ J* Z( t7 m  W7 D
0x00, 0xFF);
7 K  X/ o! K  T7 M2 Q$ F
9 N7 p# ^: L/ v& R/* Enable synchronization of RX and TX sections */
7 s% g! g7 @: H" G, tMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
: ?% z$ V* a4 _+ P; p  _McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
" j+ W  Z  J" [McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*, \% P1 U6 V+ n
** Set the serializers, Currently only one serializer is set as
" J) t( c, g% b; l5 m** transmitter and one serializer as receiver.
' H# E" w$ s$ E/ O6 w*/. h- K/ e, T7 D. F
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);6 V& h5 e4 ^$ g' {+ d
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
% t. ?9 L, ~% o** Configure the McASP pins
- a9 J& v% Q) X, r** Input - Frame Sync, Clock and Serializer Rx3 v% @6 V+ e( w, p: @- d0 m
** Output - Serializer Tx is connected to the input of the codec
# b  K  X/ m. O) h( E6 }" r*/9 v6 t* d% {/ T+ b5 G) o' j( R
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);" ^( a( t) G. Q# x; N- ~
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
  j  C: Q5 v; x# c8 q! }$ ^McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX( K$ G+ P$ G* x! Y  A5 l
| MCASP_PIN_ACLKX
- r: M9 C+ p0 s- s$ \0 ?! k| MCASP_PIN_AHCLKX
% o0 D' y6 d  D& H. V| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
" H* h( R; x5 bMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
4 d! j3 D+ m7 K$ O& L| MCASP_TX_CLKFAIL ( a, O. k3 j8 m+ \- u- [+ V- `9 n
| MCASP_TX_SYNCERROR( G9 T- M3 a( [( \* \) ^
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 8 Q+ l* F: S0 W" j  k
| MCASP_RX_CLKFAIL
) t, p+ Y6 E" q4 e| MCASP_RX_SYNCERROR + Z, j8 w4 j8 y- |
| MCASP_RX_OVERRUN);
" E, q3 e% n/ X( [: ]5 u}
static void I2SDataTxRxActivate(void)
8 G; N! V% D' X% N$ E% W9 S4 O{2 F  L% H9 s& r+ {# [  E" S
/* Start the clocks */1 z+ t. [1 B0 j5 H
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
( a8 e7 r$ h7 C( _" `McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
3 Q) b" @/ S' u; t+ T0 MEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,. O5 h, |. X2 |
EDMA3_TRIG_MODE_EVENT);
# |$ E4 ^0 W/ ~  V5 {EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, % Z" R; W8 m0 z. F+ Z: E
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
8 C' E( ?9 @0 M8 A! `- ?/ tMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
7 ]) b( z) z( t7 w  t* sMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
  x6 }& h6 s4 Kwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */2 G2 i& o6 h8 P) Z+ ^+ x  g! |
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);( f" D' M2 P  }+ _2 [' ^1 A  d
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
+ c1 W2 z7 {, d4 K}

$ ^2 f9 F  k) W( s( e
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

0 k' i% u3 b1 s




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