嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
! L: g* e: B' _: V/ g9 ]- Uinput mcasp_ahclkx,! B7 }+ f! k! C8 i
input mcasp_aclkx,! q9 S2 d% u$ j1 ?" [/ ?
input axr0,1 a* t! q7 L* x6 o

: I- ]6 v! t8 m2 A7 Toutput mcasp_afsr,
) @  G/ F0 k. T+ E+ K2 `output mcasp_ahclkr,5 W- Y8 k- s+ t# M  z
output mcasp_aclkr,
3 g# {5 y$ e7 e) _5 u! V, R" V! Aoutput axr1,6 K0 [- O3 Q' `
assign mcasp_afsr = mcasp_afsx;3 m0 o2 d8 h8 E% S9 d
assign mcasp_aclkr = mcasp_aclkx;! j+ l( O" w) `
assign mcasp_ahclkr = mcasp_ahclkx;1 x5 a* q- }; p" u" h
assign axr1 = axr0;
  J: ?+ y4 I9 S6 `4 z" ?5 n* x

# X, \4 _( w: C5 _+ Q, `
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
: |6 F% X3 v4 d' t
static void McASPI2SConfigure(void)( g) H& b( y& g4 c" T8 |
{& _/ @/ y8 [; |( N+ s1 w% y4 K* m* e
McASPRxReset(SOC_MCASP_0_CTRL_REGS);# ^2 k, b0 G  g4 \
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
( i) |1 z( ~+ o, c3 M3 v0 f2 A8 d: ?# UMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);* E# e1 n7 G7 l. ~% P% f  P# g
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */5 ~) P; o9 u1 x- q! G
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
. A' t) E5 }; I1 X- LMCASP_RX_MODE_DMA);! @+ H6 l% Z6 \) I' k' @, p
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
2 C4 U- T, W+ w8 sMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */* U0 m9 x; k5 r6 R6 \
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, - y! ~# J" b( B
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
/ F( c1 d& G5 XMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, $ q- W7 c. q; o4 I" v
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */4 p$ b& G+ P; s7 y4 d) C
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
) z4 ~( {3 W+ f8 ZMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
* m6 U+ G8 o2 [: c8 K" ?, GMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,$ F% W) f! v  m
0x00, 0xFF);
/* configure the clock for transmitter */
% V+ X7 ?% J5 f/ `, z  Z, z9 _McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);1 o) i4 H& l; c
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); - v2 n) g& W* X6 J5 l
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
# f  H2 g! \' [3 o+ w' ]3 s0x00, 0xFF);
9 C/ d: _, _" x' C* M
7 X  {/ c; S' {7 }4 B& P# q/* Enable synchronization of RX and TX sections */ * I( k. u) P$ Q7 g; D( N
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */- r% D# J: U% U0 O
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);: g6 H# F5 o  {% }" Q
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*+ N: g3 W/ v5 y) I
** Set the serializers, Currently only one serializer is set as( w, w4 E# r# {; p& \
** transmitter and one serializer as receiver.$ m) ]7 E; r1 z, \
*/( Y, B2 i( ^: H; a: G
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
  t: u- ?+ s: R( f# \  @- xMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*( j. X% P8 c( h6 O3 D
** Configure the McASP pins
- f8 E, h3 M& W' h; D0 e; l** Input - Frame Sync, Clock and Serializer Rx4 N" M4 ~( Z3 w  K( {, L4 o8 |9 X
** Output - Serializer Tx is connected to the input of the codec - n8 W' i% e! u9 I: f* G
*/! N% G! @/ Q# \
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
6 r& y' {) t) i# L# W! ZMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));& Z3 N+ D' V/ \
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
7 l% D% U' q9 K0 |( @) a| MCASP_PIN_ACLKX6 g3 a4 {, }8 a5 F/ b
| MCASP_PIN_AHCLKX, k! ]/ P, H! W
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */$ K$ m1 o$ I5 B$ t! x, e+ S8 t4 x, [6 D
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR % J5 [" o7 D5 i" j& t5 Q9 i6 H
| MCASP_TX_CLKFAIL ( _% R$ ?; e- [( L9 `5 F4 y
| MCASP_TX_SYNCERROR9 d# x, m  O" T- A+ F# Q
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR % p/ ?8 I7 x1 [" U: T- S# N9 v
| MCASP_RX_CLKFAIL
& A, W1 T. }: B# g* x0 H, l" H| MCASP_RX_SYNCERROR
5 S% [$ }/ ?$ f7 U& z5 w| MCASP_RX_OVERRUN);1 j4 ^% {9 j" O/ X/ P! ~
}
static void I2SDataTxRxActivate(void)6 ~9 G1 j" b/ v4 F5 x
{
" T  `2 |/ w' @$ L  f; |/* Start the clocks */; |) U' D% _( u  V( h: J2 U
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
3 a3 i/ [. P7 d* ]% vMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */8 e2 i) P. W1 G3 ]) p6 O" p
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
' a" D! u8 Y" w7 |" c% Y4 \EDMA3_TRIG_MODE_EVENT);
; O( [5 `' A3 \8 N; F' |' YEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 1 d% p5 r4 \$ z. n4 B7 J
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */0 s0 N( m# g! X- t
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
) l/ b% t. C, DMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */: _- }) j$ ?1 Q/ z/ W0 ^; S5 d
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */! d5 b: L% @/ ~/ `+ F/ l
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
0 o2 l1 ~2 ^/ V0 i2 l; ~McASPTxEnable(SOC_MCASP_0_CTRL_REGS);7 {* R. v" B) p2 `9 C7 b
}

3 w. O; d6 J0 ]- I( U, i% e3 s
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
9 [. j  n2 E; p2 W





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