嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
: F( o6 I3 n7 p. a9 hinput mcasp_ahclkx,! L! p* X! G- P8 ]- ]2 k* @
input mcasp_aclkx,* }# f- J+ I1 G2 E8 m$ h8 ]6 j
input axr0,
, s2 x9 g, f, d2 m
# i( D6 S/ E: H- }/ j! D$ foutput mcasp_afsr,5 S4 P' _. T* d
output mcasp_ahclkr,
' u- p2 ^$ ^6 D$ Woutput mcasp_aclkr,
* m& ?; r7 {! I, Y6 qoutput axr1,
' j' \) t# u: U$ o) @2 R
assign mcasp_afsr = mcasp_afsx;1 o3 i. u% l2 H& c9 A
assign mcasp_aclkr = mcasp_aclkx;% q6 G8 x  {. u
assign mcasp_ahclkr = mcasp_ahclkx;
& N1 K: L( c) T" L( n. i  y0 Tassign axr1 = axr0;

3 _3 w6 p" J( d5 h2 h. ?
# S1 T# n+ D4 {
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

  r8 [5 z0 p9 k% l0 G+ ?* q* |
static void McASPI2SConfigure(void)/ E+ |: _8 P. Y( v
{5 x: ~% b% `' N8 @8 {6 \
McASPRxReset(SOC_MCASP_0_CTRL_REGS);% u+ h+ ~5 W& f9 g1 i$ }  l
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */0 M& d& G6 g; Q% A; K
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
# i1 e6 _9 B: l% I- y0 R6 u8 }McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
0 k: i) f  e/ ~+ b5 b4 G) f  cMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
7 P. L+ P1 ~- ]) BMCASP_RX_MODE_DMA);% J6 I$ W( Z' U1 d& E. M: s5 F# z& ^
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,% b* C1 d3 A) U8 i  M2 j
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
8 a0 h% H" x  o! wMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, + i0 P9 Y( c) u* }; v8 M
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
+ Z1 K* j7 n9 jMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, # L/ o3 o8 T& c. h3 \3 z
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
$ Z9 d$ l9 r0 I9 a0 b1 q6 TMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
% O1 P; f. d. |. _" g1 Z: _McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 4 l3 G; [2 I0 T; U0 U
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,9 U- }( n* L# t- T8 x+ j8 `# m
0x00, 0xFF);
/* configure the clock for transmitter */% H% w+ f5 V7 T  \9 @# P/ [+ ?
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
2 o. p6 {9 ^- k7 v6 lMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
, [$ }/ J  C" B8 G- QMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
5 k) K6 M1 R, e* ~% T0 R0x00, 0xFF);
1 O0 D8 G. e# U4 k, ]/ J* q( W9 X: A+ |1 H8 m% ~
/* Enable synchronization of RX and TX sections */
2 |5 O0 |$ t$ ?McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */5 y& _2 l/ E) q5 n) k; g- i
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);# U- _; V4 l5 h; g+ |
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
( L0 ]( O0 c5 g4 X9 E* n9 n** Set the serializers, Currently only one serializer is set as
" n* c5 n* D* t' C0 T: Q** transmitter and one serializer as receiver.  ?" ^, R0 a0 w: F3 ]' ^/ `
*/
8 C1 L5 B' b3 q/ r" v: ]McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
2 m  j6 Q0 h( aMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
1 k$ v4 [9 X" K( ~7 A** Configure the McASP pins
9 D% I$ u/ T8 f2 x+ N** Input - Frame Sync, Clock and Serializer Rx, v4 |5 i7 K6 V% s- d$ c' B
** Output - Serializer Tx is connected to the input of the codec   D* G/ R8 Q# p  v, e
*/
$ Q" v" n$ Z/ K' w4 AMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);. K& G& @- p$ f
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));( B5 E4 X' ^9 M: Z, v
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX7 c' h1 r, F- A1 g
| MCASP_PIN_ACLKX& _# c- z7 ]# r3 W& W' g5 x
| MCASP_PIN_AHCLKX
3 l- S. R6 v8 j$ }9 w% I- I: t| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
  ^% ~% q# u9 P* N) aMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
0 `& e' a5 [! u" F9 F; o| MCASP_TX_CLKFAIL
) P% {2 v4 N, u8 x# j+ M| MCASP_TX_SYNCERROR
4 ?$ }9 j4 F$ V| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
; R9 K* t9 B9 y$ r, R, f| MCASP_RX_CLKFAIL4 t! z& F# I1 x; Q" B
| MCASP_RX_SYNCERROR
5 S) |! U# _5 x% Y' P" r. z| MCASP_RX_OVERRUN);/ T% b" f' G( a' Z( C. a; x/ ]
}
static void I2SDataTxRxActivate(void)+ T! R  S! S2 i( ?! a
{
2 `. O3 t; L4 e1 X/* Start the clocks */
6 ]; z0 K  M9 W2 R+ |7 V3 {McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);- O5 F) B4 k: f% a
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */7 T! p$ `# z. b
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,5 P" E* Y1 w+ m& d8 f5 O& q
EDMA3_TRIG_MODE_EVENT);
0 W, ]4 r- K1 P4 \% \3 b* I0 ^+ vEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
, y( x/ v9 H# v% BEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
5 T, p1 R, y8 h" N& `5 BMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
) M, t: m+ h4 e" v2 aMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */( @& n2 F; q: L
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */$ d! v2 t: b8 C0 U2 W
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);' l" f3 Z: h% Y% o. s  b; u; u
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
2 z! `! l6 P- E}

3 R% p5 m; p/ Z( \8 K% y$ i
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
* x; q3 b) f; F3 U* t; N' v' r





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