嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
' R2 z; v: u2 z2 w7 K& pinput mcasp_ahclkx,
; p- }2 G) T5 J+ Z1 ]input mcasp_aclkx,
5 M6 k+ g( b- H2 E# rinput axr0,% s! u; O6 w" R* B8 X3 n$ x; C* ]

" N8 k) ?9 [4 ?9 r7 joutput mcasp_afsr,
" w& K! x# r& v9 L; x  Y# v3 Woutput mcasp_ahclkr," e/ C. W2 t; J2 R9 ~
output mcasp_aclkr,
, w2 G0 F) S5 k. O  Foutput axr1,$ d2 q6 x9 [' h- v" W' s* [3 E
assign mcasp_afsr = mcasp_afsx;
) |" d  i1 h& I9 S/ I. b! [9 Jassign mcasp_aclkr = mcasp_aclkx;
& M; J4 V3 B0 N( D3 c$ o1 eassign mcasp_ahclkr = mcasp_ahclkx;+ g* r" ]6 R, o& H; m* \) W/ w/ l
assign axr1 = axr0;
+ h2 U7 _$ K  k5 W

% q2 T, U, I6 L+ p) h9 c9 W
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

! ]  m. Y) e7 f& U4 |$ x5 Z1 Q' ~
static void McASPI2SConfigure(void)+ n2 b8 }4 X% F* `
{
( {4 h* k8 L, `! F  sMcASPRxReset(SOC_MCASP_0_CTRL_REGS);- o% c$ i/ L% {, W
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
+ P* |8 N* Y3 {& [2 W2 d$ _McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);* |  C- c9 K( B
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */: m; m4 M3 |( e* O$ c
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
# e4 K& d, U4 v7 O! ^MCASP_RX_MODE_DMA);
. d6 z& _3 ?: }; vMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
. \& S* w# y( q% cMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
+ i. Z1 t" B9 d) `8 {3 Z$ O2 ^McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, # S$ f, T1 S: F
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);' {" g. j6 F# M( m
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
# ~$ s; B: d9 N. U. F1 ~7 mMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
* H4 k. ]( T4 {) [7 WMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
1 q, \! F6 u" @* }% ?( L3 TMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
$ V' k: P& J  j/ s5 ^McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
9 l. o. y3 @- s$ Z) n# G# a; r* h0x00, 0xFF);
/* configure the clock for transmitter */
1 [. m  B# ~0 T: xMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
0 ?, x0 W0 Q& W9 Z9 n6 ^McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 8 U/ V  x0 q# _. r# p
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
8 L' Y' ]' B5 p+ _/ X0x00, 0xFF);
; U0 f; J/ a& F' L
1 J9 Q4 g  j, @7 o/* Enable synchronization of RX and TX sections */
8 e! o4 @" l2 ~  L' \McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
, e( B& X$ L$ W$ TMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);  d+ d3 D" U7 A  ^. Z, m
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
# y# d9 f  k& y* \6 v** Set the serializers, Currently only one serializer is set as
$ U* g: w4 X# h0 c9 p! b** transmitter and one serializer as receiver.! A: Q1 ?. F: U7 j3 @
*/7 ]  K0 h7 M, L6 e
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
+ |# G. i4 r: i# t2 dMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*; l# L. _( _% D1 I# E
** Configure the McASP pins
" n$ w5 S( s6 i3 D! ^1 ^** Input - Frame Sync, Clock and Serializer Rx( q1 z+ V7 K9 K% L0 Y
** Output - Serializer Tx is connected to the input of the codec
, _% s7 \& e$ R*/8 X7 f9 Q# V$ l  ~5 L
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
  S& L: t& ?) w% S2 O) R. VMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
9 w  s8 }2 p% |. \7 D3 R2 R+ ?; S5 m4 AMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX% R1 }' N3 c3 l/ c! t) @0 a' i
| MCASP_PIN_ACLKX; v: z, s( Y& L" s( [" z
| MCASP_PIN_AHCLKX
. x0 k- h7 c5 d+ f1 B| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */! {/ y! A* l2 N
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ' }1 [6 t# g0 E
| MCASP_TX_CLKFAIL
; {  c: e% l: @  D% s9 K: y| MCASP_TX_SYNCERROR
9 A. i8 N) r9 v: V+ T% M2 {| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
9 E# y0 G! `9 |8 n: f| MCASP_RX_CLKFAIL
- ~- Q) s8 t3 ^  T| MCASP_RX_SYNCERROR
4 P" n9 Q) `' ~| MCASP_RX_OVERRUN);
5 S9 E- |  b- ?: b$ _, ^" m0 r}
static void I2SDataTxRxActivate(void)
1 Z3 [; q$ o3 I/ [& k$ O{  f( \" i* d0 c, j; @& e; x, d" D
/* Start the clocks */8 L6 R- A- ?% _4 R7 m  e6 n& [
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
# }" v! p" @# p1 CMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */' @( [* w% ]8 @) f8 L# }
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,8 x" C# Y& L9 o% ?
EDMA3_TRIG_MODE_EVENT);  Q/ N( |8 ?* j
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
( S$ z/ p! g3 h5 X( j  {EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
1 [3 p! V6 m' L7 ~' p5 eMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
/ A) B9 h) q6 }) [. |1 XMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
# \1 c! v9 u( w. {# d! }+ fwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
* t6 J: @7 Z/ ]0 B+ gMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);' z9 q8 ^5 W1 H  O7 F) Q
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
: Y7 t+ `9 S' q: F2 [$ U* t}

7 H1 \% o0 L+ ?- f% V% p+ r3 ?4 C8 p& V1 P
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

" j: ]9 O: R4 p1 j, q! @1 x0 a( L




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