嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,8 S) S( i. j- V' H3 e* y
input mcasp_ahclkx,
  E1 D* ?4 e- ?% v6 uinput mcasp_aclkx,
# R# q3 L4 ~$ ^; U, y$ {5 ?input axr0,) p7 _) I2 [. C+ I2 ~& b' V: U

$ a3 ~" [3 z" Y% b( E. F  F, w, ^output mcasp_afsr,
" ]4 H2 T) a. e* @: L& Poutput mcasp_ahclkr,
5 u2 a+ C* j9 {/ ^, r6 W6 Poutput mcasp_aclkr,
2 J; k" |4 c4 ~; voutput axr1,
$ m# P) ?; y% c. `6 Z$ D. r  x
assign mcasp_afsr = mcasp_afsx;
5 ]5 D/ {9 T# W  n  Z2 xassign mcasp_aclkr = mcasp_aclkx;
3 [: j- R  y, E  ]; Kassign mcasp_ahclkr = mcasp_ahclkx;2 R. Q$ y6 Y7 q6 W8 K6 _
assign axr1 = axr0;
: V8 F( r) J' H6 b

0 v0 r+ [/ i5 ^# R. J
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

; b; Z1 o! g% ^( g& x
static void McASPI2SConfigure(void)( }4 ~1 i6 O4 Q, T$ v
{
8 @$ e- {" E0 |! c5 ]McASPRxReset(SOC_MCASP_0_CTRL_REGS);
8 ?/ C2 X' V7 k/ i- U! dMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
3 t. `& z2 G; g6 B3 xMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
7 g4 y/ i8 E% N2 \/ j  O1 \# nMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
8 H( v! A& s; D& J: V2 }( UMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,% x" ^" G: Q! n" L
MCASP_RX_MODE_DMA);
6 |" ]0 _! P. y$ U4 zMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,+ q, p0 b) n) x5 [8 g' ]
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
: x2 V) R; K6 wMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 5 ^' m) k/ j, \
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);/ O! Y' g9 W' p  r/ j% C' O4 Q
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 8 X3 ^% j! `+ v$ w# G  m5 p4 q: A; R- u
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
0 i5 \6 }. K  N7 qMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
8 m- _, l. v" t; a- b. OMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); $ ^* C- L9 O8 ~5 Y% r
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,/ e: K' i) t9 ~8 H/ f  m
0x00, 0xFF);
/* configure the clock for transmitter */  o; G2 V2 h/ k/ Z5 w6 h+ x
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);5 S. \$ D' T$ Q$ e4 o2 J3 |
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
# _4 R0 Z: g+ J) H5 Y: t' J/ _% QMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,0 A! d% d* M+ C4 T' c" S% }
0x00, 0xFF);; G9 K! n4 |) z( {! o
) i! j) ?' s% F
/* Enable synchronization of RX and TX sections */
0 K6 V/ _" H4 m4 cMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
- `0 `5 ]' _. C, D2 ^McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);) k0 S  W2 N: A
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
  _3 ~1 ?: ~. H" @0 L- A** Set the serializers, Currently only one serializer is set as: }& O: ?9 i% S' l. I
** transmitter and one serializer as receiver.9 ?2 s/ l6 o; o" R
*/7 S! d/ f3 S0 w' L* T* M3 h
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
/ z3 s% [+ L* l! S/ ^! ~( PMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*! q: E, {8 G7 o4 f) i) s8 r
** Configure the McASP pins
. K- J9 P  T& |** Input - Frame Sync, Clock and Serializer Rx
7 i2 Y- f4 h! ~! s: i9 t** Output - Serializer Tx is connected to the input of the codec
8 h; T! {% P+ S( y8 p*/# r+ b: f9 C1 O1 A- U
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
1 V# A% P# m! o- fMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));3 B, g9 y  j* n  K9 e
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
- n. ~6 {+ _! v$ B| MCASP_PIN_ACLKX
/ Z: Z6 R* m0 F3 `6 e! e5 q1 D3 i4 S| MCASP_PIN_AHCLKX+ Z5 }$ j% p6 q# ]
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
: i/ T& ]0 s9 V2 ]McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
1 {1 F7 w: W& c" L+ S0 r. ^| MCASP_TX_CLKFAIL " O) U2 ?  S( K: q& h1 n9 r
| MCASP_TX_SYNCERROR
& s) ]( ^3 D+ l6 L0 L, O| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
: f$ n0 f* T2 ]+ W8 w| MCASP_RX_CLKFAIL
1 b  d/ P8 f" P, k5 q6 r| MCASP_RX_SYNCERROR 1 ^: S5 L; ~& c' P- Z2 x
| MCASP_RX_OVERRUN);" S5 n4 ~. V6 M2 x" G) [
}
static void I2SDataTxRxActivate(void)1 x9 e* ?2 R8 d- e
{
! C( {4 K" c, g  y% r/* Start the clocks */
) f# l  @5 g% c' AMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
/ U: F+ m1 C: y! {* R7 x; lMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
" z% ^& `  v! Z1 P- z. \# ^EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,0 R  W) {8 J4 f7 c5 J! h/ e, x
EDMA3_TRIG_MODE_EVENT);
# n2 s5 j6 F1 e& a# W1 `$ m( P1 zEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
  o8 _' N; P4 g  [* w; ?, qEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */6 j( x( H$ L9 E8 _% j  X4 ?/ p0 T
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
' i- c0 t) }5 @8 T  |McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */) _3 |9 C6 U1 e, B/ B' ]
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */0 a4 _, b. v* z0 c0 r! h
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
0 i" {& N9 C1 c8 qMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
; M) L+ C1 G0 [# N}

# ~' O& ?0 f) z% G
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

: ~) e# _) G! ~




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