嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
  l6 I; z; F9 Z. V9 k- Zinput mcasp_ahclkx,
0 E) r( a5 }* F) J: Ginput mcasp_aclkx,
! m2 l' Z' h# f5 ^input axr0,, h4 z) _# h8 u& n3 i) i
1 p# M, G) \# u# N
output mcasp_afsr,% ]0 _# \' A! n* G7 p& q
output mcasp_ahclkr,
8 Z$ V; k9 s' b. Soutput mcasp_aclkr,8 b- `! T% p. e; d1 x, M, E* g5 x
output axr1,
$ _/ K6 O6 Y" U0 X% z- I
assign mcasp_afsr = mcasp_afsx;8 q0 m3 `7 y1 {% A! {0 T; z
assign mcasp_aclkr = mcasp_aclkx;
- t) B) j% J( L$ V* y& E1 k, ]& Oassign mcasp_ahclkr = mcasp_ahclkx;
1 h+ M1 \' j; O+ [. Sassign axr1 = axr0;

' F% H) D- s& l! N" ]
$ M# C5 B* ^0 j8 v, z, a
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
; x2 l1 w" s5 M. I
static void McASPI2SConfigure(void)
2 u5 L2 C; I$ b4 }; {{8 E% r9 _. S4 p, V9 W+ b0 L% k
McASPRxReset(SOC_MCASP_0_CTRL_REGS);& Z' t) @: H0 w
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
- |( }: g3 J4 d2 l. Q0 CMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);& u2 {9 x3 }2 P% B: @0 B
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */( e# I, m. O7 p0 F
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,8 P8 U2 G3 H$ Y; i) p" J( V
MCASP_RX_MODE_DMA);
- A  Y/ Q, e1 L9 ~  Q3 VMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,' W3 U+ M4 W; l' @% W
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
$ v& Y1 I2 B! d% h1 i# mMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 0 H+ u% A. |1 D  v" J5 F
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
7 b- p! Q% d) E$ X. NMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 9 [+ y" b) ^4 S, I) M" n! H# f! H
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
* y- b) l' _& h, jMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);2 o3 L0 r/ g) m! D1 b$ M
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
+ a$ e% ?" @5 \0 EMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,* I: L: }- d3 _4 y3 P, V
0x00, 0xFF);
/* configure the clock for transmitter */
& o$ ^& p  @+ l. t/ [McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
6 s. E" @. l3 K7 r9 w' CMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
- t6 T3 n8 b; J1 w' ]9 RMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,; f+ Q' B1 _+ g4 d! y' K6 S/ ^
0x00, 0xFF);
5 }) X$ z9 J1 K% Y- U6 Z7 ^0 G4 c; h0 @) R; P2 q; K
/* Enable synchronization of RX and TX sections */
4 ^: ^: V0 \+ K  M9 z: tMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */( F- ~. j4 a) Q0 H' a
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);+ d# f& F  F: [
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
+ e9 V6 _/ H6 N# g1 y% k% s** Set the serializers, Currently only one serializer is set as
5 ~  f- t8 G8 ~** transmitter and one serializer as receiver.. A, u) [9 `3 U1 E/ ]2 e6 S; x
*/+ c& X" Q7 w4 M' o
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
) G$ A! N+ s7 k7 L& Y) K9 K& Z, j; SMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
3 G0 l* Z, P- O8 [% t, V0 z** Configure the McASP pins % ^) l9 Y# m3 U. `7 D7 t
** Input - Frame Sync, Clock and Serializer Rx, b' [- X0 t( I7 O6 A% {8 a
** Output - Serializer Tx is connected to the input of the codec & R& y# w) ~4 {: K2 b
*/. \3 Q% q: R1 c; P9 G1 C
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
) i+ O% y0 c7 F+ x# K+ ~McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
1 v" c: B) V  H, NMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
" S7 p' ^8 q2 n& M9 |/ a| MCASP_PIN_ACLKX  u8 v6 ^- a- j# Q3 z, O0 c
| MCASP_PIN_AHCLKX
9 K  j9 t$ G+ O. m7 k! W0 ]6 I| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */# {, }2 Q% i% ~  h
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
& @+ M1 h8 f% K9 ~# f; P0 N| MCASP_TX_CLKFAIL
# R. A7 N: M$ \1 ^6 ?5 A6 y, || MCASP_TX_SYNCERROR' v  V3 N- s; o3 k
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR # P: t$ o; T0 T8 `, x9 Y" P2 d
| MCASP_RX_CLKFAIL
* o5 |4 U; J+ K. m! v  E4 D| MCASP_RX_SYNCERROR ' I# @1 K4 f) S
| MCASP_RX_OVERRUN);3 z! C- P: T- I% R
}
static void I2SDataTxRxActivate(void)
4 t5 G1 a9 u$ T% J, \{0 U1 j# y. _6 ?9 Q
/* Start the clocks */
8 n; q* p: P* {4 l( L' ZMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);2 B* H8 N2 P9 x, x3 I: b1 Z
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
9 Y' z: I. Y% _1 V9 |6 r; |3 e! D2 OEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
: R/ ]% c5 `( D8 Q4 R7 |EDMA3_TRIG_MODE_EVENT);
% ?: H! J. @8 m6 D5 _- l4 Y+ QEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
* ^. L0 u) j3 DEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */0 y- Y$ S( j$ G; O+ ~
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
1 }9 D" p2 y' pMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */( k1 I! `" E8 h$ m
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */7 M" r0 r! t" `, x, o2 @9 w7 |' }
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
; v9 W& O, \) u; u8 |McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
3 d; _+ z/ e; e( ~}

0 i5 K8 g& S3 w. |  O+ U
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
# ~7 a% A) `. u0 N  s# s& d! K, m





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