嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
* m7 J2 x5 T# ^# `. X; O" \input mcasp_ahclkx,/ M9 y$ B6 |4 r+ W9 x$ Q' _4 y
input mcasp_aclkx,; f' t% ]; z2 \& K- C5 j
input axr0,6 F! Z) {' e9 O7 L% X
) v! e% q1 U& e) n9 @
output mcasp_afsr,+ |: e% G, J1 e3 c: h% S5 n
output mcasp_ahclkr,
5 N2 F! }6 v% _0 uoutput mcasp_aclkr,* s3 E* n% b+ ?! \( ^% r
output axr1,/ U% Y0 @4 _/ y  k4 P( Q2 r
assign mcasp_afsr = mcasp_afsx;8 W4 G! U2 O$ q. P
assign mcasp_aclkr = mcasp_aclkx;1 g9 @/ ^6 m% D) E/ L
assign mcasp_ahclkr = mcasp_ahclkx;
; g: V7 a. B3 R, I0 Tassign axr1 = axr0;
4 R2 U; J+ d- _
8 ~( u1 S  |5 e
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

5 B1 b, P9 C, o6 t! P
static void McASPI2SConfigure(void)
6 R1 z+ ]$ J' l# _( O, o3 g{
; B& Y- F, d7 J7 B  R5 s7 vMcASPRxReset(SOC_MCASP_0_CTRL_REGS);6 |) g5 s8 Y7 e) S9 X8 }
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */7 D6 Z  Z+ H  b3 P4 y
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);  b* E8 f. F% G' }6 a
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */1 a& j% E7 C% d) ~; }
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,2 f3 x0 a0 b. @- F, u
MCASP_RX_MODE_DMA);
7 R$ d3 ?: M8 E4 O7 Y+ d/ k- [McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,$ G5 M* C/ d$ H
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */* f& m  Y- I+ u8 Y
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
. n; ^5 E& A) K" I! B, PMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
9 Q3 ^3 _; }; \- Y$ PMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
8 G8 p- x2 M# R0 O% kMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
) a/ A/ x; B* E) o+ @" GMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
0 e5 [* }: ]$ ?2 T+ I2 V' R0 V: J6 CMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); . r& {4 m+ b5 g4 c0 {# y) u
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
  _/ s+ e" Q! N. w7 n0x00, 0xFF);
/* configure the clock for transmitter */
4 |7 R( B% w  lMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);+ B: {& g0 Z4 I4 P, r
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
* X! h/ \$ _1 P) l6 o- xMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
( H9 W9 W7 |9 K; k# E1 Q; V7 h0x00, 0xFF);! A4 k) K! Q2 K/ o( h% |  E# W

& e; l8 E$ Q5 S0 S/* Enable synchronization of RX and TX sections */ 1 U6 E6 ?1 G/ Z- A" w  N
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
- Y$ v$ x) m7 N7 |McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);- M% Y- Q; C8 m- Q
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*( `% F4 `* F# o
** Set the serializers, Currently only one serializer is set as7 [+ \) P- g3 T
** transmitter and one serializer as receiver.. h2 P9 |9 D/ t2 V/ Z* @
*/
+ v0 `( Q5 E  J# W* a, ?McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
; u* ?$ ~0 h# N3 KMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
4 o9 r" H0 [: e- x  Z** Configure the McASP pins
% X, P3 u- g% i0 V% O** Input - Frame Sync, Clock and Serializer Rx
$ z/ `! g+ ?- A2 @) z** Output - Serializer Tx is connected to the input of the codec
! B! g' L7 c, G- u' b, L! T*/5 H1 i: @. R6 m3 U2 M: z& ?
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
. e* G  T7 ~( pMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));, U  ]! A/ ?7 {" d' B8 c' j+ {8 c
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
7 q  ?" W- B. X6 l: e| MCASP_PIN_ACLKX' L! a% l9 Q  T1 q( T1 w; D
| MCASP_PIN_AHCLKX6 ]" W+ {- ^, n: L! u0 t: b1 {
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */4 P" [1 C  x8 E3 X6 ~% _2 k
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 3 g3 I7 X# \  Y- y- I8 x* y0 n5 a
| MCASP_TX_CLKFAIL
: G8 x6 k. U* u0 c9 X0 R| MCASP_TX_SYNCERROR" j, q  S! c1 A
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR " L3 u; |& d: r
| MCASP_RX_CLKFAIL. N  L8 h/ i4 g7 C& z+ |. p
| MCASP_RX_SYNCERROR " P- Q. Z) k$ ?; f" ~
| MCASP_RX_OVERRUN);
. u( S& y- |* g& {! n" k' Q& m9 Z}
static void I2SDataTxRxActivate(void)& }. P0 `5 b6 W7 J& h1 O1 L
{. d& I! \& I1 d4 j. `8 J
/* Start the clocks */
1 ^+ R' Z+ q& m: |$ uMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);# @2 i; I. I# q. R7 z) I
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */* T! c7 V5 a% {' @9 j6 w
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
6 |! ^8 M4 f. v+ F# u" z# M% NEDMA3_TRIG_MODE_EVENT);
6 c9 K' O" d) i2 H+ Y1 V9 pEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
  [8 ]; h3 p# uEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */% V. b! K/ V3 t+ J9 ~0 k( s; ^
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
3 c, |3 \9 E2 _. [6 zMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */, U) I+ d/ D  _0 a* W/ y6 Y8 X
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */1 K* l/ H" ^& j" t6 o5 _
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);! |3 N) v: [- E9 P0 u9 z* G
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);9 @  j4 i$ Z5 m- Z: ~+ b
}

5 @! Z: P9 @  I& b- o
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
% O/ S7 F& M5 O! r





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