嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,# [! n% {7 a6 g& M$ h8 L. N5 K
input mcasp_ahclkx,) K7 u0 `/ }2 H% M4 U
input mcasp_aclkx,5 g% N$ B+ x" p$ @6 a; z
input axr0,4 M4 l* z7 O, r, f: n

: P2 D# q( b6 k! e1 I# Qoutput mcasp_afsr,
2 K" z' N4 Z$ m1 ], A$ ~3 routput mcasp_ahclkr,
7 j/ u2 ?* w* uoutput mcasp_aclkr,; \4 c+ o+ {0 n" U5 H2 R
output axr1,
- ?/ j7 p0 S1 N5 f
assign mcasp_afsr = mcasp_afsx;' h+ t; S0 `* P' |, a4 _2 C" T  B
assign mcasp_aclkr = mcasp_aclkx;
; k: b0 y/ ~3 N9 L$ n3 Oassign mcasp_ahclkr = mcasp_ahclkx;1 m" z5 j! q, Y# B4 y5 M8 v
assign axr1 = axr0;

% O  p$ u7 |* y, S  b. ]- }9 |. a
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

) {, A% A; |, B
static void McASPI2SConfigure(void)
( V6 K) j, z% n2 \9 v{
  b4 q! U2 Z  ^+ C, y, ?McASPRxReset(SOC_MCASP_0_CTRL_REGS);5 g/ E; G' Y, |0 v( t
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
# F3 ~, o" n$ q" u/ }McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
! j& r* p! G" D) L  t/ qMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */3 e7 u! ^6 M2 c0 L
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
2 T1 g4 v% w: D) LMCASP_RX_MODE_DMA);
/ M3 H  F& M; _" Z$ o' AMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
1 a, i1 B, s5 \: x; u( q, XMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
. N! a% O: K5 K' \1 S& hMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
& |7 g) {& D: v' N2 w$ [+ o' ?MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
4 D3 \- n5 @& Q5 }. m) NMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
% h$ h7 ]/ K$ [6 s% r. zMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */5 u+ _5 m" x1 s- A
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);, P0 o8 A% n. [, ~% R
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ' e, ~, u& V7 E& t3 i
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,- P- p* v/ @: l" r! {
0x00, 0xFF);
/* configure the clock for transmitter */
5 p; g7 r# S  Y3 o, W/ CMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
7 s9 W' X* o6 o1 {7 j2 uMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
" ]$ m: }- Y% S+ X" A0 iMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
" ?. E  U6 y+ I+ F, h* z0x00, 0xFF);
* s+ X0 g! ]' a5 h0 e- k# I7 ]8 C3 ]; s  [
/* Enable synchronization of RX and TX sections */ ) X4 a& r$ Z' j# M# y
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
( P/ P. C  v; C/ o% ?McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
3 _. `- c: t- K( m( T+ }McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
' R) P- i4 W0 W) ~** Set the serializers, Currently only one serializer is set as
' e, p0 S  n5 p) o9 j! S8 H** transmitter and one serializer as receiver.0 m) ]0 z* w9 v& W) P
*/
$ N+ H9 j9 J+ |  `* S6 H* AMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
, P8 H' c( A& vMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
3 P6 d9 ^. B, u4 e) h: b** Configure the McASP pins 8 \/ ~/ `* z+ h6 h$ H: a7 m
** Input - Frame Sync, Clock and Serializer Rx. N! x2 `4 f$ S; i0 p0 c
** Output - Serializer Tx is connected to the input of the codec
# a5 v2 a3 @. j*/4 ~( J2 R' _  `7 s" _
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);# |1 {1 |  q: N) J1 M  H) x
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));1 L% E$ ~* y5 X; O0 r* }
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
' @# N- Z2 y, q" l! b; {$ R| MCASP_PIN_ACLKX
+ v/ `! V& @- h| MCASP_PIN_AHCLKX) P2 l% h( ~* q) x; d& T8 F! L
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
- E1 T% I- v8 Y3 G5 w2 TMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ' u; ?) G' E( D) i- W4 _9 T3 H( b+ B1 G
| MCASP_TX_CLKFAIL
1 L2 i1 c0 C4 D; R  K+ m  @| MCASP_TX_SYNCERROR
2 Q9 a# z) ?, O9 W| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 5 C7 M/ v. G2 S* ^# |. p" o
| MCASP_RX_CLKFAIL
4 Q% L1 G. I) P5 i2 |9 V6 V| MCASP_RX_SYNCERROR 1 G5 n( W2 q: I( i' g
| MCASP_RX_OVERRUN);  @' ^0 r# @. ^5 A  g6 L) R
}
static void I2SDataTxRxActivate(void)
- {' f3 o6 c8 u0 e9 Y; Z/ F* d7 ?{
! J7 S5 C. j3 l- N/* Start the clocks */
) K) [( O( y4 h2 ^3 S+ p; p$ XMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);: W& I% E! i) N2 w, X! E# W
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */9 x5 ~1 |0 J# s# }! {; @& F
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,( @& `' w7 q: D; S0 K0 }' E
EDMA3_TRIG_MODE_EVENT);
/ s2 Y' h4 q* OEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 6 @. F- B. d% m  X; j
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */8 i5 x2 Y  G, N. A
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
" N! C' i" X9 xMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
7 G1 p! [, h0 Y6 qwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
& b. r( h6 W1 L. V5 S% \9 a  PMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
6 N! q  r7 z- N) h* nMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
6 a0 H7 b9 k( m6 ?}
' e1 K2 `- C6 b8 n) x6 i
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
7 I5 F+ ]3 `3 M& k- @" k3 n9 K! H





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