嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,9 [+ L0 b- S1 R. L$ p8 }! s" R
input mcasp_ahclkx,
% B) r) H0 g% }input mcasp_aclkx,
9 C+ H2 c/ n# U- G3 Z5 m' Uinput axr0,
% h' Y, L) d* D+ z* {% }
5 t+ _! W$ V  i, p- p0 S; k7 r1 poutput mcasp_afsr,
1 I. J7 s. E3 d% x( eoutput mcasp_ahclkr,9 d! F2 W% ^' ]" \  x# M2 t/ ]
output mcasp_aclkr,3 |9 X, L9 j# ]3 H9 ^9 n
output axr1,
5 I' Z6 Z- a& u
assign mcasp_afsr = mcasp_afsx;
8 t2 n0 \. X: D. N3 f6 W! Cassign mcasp_aclkr = mcasp_aclkx;
8 v" u6 t2 q7 J& ^5 W( |assign mcasp_ahclkr = mcasp_ahclkx;
* {9 i. {- _' L- fassign axr1 = axr0;
! _! l3 Z/ T+ k; Z

6 a4 V$ _2 D5 \: j9 {# @: b5 S
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

' P6 I: F3 l5 ]7 ?' M) e: q+ w
static void McASPI2SConfigure(void)! d8 f8 W" ?# y! k
{' I8 y, K8 v9 G/ J; \
McASPRxReset(SOC_MCASP_0_CTRL_REGS);( \" `  P( }% u1 m
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
4 \, O! c( K8 {' w. ~1 ^1 [* WMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/ w8 h1 Z5 F- }  ^McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
* ]' W* f& k$ @0 W1 [McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
9 K& r: t: p- N. oMCASP_RX_MODE_DMA);
7 e2 h& P' Y" g. J2 p- Z0 M6 U0 gMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,# g7 s, O  v, k  L
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
' K) r$ P* m6 e8 t0 TMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
9 }' j6 q: o$ t# K% U" B2 s( f# nMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);% I) O" q* \. O8 r) f7 p
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
6 N3 ]- W: i" @7 k* L9 s% SMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */+ w. |9 g- P# j% Y: N9 b$ [
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
% T. P9 `8 y- pMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
9 Y7 j8 F. D) {McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,% X8 M3 w+ E; D% F7 \$ L9 ]* E8 m* K
0x00, 0xFF);
/* configure the clock for transmitter */
% N( N# s/ N6 o5 kMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
( R( X- J) v. U! K; \$ E* }5 o6 yMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
) C/ ~: \2 R/ }9 z: s4 GMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
% C2 d6 Y0 @- S4 d/ w) z" V& k0x00, 0xFF);7 T0 b2 `  c9 ]4 C

& P- L/ n- G- ~8 H; C/* Enable synchronization of RX and TX sections */ $ v. Z! N7 M( o: J" W
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */4 v8 M% M, I0 |/ m# e' ~1 ?
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
6 |1 v) F- j% l& x8 `6 K% uMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
7 G+ G% \# w7 K** Set the serializers, Currently only one serializer is set as
7 o' z5 V7 X% E2 s: y! V** transmitter and one serializer as receiver.
6 l+ e  A6 l8 H; J* O*/6 x4 |# J, `, k. T: K
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);' X+ ^0 G* Z/ `, }: W
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
: P- M& t7 e# I3 a7 e** Configure the McASP pins
* b( L. g! q( I$ a8 `+ n) V** Input - Frame Sync, Clock and Serializer Rx. z6 t* L  x0 O: r" B3 c
** Output - Serializer Tx is connected to the input of the codec
! Y3 P. t! O6 Y+ I3 m*/6 k; ~; X* J) R2 O. |
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);7 X. T# q2 Y: t/ B; s+ q
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));1 K9 |$ T% B  o4 a+ K" i
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX" D7 D2 A) E! e
| MCASP_PIN_ACLKX8 D$ q) j: m: N) D9 a$ c
| MCASP_PIN_AHCLKX* r. U: X6 a# C) A
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */' |2 {& Z5 `/ D& T
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR   @7 i% j5 J' Z+ F
| MCASP_TX_CLKFAIL
" E2 `( c9 k' D$ ]5 E, ]) I| MCASP_TX_SYNCERROR
$ f- R( q- j: u' N0 I. W| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
1 ]5 v0 B! q# q  e8 D% {. A2 v| MCASP_RX_CLKFAIL
3 Z* h# k& ], u- k6 |; [8 D. T| MCASP_RX_SYNCERROR ( d# u# ~5 d8 q$ I0 g
| MCASP_RX_OVERRUN);
8 J2 i6 R2 c0 l6 |, ]) g}
static void I2SDataTxRxActivate(void)$ A3 R0 K) \# I9 A3 R' L
{
. u2 O1 b! F9 h# u' o8 u3 S7 t) M/* Start the clocks */
) R9 m- u0 e# P6 ?5 W0 WMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);* T: T7 z- G  ]/ ~1 M& W" A
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */( F3 b' q. j6 p+ u3 j+ P
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
. ]- q- _3 p$ Y2 \* ~2 K- d  eEDMA3_TRIG_MODE_EVENT);+ W2 Q' L, k  c# `) U
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ( R1 F1 ^, k! P5 T- P5 G, e( H) k
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */. Q- y1 n. [7 ]: }4 D' j. O# p
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
" q/ i6 [# i1 D* j8 p4 cMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
4 B- E' I: _; Rwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */8 Y8 n  b; T4 F! K7 P' g
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
1 _; X' F2 {5 I+ ^: ^$ WMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
  g3 S7 I* z% u4 z}
9 o$ y* y- x2 n9 D; t4 p
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

8 a: e4 e, Q7 d1 y+ ]5 b7 a




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