嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
  O0 N' \3 \% _9 y) winput mcasp_ahclkx,
, ~: Y" j2 d/ N! Hinput mcasp_aclkx,
8 e; o# D3 M" }; l$ ?! Linput axr0,( A( y2 S* }" W4 A

6 W; g: @& q) y* N* eoutput mcasp_afsr,. v& f( N$ C, G0 f& C
output mcasp_ahclkr,6 a; ~2 H$ Q& k/ o  y
output mcasp_aclkr,
: Q' [5 Z5 F. g) m# l* [* moutput axr1,
5 E# ^) ^# ]! y7 O# r1 ], u8 b
assign mcasp_afsr = mcasp_afsx;" z9 k7 r8 {9 l  |% e4 w
assign mcasp_aclkr = mcasp_aclkx;8 `% S5 O1 [# `1 S* \
assign mcasp_ahclkr = mcasp_ahclkx;
2 ?' D# o" F. S% J9 ^: Rassign axr1 = axr0;

5 n# c( w4 a. F# f" x( p9 d9 d$ L5 j+ u7 T5 z. `& _9 G" ]
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
' }$ C% L, @% J4 d
static void McASPI2SConfigure(void)
9 z8 l! E- N( h+ w{3 r  f7 C( n+ d+ e7 p& C
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
5 A& {0 H; b9 l8 B/ UMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
8 J; T1 G4 ~, q4 @McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
, @" {' w" R) p; QMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
1 B4 d; S1 j7 g9 g4 xMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,: O5 @( g7 C3 R. C4 k4 q' k8 k
MCASP_RX_MODE_DMA);
% o) B* N" ~9 eMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,5 N- |5 i/ }5 C/ ?) F8 ^
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */& Q2 t( R) q' F4 O7 M: X: Q; g! [, y- b
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
1 V9 C. _2 V7 R! V& M) L; R0 qMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);0 [7 ~$ b4 y% x6 Z# ]4 I: Y) t  I
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, % g2 X( [% y% {7 y
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
# E, s$ G/ J4 ~/ Y* SMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
, e+ Y5 ^4 s: g3 h, }McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 7 ~& N6 `' H3 c$ X2 _5 q0 w" c6 d
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
! ?  l# m6 u/ t: Z" N2 P; T/ N+ y+ m0x00, 0xFF);
/* configure the clock for transmitter */* A' m, |+ \! s0 h
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
3 E5 n; p& }) U2 v5 C) `McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); / b5 l/ e  r0 ^, b
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,) t' i. r7 C3 k, [1 y1 B
0x00, 0xFF);
3 O4 ^5 e- U5 n0 x8 Y2 B+ Q8 G2 N) V: u' ?
/* Enable synchronization of RX and TX sections */
( [6 l9 f3 o$ O' [7 R9 x. _McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
1 R! _5 O* e  M5 O: Y; vMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);, y3 D5 O3 |- u, Y
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
" R; H( L) T( Z6 E** Set the serializers, Currently only one serializer is set as
8 s5 S4 f; ]/ |% i** transmitter and one serializer as receiver.) g& |; H* _! X
*/
2 L2 i" U# s. F( ?5 B" ~McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
9 ^# e2 i. r% ^" ]6 mMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*4 m) f( W: h% V" q: @! m
** Configure the McASP pins . @! p( R7 R  l* L
** Input - Frame Sync, Clock and Serializer Rx
8 H$ T: @# O0 |" ~+ O** Output - Serializer Tx is connected to the input of the codec & i% c/ r: l* @; d2 x
*/1 d: X! O  Q: A6 D5 }
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);- f, c) P6 {7 T) m' ^
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
6 y5 H  `$ u3 PMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
+ {, h- \) S, j| MCASP_PIN_ACLKX
% b- v- |$ f1 T* l4 Z* i| MCASP_PIN_AHCLKX
. e) y/ f. i. p| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */7 n) Q: U' u2 o1 ]1 v9 |7 v* b
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
' }( l  E, b" D| MCASP_TX_CLKFAIL # T+ f+ l' {8 ~* m1 Q
| MCASP_TX_SYNCERROR: j* t% x) O. x) l" V0 A. o5 k
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR + w0 h& o) q5 W/ a5 F: A) z7 ?, i
| MCASP_RX_CLKFAIL
3 w$ F9 z6 f6 k| MCASP_RX_SYNCERROR
$ k# V& W) U3 ?+ t& ^| MCASP_RX_OVERRUN);
! V' J4 l+ X6 ]+ F}
static void I2SDataTxRxActivate(void)
) }1 L2 K& s) f" |3 i; h7 M2 }{
( e/ i  c* u) X4 V3 J5 ^9 L# j/* Start the clocks */% s6 I2 K2 f$ g7 L) i( g5 s( C
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);, |* b- s. W6 t& I* `' }+ L, b# Z
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
% a0 F2 l: s, q. {  DEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
9 `- U0 ?/ p$ K+ eEDMA3_TRIG_MODE_EVENT);
* H  Y+ n; B1 I4 t9 m2 fEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ) h1 a( F# y+ g, a/ Q
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
! s5 K9 a: `( k, m' b. ZMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);4 d( V/ B6 @) |, ]4 c# T8 j, t
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
% N: R7 n( I5 O  ], F: e4 uwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */8 j4 l; w; {4 `% Q; D4 [: {
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
2 I# c  s  e, [0 @( D- GMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
  E- X2 o  s* \1 @1 x0 I, s}

+ e% N0 p5 ^5 D5 f  u' Q2 z
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

( J2 F, S1 }0 b




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