嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,5 Z8 o8 m5 S/ l
input mcasp_ahclkx,
) c* \9 C3 t! \' V3 [8 m7 Winput mcasp_aclkx,) i! G9 U3 o8 g5 T
input axr0,2 H$ d2 N3 A8 i/ {7 t4 j

3 F% L, U, x. V& k  p9 H" @output mcasp_afsr,
$ {7 f7 I% k' b% R9 routput mcasp_ahclkr,
- }: H: z  k- o# U, ]4 u7 {( T) Joutput mcasp_aclkr,( N2 d# n: ]6 c- o
output axr1,  _; b$ O; g# p/ L
assign mcasp_afsr = mcasp_afsx;
& [% d) m9 L/ p, g6 {- lassign mcasp_aclkr = mcasp_aclkx;& R2 [+ g5 Q! M( c) y- Z
assign mcasp_ahclkr = mcasp_ahclkx;3 o- j; L1 k/ Q) h
assign axr1 = axr0;

1 C' d& u. n' o% t! x, ?- s0 ?! T" c" J4 e" k
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
' r' g! q6 O: t; X. T
static void McASPI2SConfigure(void)
( t+ }% g! z8 P9 G  j2 Y{
) w. r6 i! ]7 d$ M- c. pMcASPRxReset(SOC_MCASP_0_CTRL_REGS);- V/ H! w# [: U3 j8 o
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
5 \$ k$ G: |0 \8 VMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
- g0 z. g5 C. |4 AMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */0 j& V, j0 ~3 A  P& f+ S, S( T% G
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,7 g* d9 m. R4 i( o
MCASP_RX_MODE_DMA);
1 f! r, d7 u1 hMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,3 w+ b$ b. K' b
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */6 |% N7 c# \" X+ f. T
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
! C( D# n" N8 x+ @5 d! h. X' ]MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
- ^1 }; {1 G: S; z& wMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
& ?4 E4 f3 A+ x% S; c2 LMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
7 F5 v' _) A/ u9 H$ g' hMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);: L2 c* \% o- n
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
! z8 @7 K2 |5 c6 mMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
! _; v1 i8 L; P7 g' V0 W1 L# l0x00, 0xFF);
/* configure the clock for transmitter */( G4 ?% J3 _) H1 N& @/ s/ a4 i
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
: O: T; ]+ W0 a% g* K! ZMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
: d; K& f' e; u6 ?5 vMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
0 l6 c* |- B; Q$ k" I+ Z& y! L0x00, 0xFF);
% p7 s( V. v) v& H. \  ]
! y) W# M) c. t& H. B2 S, D8 ^4 y/* Enable synchronization of RX and TX sections */ 3 q# ?/ E0 f. D, B. u
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
! Z/ I. p0 _4 @# ~. z* w( o% }McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
' n9 C7 U6 e8 TMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*: V! v6 U# u( z6 ]9 y$ z" A
** Set the serializers, Currently only one serializer is set as, A0 c$ c1 ^  l- d$ F  _5 v& ?( \5 W
** transmitter and one serializer as receiver.* H. I4 H! }# t* `
*/$ \. {- O0 t6 e2 D% a; y5 p
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
& p4 t& f9 |  w) r+ S- k) x! CMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
0 R6 q9 R% m- t4 w** Configure the McASP pins
. n. ^/ w9 f* _1 \0 h4 x' P1 x** Input - Frame Sync, Clock and Serializer Rx
4 ^9 K0 l0 r* O# ^2 A# F% d** Output - Serializer Tx is connected to the input of the codec 4 H/ ^3 ?( L9 I
*/4 q- W) t# n% y7 I9 m- m
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);7 Q: `+ c" x0 W  e$ l1 y6 g
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));7 m9 ?! O) _% y& |1 n/ H. c: M
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
: q; B' x+ G, A0 Y1 X6 s# s| MCASP_PIN_ACLKX* n& {! T& b5 ^2 p2 z- ~, ]
| MCASP_PIN_AHCLKX  N7 a# L$ \0 Z) V3 I
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */' {3 ~) o# S1 j( Z, U. @* R3 b
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
+ z" v/ w2 ?" h| MCASP_TX_CLKFAIL
) M5 R3 F  W9 H  g8 B/ A| MCASP_TX_SYNCERROR" K/ O  z3 C( S* A
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR % Y* }- c: j- l$ A: g
| MCASP_RX_CLKFAIL$ f8 a8 X! ^$ f! X8 N4 o
| MCASP_RX_SYNCERROR
5 P7 A- o% O0 P7 x( M3 u) E| MCASP_RX_OVERRUN);
, ~- ?* G$ K6 w}
static void I2SDataTxRxActivate(void)3 P2 X& _  L! L* y" s. c7 e
{
! @5 c" u! e6 z/* Start the clocks */
: Q7 z6 j: f. L+ p. O  H" _' j& kMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
* d7 f2 G5 c# k+ ZMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */2 D3 X0 g8 j$ [9 R. ~+ v
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,4 l; l2 ?" T3 _2 m& V3 m. l
EDMA3_TRIG_MODE_EVENT);
3 l# K+ J! s7 V7 U+ m- J+ aEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, . y: u; s9 ^( z9 B9 `% s# _" i
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
1 T( }0 v7 L, I; d6 hMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
: t! O' [/ C' x$ X  J+ XMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */* M: ?$ u" T+ ^, G5 Y
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
7 H6 }  V% ^% ]! y/ R' t" oMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
, _+ W$ b; t6 x5 z/ YMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);1 x# z) i- w, e; t
}

- i% D5 Y0 x5 R5 j5 X6 Y$ e5 }0 C5 C
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
2 k& d$ u$ |. q2 G7 w





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