嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,( v* w- H6 U0 M; U; f% `/ S9 r
input mcasp_ahclkx,, t8 I' {, x, ?* z
input mcasp_aclkx,
1 V) y" j3 |8 W* f  z) @input axr0,
3 x# a8 B4 h5 d8 j$ r
0 [7 m3 y. m. ~1 J% c% q/ h4 ~output mcasp_afsr,
" B+ Y7 u% c6 n' `output mcasp_ahclkr,3 g' I# ^3 e: ^$ ^, R
output mcasp_aclkr,
3 l2 k) H+ E* S! }7 ]5 s8 @output axr1,
, O& |8 G( r$ t5 N$ I0 p
assign mcasp_afsr = mcasp_afsx;$ G! @; o& Z0 t2 A
assign mcasp_aclkr = mcasp_aclkx;
) G6 e  Y! i: m) ]& B  O0 M+ g% M- Vassign mcasp_ahclkr = mcasp_ahclkx;5 o4 v. I0 i5 Y$ G  h2 {
assign axr1 = axr0;

" g/ i* q* \/ ^9 l) t
9 _) Z' J+ c4 ?. ^
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
! e7 f( J* \5 h2 l2 K# ~
static void McASPI2SConfigure(void)
8 |1 \, t. S1 G- ]1 c, S( L4 m{
3 v- P0 M! _! D% w( bMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
; w+ \; P% l6 U4 F7 DMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */! L! I5 z3 G$ C; J* A
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
- `, C, C0 V8 oMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
! l: i6 ]' x* y  Q2 ^8 H0 DMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
* ~9 }+ g; `2 u6 S" V! T% i% cMCASP_RX_MODE_DMA);
& V( U2 U& f% u+ @McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,1 j# i) M" M$ C) ?1 e
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
7 F# e. J+ l  U( uMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,   W" d" X$ E  _- ?/ A
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);5 D/ P$ ?/ t5 F9 E- i+ p
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
5 Q( r, r8 A/ x1 x; CMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */( A: b5 L, i/ G5 {6 a1 ?
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
# A4 m* X& z2 N# ZMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
7 M) G  x2 b' U2 o. p" ~McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
; t5 H- ~) Q$ C0x00, 0xFF);
/* configure the clock for transmitter */
5 h8 y+ p/ ?% BMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
- W5 R* F7 _# p! q. XMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 7 Y1 |& L. s3 _, \% v0 t7 K
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
9 S; n) m0 `6 A' {! U' n% W  H* O" r  q0x00, 0xFF);
2 N% c- G1 J2 W  ]& |" c8 x$ C: H( G# i1 w0 g& b7 m( Q
/* Enable synchronization of RX and TX sections */ , c! \. O. d1 y* ]) c' {
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
6 k  p. y9 k- m  O, L; k/ g" p  CMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);. Z2 M$ t) l2 s" `& Z
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
% J$ s2 v; @! W2 h. Z6 B** Set the serializers, Currently only one serializer is set as* L, W+ h: L% F& g( x: ^+ N, n
** transmitter and one serializer as receiver.
' O* b3 L8 D2 _- y( P*/; `& R0 W# o9 M' V1 D: X+ {
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);" t- a7 k: W; S) t8 O7 X; R
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*4 T: }( t0 X0 b, c# `
** Configure the McASP pins $ k$ Q5 Z8 }/ Y9 i" `6 a, @4 T# y
** Input - Frame Sync, Clock and Serializer Rx
/ K% y" H; R. y  k- X3 i; h  b** Output - Serializer Tx is connected to the input of the codec
$ r% `% x* L/ A! N* d6 R*/
% F- ^) h, Z+ |0 K6 N8 v; g0 W! yMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
' V: b" A) H1 d7 j$ @McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));6 s+ x! q0 h' d8 \2 Y$ x4 }
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX+ {2 l7 i! E5 [# b  J: A7 E
| MCASP_PIN_ACLKX* f- @4 j1 G& q; S" T" r% O
| MCASP_PIN_AHCLKX
' @' i) K9 ?6 R| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
' `9 u0 A. L; k( z8 I# bMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
% o; c* }, W4 m8 J7 L2 F4 d! H| MCASP_TX_CLKFAIL
5 G+ G' s; ]+ G1 F; J0 g# u| MCASP_TX_SYNCERROR8 P1 c& q& M1 Q. o9 v1 q
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 0 r& x* ~3 d' ~3 b; Z3 E; `& r
| MCASP_RX_CLKFAIL
3 E+ g: A/ ^( [& q1 E| MCASP_RX_SYNCERROR
2 L* T6 {4 n* @  }  `| MCASP_RX_OVERRUN);
8 i: @9 G. \# l( S}
static void I2SDataTxRxActivate(void)
2 I8 q8 w3 W( R4 x1 J{+ Z, H1 c0 @: `) x* F4 h2 `
/* Start the clocks */
2 s0 ~9 Q5 Z6 N5 I9 _2 wMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
. q3 M, d) S% I& g% P; SMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
- H7 G; ]5 g! y: ^4 S% u0 i; HEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
  Q  G3 k) }+ T" [2 _EDMA3_TRIG_MODE_EVENT);" l* y6 \; b) e. p2 P. V, v8 _
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ) {4 V0 T7 Y& @" e7 M5 X
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */7 d$ J$ v' `0 ]
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
& P( V1 d* v" N- l, q1 GMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */7 y+ x2 s. `: B3 d! ~. C( v
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */$ R5 ?) j$ x+ [* u7 x/ [! y( B
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
, r/ J8 f2 t  F, uMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);4 e+ k7 W4 H/ n& v; a) K
}
: b3 f3 w+ ?: U- f
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

# l1 G# ^$ I8 _& T- f




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