嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
5 x& V$ n7 J; e" x8 Dinput mcasp_ahclkx,$ t. }/ t. _# b0 v
input mcasp_aclkx," k  Y- A; N5 i; C  J5 p! u
input axr0,
' U  x$ u! L' ?4 f
, e8 E8 M$ v* w9 K7 g. Joutput mcasp_afsr,8 }- Z! C3 p3 ?, w* u2 @2 i2 m
output mcasp_ahclkr,  `2 n; m9 v# a( H" K
output mcasp_aclkr,
1 h% U7 q6 N9 w# M6 goutput axr1,
; d/ y7 Z, L/ w7 ]) q' }7 w% N0 n6 x
assign mcasp_afsr = mcasp_afsx;
. c! q$ {, _4 z3 \& ~6 Nassign mcasp_aclkr = mcasp_aclkx;
. F& ]# d1 q2 Massign mcasp_ahclkr = mcasp_ahclkx;
0 l4 v+ O7 H/ `% Iassign axr1 = axr0;

" {7 a3 ?/ K' d" t! M! [  J7 Y% n: }. e9 _
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

7 G% a! C# {/ f) t2 \
static void McASPI2SConfigure(void)
: F1 c. y$ Q0 j$ e& ]+ x7 s: L' N{
" [4 x, c' m/ j; D& ~9 L+ j  nMcASPRxReset(SOC_MCASP_0_CTRL_REGS);7 J" u2 ]" U# o
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */6 M* @- T+ x5 V, c& Y' f
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);. p; U' m. q5 ]  M5 {( u7 l
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */) S! ~8 ?$ r  H) c$ g6 D$ _* i
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
- W1 R- B9 L0 XMCASP_RX_MODE_DMA);0 m- t8 D6 L5 y& x: e. Z& @
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
  q9 J- {+ W8 o2 `* iMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
1 T" v' F' g4 j5 l8 P. M4 hMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, , I2 V8 I6 n& W5 ]5 s1 M; c3 |# j
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);# U) V( D$ O( b8 |/ O3 F
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
8 j4 v1 T" Q2 d" x; e/ p  WMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
( I4 n8 C: D$ P  v- g6 e' [: _, yMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);2 }+ t, K3 i- o5 w
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 7 W: x; f2 }' ]/ i0 i
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
+ S( a, ~% \3 m! e) ?7 r5 k0x00, 0xFF);
/* configure the clock for transmitter */
  ~* K3 r* d% j$ E1 TMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);+ I1 ^+ @. K0 A# X8 j: D
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); * n& R' x; E* ]: `# B
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,3 k( C: L' ~1 b0 h: E
0x00, 0xFF);
0 O/ m. k( `+ ]0 f2 u
, Q% g' D# |/ f0 w/* Enable synchronization of RX and TX sections */ $ m  I+ s; ~( c
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */$ c( ^; [, `# Z. A- L
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);. n  Y$ ^- R7 X+ B, M# l
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*0 V0 l5 o% r& g, u8 j  [% m5 r2 a
** Set the serializers, Currently only one serializer is set as
- r2 {0 ^. I" D, j** transmitter and one serializer as receiver.
5 e3 Z+ ~" |5 J) ^, z*/; M0 t1 ]. v7 q' L, S6 S
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);2 @: H) n; k8 |9 Q" p( ?: U; q
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*+ e' w; m2 X$ v; c5 |% C- t
** Configure the McASP pins
8 t$ [+ e' }: J7 ?6 c  |7 w7 ?** Input - Frame Sync, Clock and Serializer Rx
0 a, Z( O# j- e5 S/ N** Output - Serializer Tx is connected to the input of the codec
! r3 W, j/ o- H  b*/
. }$ u  S. k' i- ?5 y0 V, DMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);' n* K8 ?# V5 J. \: ?; A! M+ s0 A
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));) N4 w. W5 d1 N# x
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
) I( S1 W/ d* B4 j  Z| MCASP_PIN_ACLKX
/ o3 ^# v- V& `& A| MCASP_PIN_AHCLKX4 b' U  S) A6 ?# Z* {" o! d
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */2 r8 I5 ]" M) F' @4 O: C
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 3 O, R' K: N5 d# `9 e
| MCASP_TX_CLKFAIL - e+ Q6 g4 R, a1 A3 h
| MCASP_TX_SYNCERROR  h" u0 u. A5 S2 P6 M3 c
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR $ o) P9 p: @, m' M- G
| MCASP_RX_CLKFAIL
7 Z$ b8 x; W: R1 A; b! A| MCASP_RX_SYNCERROR % o/ L3 d. ?" v1 w
| MCASP_RX_OVERRUN);. Q8 ]3 i, N+ c+ p* z
}
static void I2SDataTxRxActivate(void)  p2 i3 D9 }" y: i5 T
{
/ ]. b0 }& z% D5 e& q6 j/* Start the clocks */+ m& p' _9 ~" G" H# a
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);: G2 F& A7 B$ C* J6 S# e; U
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
) @9 a3 w! X3 D+ S; wEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,# B  O  H, D+ t- N+ r/ T
EDMA3_TRIG_MODE_EVENT);4 n7 b! u) Y+ ?/ w: g+ n
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
9 d" [- j; D# U$ z: q$ p( ^$ GEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
$ W+ |( [9 G4 d8 F3 i6 zMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);: Y# J8 O8 k$ k$ E9 k7 M
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */9 Q7 J2 [2 H9 W" W: ?9 D
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
: D0 }/ O; M% ^  sMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
& n+ o) `+ m6 J/ z+ N; XMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);9 t7 w0 q0 m1 L7 {5 k
}
" \  J5 J4 u& u
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
4 m, @# O: h; r/ w9 v) w0 F! t





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