嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
/ D: ]3 Z5 H. b) Yinput mcasp_ahclkx,6 s  N  A8 q  X
input mcasp_aclkx,
9 R, G8 A$ H8 s7 H8 v+ ~! Uinput axr0,9 S2 G6 F4 l8 `2 r1 v

! H% D0 s* {. `7 O7 I3 Y2 Koutput mcasp_afsr,
- q1 }+ X' C# u" t( M! Eoutput mcasp_ahclkr,5 a( Q) ^2 O4 l  T, e& E
output mcasp_aclkr,
1 U& w! y# Q5 \. v0 x/ Ooutput axr1,# [/ `/ k* E0 ?3 o
assign mcasp_afsr = mcasp_afsx;
1 W& f. q' O4 C8 Dassign mcasp_aclkr = mcasp_aclkx;
9 _: m9 i, R) p9 H" f' o1 `* m  Hassign mcasp_ahclkr = mcasp_ahclkx;% C6 a$ V5 M. D9 W- O/ p
assign axr1 = axr0;

: i. y4 A, j8 O, S; R$ c* N2 f* E
1 q# }- R( q1 @* B7 R
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

5 Z* y( M* s1 X3 G
static void McASPI2SConfigure(void)! k1 Z, R8 f, s: h: b
{
( q8 h5 N" v& |: P$ W* @  Z& dMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
# ~4 ]3 C% @+ E- J, f9 }' QMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
* h/ E7 Z5 k% c' qMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
3 o  R- O2 N3 M! @; pMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */5 {7 a: h, J  E7 }/ \' c& c
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,5 \2 `/ W3 b0 k
MCASP_RX_MODE_DMA);3 h  W$ }5 _- y
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
) i/ O/ l7 D6 x7 q% n0 FMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */& L5 d7 r7 O# ^8 i
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, . K  _$ h( d: v, W
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);$ K5 I/ D/ ]7 ]# g: a6 h
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
( p( S$ n4 F2 @* x: u( W* R' \MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */& C/ V4 c8 k4 y  r( V% w
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
8 D" Q5 r# i0 x; F% bMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
4 t& X" A# p: M4 m' ]McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
; g: z; `$ y8 X2 n0x00, 0xFF);
/* configure the clock for transmitter */+ u  _1 z7 k9 \- e9 O' \" F! ^( j$ z) x
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
: P' T$ N$ o7 h8 jMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); + k( F) e" N% ~- r! H2 b6 l+ S" E; l
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,0 M" `2 r/ b! N6 m
0x00, 0xFF);3 v1 l" |6 }3 Y  M  u- n0 q

/ g0 c# ]( ~6 z: C& v( |* p/ S/* Enable synchronization of RX and TX sections */ ' d* F7 f5 E4 o! K6 l8 O
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */9 s, D  d* _  G# ?" L
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
. s* `* p; r4 t: ~$ XMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
' Q5 ^0 Z# Q5 m4 `1 F3 ?6 g** Set the serializers, Currently only one serializer is set as1 |) w- X" w# P- m
** transmitter and one serializer as receiver." K' s6 B) q2 x0 x: A) h
*/+ l. d& J; d) v( p& x) R" k8 Q
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);. [& s% y4 E; Y
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*6 w; x$ H# H" D3 x! W% l
** Configure the McASP pins
+ C9 w# |  F6 e5 k** Input - Frame Sync, Clock and Serializer Rx- ^( K$ H+ G+ v7 G7 c/ Q4 ~
** Output - Serializer Tx is connected to the input of the codec : _5 g1 [1 G( y
*/- T: d* c7 h" l/ P+ ], L% p
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
' t. Z- b' r$ P. ?( t4 f! o/ xMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));1 O% ^4 Y( p$ N* n9 \% z
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX0 D$ \! X! T9 W+ f9 {! r
| MCASP_PIN_ACLKX/ p5 i  Z/ |+ ^- D; P
| MCASP_PIN_AHCLKX
! P. a& G/ ^3 a7 I2 Q| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */) ]% `; [0 H: u/ p9 B
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ) i0 Y, l% [' O6 t% R
| MCASP_TX_CLKFAIL
- l( E' }/ ~" t6 |4 V8 @0 u: p( y| MCASP_TX_SYNCERROR+ z9 T+ f7 u+ ^3 [
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR   S4 e! B/ Y4 l! X* H! b$ `# e
| MCASP_RX_CLKFAIL
7 @0 {* J3 s+ |# x! ~: E5 n| MCASP_RX_SYNCERROR
; n: F' t; [& Q| MCASP_RX_OVERRUN);4 N3 h6 e% ^8 U# d6 m  T7 Q' r& g
}
static void I2SDataTxRxActivate(void)
4 T3 O9 t, ]. G/ x  z$ Y3 n, {{* R% M# ~# b2 O( E1 u) i
/* Start the clocks */9 [0 M% B6 U& W0 V" D
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
6 z  s1 _& S! y) E4 ]McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */1 T0 |" e+ n: m
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
5 V- L, p2 H" o1 H# l; S3 e$ x5 YEDMA3_TRIG_MODE_EVENT);
- E* B) T# n# _9 ?EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
0 e2 |9 [0 p0 x  D$ qEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */8 E( K- G# I6 F* c
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
5 q+ N. o+ E$ l6 OMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */8 x* ~& ?2 q% q
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
- E4 y/ p* ?4 i$ D# N. s) aMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
$ q  V; m9 r1 ^McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
' r/ s  w3 P, }  X- i9 i3 f; V}

/ }/ a, e: G, Y% p. _5 `& t% T5 M
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

  o. I& T8 L; M




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