嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,. j) b4 T6 u8 h: r
input mcasp_ahclkx,6 _% N& ~8 n+ K4 L$ b- b7 t+ e/ a
input mcasp_aclkx," Z, x  e3 v  I) L8 N3 w* o. U
input axr0,0 p" ?6 I8 K; N4 @4 v- `$ A

) D; ]% F5 P' p$ C! S/ \1 uoutput mcasp_afsr,
2 U$ d( @  f% Koutput mcasp_ahclkr,1 @" w8 L8 Y1 h& H' i0 H% P0 a
output mcasp_aclkr,
1 X! s. I# v4 T9 h/ o% Foutput axr1,& R* f' M1 \% `) R0 |8 K
assign mcasp_afsr = mcasp_afsx;
) v! `6 N: s' U- h3 I& vassign mcasp_aclkr = mcasp_aclkx;1 N; W% v4 k5 n) r
assign mcasp_ahclkr = mcasp_ahclkx;
! P' n, ?) {6 Z+ c5 G5 kassign axr1 = axr0;

3 T7 V/ z! v5 f5 S
# w/ G& o0 [. E( q
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

$ w: t5 c3 F" G: B+ F, j6 O1 G
static void McASPI2SConfigure(void)
. J/ g9 d" D3 M' j/ ~{8 a% n' M! Z4 r9 j# H6 v
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
& T. |$ s* ^0 ~7 H6 F0 _McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
: h4 p8 h1 z3 ~4 xMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
2 B9 Y+ P* q, e. VMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
9 B$ p8 ^+ C$ wMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
5 L+ L- x! f$ _( M; k! t( RMCASP_RX_MODE_DMA);
) ~$ t9 N1 e: C2 w# ]McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,' S: c5 W3 V( E" i% S2 X4 m; Z
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
  k4 b7 W1 |( JMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
& |, W; H, @, W$ l) K1 H% t5 a3 EMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);# f8 \& U" L4 o
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, % }3 w. }% B7 X3 A$ e
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */& }8 k- D# ?5 r
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
/ e5 |% n! V6 r, n) c+ lMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 8 x# q3 g8 i- q8 ^5 Q
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
1 u$ \) ]8 P$ I- T# \! Z2 _' r0x00, 0xFF);
/* configure the clock for transmitter *// l# F6 ]' g' ~% o5 L
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
" w# q* e4 |% m, S& BMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); % X" I- F7 x' r( H3 n
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,* r, V1 f* }; S1 {
0x00, 0xFF);
2 c1 J* t/ g1 ~$ t/ J7 F3 h; C% o' H7 R1 L: o
/* Enable synchronization of RX and TX sections */
/ e: {. t. Q2 e0 l1 lMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
  g7 J! l" e; HMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
- {8 I% h. o7 J- S; e& l& ^. H: RMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*7 ~0 y* W& z0 A: W
** Set the serializers, Currently only one serializer is set as) b: f  T* c( A6 l% l# i
** transmitter and one serializer as receiver.# R& K3 y: q5 B- n9 G
*/
1 c8 a6 ?1 i! ~) a2 G8 |McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);0 H, Q% B+ S, E1 s- S- u( O" i2 g$ F
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*; o4 }7 f: Y" l0 u- O0 v
** Configure the McASP pins
! c# l# i9 }! E! X$ y$ g; v** Input - Frame Sync, Clock and Serializer Rx4 A4 q- \0 A, ~: e
** Output - Serializer Tx is connected to the input of the codec
- e" j0 d" H# B6 Z6 \+ P' v*/6 g2 ^9 k4 E+ K9 K/ p* c
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
" g" r) x/ F1 ~; k0 |3 N, MMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
5 c1 O9 i+ O- VMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
$ u9 g" S3 l2 v3 T& M; a| MCASP_PIN_ACLKX
) u# ~' Z4 J- W  r& N2 i. Q( R. Q| MCASP_PIN_AHCLKX
5 e! d) R" f" ]| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */- F: b! N9 k* J2 Y9 Q! l, e% \+ q' Z
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
% P$ Q! `& R: `* y| MCASP_TX_CLKFAIL
7 ?, V4 `! _; H" w+ V) n$ c| MCASP_TX_SYNCERROR8 A8 I3 W  W) ]& X9 i. Q: H
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
9 @- ~" Z, m2 n  O9 g3 q9 s( b  x| MCASP_RX_CLKFAIL
/ }+ o- g6 i- i' {$ p7 V| MCASP_RX_SYNCERROR 7 G3 R/ @  g8 P. w9 u
| MCASP_RX_OVERRUN);( l, q( f# {& T6 `" X; {& l
}
static void I2SDataTxRxActivate(void)
3 o9 \$ _& l0 C/ `2 v{1 H! D8 C: ~. q8 n3 I
/* Start the clocks */9 F' c3 _# n/ n; K! e6 ^
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
; s/ m% I( z0 S4 l4 P0 M' m( dMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */5 }; ]8 W  I. _
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
8 z1 n- {: u% VEDMA3_TRIG_MODE_EVENT);# |" s, q9 Q( V% Q. T+ `, N9 X+ A1 B
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, . M+ N- j9 r: g! C' K2 L, t; q" u  T
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */; W1 K5 i/ ]) S( P
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);# @) q9 f4 \  d! q( r
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
; n) ^5 [. c0 Cwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */. \0 P, V' t' W: I
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);* i# h+ J: t3 V8 I8 ^/ z7 x
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);$ ]2 V) T' @! y* J& Z
}
& T/ I  q5 ?5 y! I
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

  r/ e" ]! f& E1 x1 E* `




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