嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,6 W8 v3 y# j2 a& B# K
input mcasp_ahclkx,' ?; o7 U3 H7 h9 z
input mcasp_aclkx,
* y$ p2 F) P# V0 oinput axr0,' ?3 h. _5 ?- Y6 g0 }# ~
6 ^+ Q! V# m# q
output mcasp_afsr,$ z+ ]& L' J$ H; r' l. [& {+ o
output mcasp_ahclkr," V3 n0 \% |/ M$ M& {
output mcasp_aclkr,8 g8 r; J! c& x& h4 C+ M" c* b) u
output axr1,: o' B& z5 V4 B  D0 p
assign mcasp_afsr = mcasp_afsx;4 Q. C# F4 ~6 ]" E
assign mcasp_aclkr = mcasp_aclkx;
+ w" X- _) s6 U$ X3 aassign mcasp_ahclkr = mcasp_ahclkx;
) o) x. T; M2 h8 Y, s7 Uassign axr1 = axr0;

7 Y# ?7 Q  a7 }8 j  P' C- F  Y6 J/ X. @6 H- Y
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

* \# L) _1 ?* ?6 z! q
static void McASPI2SConfigure(void)
/ w* G4 d3 K3 p, x- ~{
2 S- t9 [, S, W0 X# I0 f- D" U6 sMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
8 r1 H5 s5 k* `) t/ g0 zMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */' Z2 N7 _# {1 @- `
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);* j3 G/ v! r2 L0 @
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
9 C3 i* L5 |" E! P  \McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
1 [* k8 H& Y$ ]. j2 N; t8 hMCASP_RX_MODE_DMA);. D& M) S$ n, P* E6 Y, t+ R, B5 E
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
" |, a- L$ L: W$ LMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */2 u2 H  Y3 k0 i, `/ u- T9 [
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
' k1 J9 K0 R. C6 [MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
0 ?* m, f/ q' [+ _McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 1 }7 d- d6 _$ X
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
5 n/ W8 A/ C! v- }McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
1 A8 u# K2 e1 a" h4 r5 z: Z/ UMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
, ]7 a8 Q* H8 VMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,: g# E1 o, c: v2 p+ ]7 l
0x00, 0xFF);
/* configure the clock for transmitter */, f( R: V  C( u/ B. n1 o# u
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
( `9 v0 x8 a  w( F+ N8 x* j$ OMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
2 D+ ^* o' O8 x' ^McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
( h! `+ D5 L! Q% {; ^  b0x00, 0xFF);# L! D4 v3 I7 Q2 L& c

6 k) W8 C% E* _. V# Y/* Enable synchronization of RX and TX sections */
; G. u( _2 J- ]; I7 f" p( D4 @0 {3 qMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */* S1 g2 s  O6 v' j
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);0 i/ N, m# Q6 p7 J
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
& y9 X4 ~6 a6 ?# [! x# X** Set the serializers, Currently only one serializer is set as
* J4 s% r& _# @' W! S+ C** transmitter and one serializer as receiver.
1 ^- S* ^$ c( g# n4 L. j" Y*/! L( v9 t$ }' k8 |! z
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);$ ^. _4 y# `( `5 D0 e" {
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
3 V2 L  }  B" v# F6 f, w1 o. d** Configure the McASP pins $ S% R5 H( `5 W& m
** Input - Frame Sync, Clock and Serializer Rx; m0 t& m, i4 r" x+ ~, v% d
** Output - Serializer Tx is connected to the input of the codec & `1 q  Q  Q$ \& G- ~" w( n& k
*/
$ |8 Q! p9 z& O( ~) A- e# \McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);5 M7 w' Z7 @# H0 D
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));. V6 ^' X# X7 c: {/ n
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX/ _; G9 r$ O5 f8 U0 _  |* I6 a
| MCASP_PIN_ACLKX& d' d; z& X' V
| MCASP_PIN_AHCLKX' A  v; s: y  X
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */' \  {$ x8 Z# ?+ g* y
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
1 c% w3 v4 ^( u! O# D% S| MCASP_TX_CLKFAIL
: B* M: b1 L" ^7 J. T8 y$ Z9 Z| MCASP_TX_SYNCERROR
. [' g4 \- Q/ f" n1 \  c| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
$ X4 r6 c3 M" C9 K| MCASP_RX_CLKFAIL
, x( q1 e, p" E0 ~5 V' C| MCASP_RX_SYNCERROR & q( n- f; d/ c/ b' S, L, i
| MCASP_RX_OVERRUN);
* F% u0 |1 g+ _2 \* a}
static void I2SDataTxRxActivate(void)3 H& M, ^" h+ o9 ~+ m
{/ b7 ?7 S3 c- l; w8 V! M
/* Start the clocks */9 ?2 ~$ D/ W& `7 s
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
) x! ^7 B4 Y/ Q  N, M" ]3 w' k$ [# ]McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */! v" f7 O8 C0 I* W3 F
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,  ]8 {8 {) L7 M& T. c8 M
EDMA3_TRIG_MODE_EVENT);5 |! n& u$ E& a1 `: P. i
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 7 q2 O8 K* j  p+ ?4 A" \
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
* L5 {1 I1 W+ l5 e* c7 c+ l; i( SMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);5 f! N% e, t& }% W( e# w
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
! t; W, y, d' _while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */3 {0 a+ G: a2 E) `% f
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
9 L) y, \: d# g) EMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
! p9 j7 w  J6 A& h}

! R+ n3 S: Y0 E% V5 Z/ d8 \1 L4 }
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

9 O3 C2 _3 Q6 T




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