嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,- f. q8 {1 h! G0 S0 \- v2 k
input mcasp_ahclkx,
$ E% ^9 n" U- o& g6 L- [8 B2 c. vinput mcasp_aclkx,4 I* m0 U" v/ e+ F
input axr0,
, Z+ r( K- p: ?0 c. s
0 M8 v) c: Q' G  A( t1 q/ h9 Houtput mcasp_afsr,# U, e$ P) g8 Y6 x6 a6 S
output mcasp_ahclkr,6 X# Z! v* L8 A
output mcasp_aclkr,: o+ p! j# h0 s
output axr1,
5 Q- W2 P7 l3 D' e/ E0 o
assign mcasp_afsr = mcasp_afsx;
6 r9 Q1 a+ M; B" wassign mcasp_aclkr = mcasp_aclkx;* W% E* F! x6 [# j% M" A/ I
assign mcasp_ahclkr = mcasp_ahclkx;, \* Z( x* |( w( U  G% M. `
assign axr1 = axr0;

6 V; ~7 X" C* c! k3 y5 E, ?$ [
3 V+ ~  N: k! i3 H
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

" z# o$ m8 W4 z: O
static void McASPI2SConfigure(void)$ \: D& V+ V0 e( y0 @/ Z$ p
{
( w+ `0 R- n! _9 E6 n) QMcASPRxReset(SOC_MCASP_0_CTRL_REGS);! A  p9 k& A5 e, t6 q
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
% n* }) M5 u5 sMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
8 n. T6 f9 m; A* ~McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */) A2 G5 }1 |: l& X9 Y
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
# P# ^! d! _  i7 _+ E) T- _: P0 }MCASP_RX_MODE_DMA);
+ i* q8 \$ P* a2 }( YMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,. p3 w8 a; E7 n) N2 `
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */6 c) }* t) u5 o; I3 C9 ]  g2 Y1 a
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
: F0 ^) b! _/ T/ q4 ]MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);$ c. d& ?! j( u8 F3 X9 U5 w; ^
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, , d5 m9 i; U8 n8 `- ^" t+ ~
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
  n( N8 U' C: t3 xMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
! c4 S, g) e4 i5 a0 wMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
; }" B. A8 h2 pMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,# D$ g' V) \. y8 M! Z: W
0x00, 0xFF);
/* configure the clock for transmitter */
, Q& u. H" P- ^McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
8 w( J2 r& I' G* t( N" x: _/ _McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);   ~- [# s2 p- s. ?* Z
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,( R$ D. k4 z! A* I2 @" @9 j
0x00, 0xFF);/ \6 K" y( L; _$ Q# B8 i

! ^/ g5 s, o  @/* Enable synchronization of RX and TX sections */ 3 n+ ], r9 @7 I. A4 w
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */1 t2 V% J2 }) x# b+ G& e5 y
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);) q/ v/ v9 J3 a4 ~# j6 Y4 B
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*# F- \# e5 ]& Z0 K; H. m
** Set the serializers, Currently only one serializer is set as2 y# |5 n8 ]0 \
** transmitter and one serializer as receiver.! y* X! a. Q; H' c: {4 b4 v4 A
*/
/ j2 I! I/ L& Y6 G- uMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);" n9 \. V6 R1 m3 E# r) }, l
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
5 T: u. x/ |' g8 @  \; g$ @* n6 {** Configure the McASP pins 5 H. D7 G7 o! w/ D! Y! X/ e0 A7 ?
** Input - Frame Sync, Clock and Serializer Rx9 V) h9 k; j. P) @8 M5 h. Q2 X: f$ m
** Output - Serializer Tx is connected to the input of the codec
2 X7 ?5 h; S) j*/
4 F) i7 S* x: e4 D& DMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
+ J' r; K$ `7 ^9 ^; m9 IMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));% [5 H+ f2 S( R3 ^+ Y. N+ {2 ~$ T
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX9 t8 [, H/ y4 }" j$ s
| MCASP_PIN_ACLKX
$ T" v7 b9 }3 B* T| MCASP_PIN_AHCLKX6 @0 P9 H7 L/ Q& i$ P0 {+ S
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */5 H' f/ D( X. C0 V* Z& Y) i* N
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 8 A2 p: I5 {: b: {
| MCASP_TX_CLKFAIL 6 c7 }- ?  A# C9 Q$ X' i, t) F
| MCASP_TX_SYNCERROR9 H6 P( N1 @9 I
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
  a- U9 j; n  ^+ |8 ?| MCASP_RX_CLKFAIL/ X$ N: L6 G9 Z7 H- o. x8 s  ?3 g
| MCASP_RX_SYNCERROR
; r3 S6 O; X5 w2 @7 R3 p" S| MCASP_RX_OVERRUN);1 k/ y0 A6 j( b0 p6 t- U+ I
}
static void I2SDataTxRxActivate(void)
  p# X9 A: q+ g8 n9 c{
  ~) a* O8 M9 [/* Start the clocks */
. e$ S& u( A$ wMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
  L; z  u3 h& q; AMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
; k8 g  U0 T$ N& O, fEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,8 i$ M& H: T7 b) L+ I8 z
EDMA3_TRIG_MODE_EVENT);
  v  C4 j; r) J  u9 y; KEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, % d+ _) p% y; n% E
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
+ b8 L1 l  q0 \" X0 kMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
% |  }% b& b1 E6 y& g3 L+ F) nMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */- W- [4 `& y4 Z3 ^# ?
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */: c: v( v$ P1 a* i
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
$ ]6 s+ |% h/ a  B: kMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
5 Q3 a2 r7 W' x2 z}

2 j2 b% i# s& w1 d
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

& f9 i- e6 Q  q" e% f+ e% y




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