嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx," q# c' l* h2 O9 g
input mcasp_ahclkx,
8 z5 f6 e: @! Linput mcasp_aclkx,# F& r9 h, q9 n) l  I' F6 S) R
input axr0,  I5 [4 u, V1 n  _% g3 m
5 f) {# N0 P7 S' K$ l1 b# O
output mcasp_afsr,
/ t/ h" h/ i7 V% L! zoutput mcasp_ahclkr,
6 l7 }, Y% {0 g" u# E+ c6 I2 coutput mcasp_aclkr,
7 F2 |/ \5 J1 B" j; d( H% qoutput axr1,
/ ?3 H& d0 c1 V6 t* W2 d
assign mcasp_afsr = mcasp_afsx;
  l4 K) X; n. W3 j; ]assign mcasp_aclkr = mcasp_aclkx;
) G3 m0 m/ I! G* P9 L7 a9 X* g) m. Jassign mcasp_ahclkr = mcasp_ahclkx;
2 J+ Y2 B0 D1 Aassign axr1 = axr0;
5 e# x8 r3 k! X0 ~, x0 w
" z- y/ D: v5 `. S4 M. O0 r, T) \
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
2 x2 a( a- Z7 @2 g* \# ]8 a( A: h
static void McASPI2SConfigure(void)
: _$ G8 ?4 b6 H  f, r% M( i4 E{+ G/ B9 p7 M0 {% O1 `, ?4 u3 x
McASPRxReset(SOC_MCASP_0_CTRL_REGS);; w0 p# D  m3 n) o
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
5 Q1 G. Q! A0 l3 ?; G$ \McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);6 @, ^5 g& q! E. R2 `7 i
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */, {* l5 S' T7 Z9 z
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
0 t' U/ z$ v* wMCASP_RX_MODE_DMA);
5 X% B9 |' I, I, W9 KMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,. T# K4 \& {! T
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots *// ^+ ~2 z, T/ @9 ]) T5 q% |" I) H
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
9 t' @. [: l$ E6 a/ CMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);: Y" C9 y8 i7 G8 m& x1 N$ C
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ; W( d* _* r& W4 r- p  h) C5 W
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */) B8 U2 W& f2 a0 y& l1 `7 M
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);* X5 M' T( a7 h2 r
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); / l3 u* L3 |, F6 U5 w# [  i
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,% r) y- C+ A, @/ J; U" H
0x00, 0xFF);
/* configure the clock for transmitter */. a6 x6 M: n4 T& x" v7 n4 _% T
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
0 X5 w! U* K6 e7 }' ]$ z% G3 O3 z/ _4 xMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ; n& l: m# `0 p0 e' B6 }& Y
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
/ W: r* i6 D$ ]. ^6 \; Y" h0x00, 0xFF);+ n/ p  q! q( l) ]- v
) u" o* u8 G' n7 c
/* Enable synchronization of RX and TX sections */ 1 z: T! H3 M4 {/ X
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
8 Q2 o7 r+ _+ aMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
$ G5 S" F4 \+ u5 B* u  w& LMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*$ S4 n9 X- O% G0 V5 o$ ~7 z- n
** Set the serializers, Currently only one serializer is set as7 D% ^1 O& q! V+ n
** transmitter and one serializer as receiver.2 A: J! j, T' [- Z) b8 S* x9 o
*/1 A: j1 o9 s2 ~7 d+ R/ i8 \
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
) \1 I; N! Z! K$ OMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*7 {1 b. e& X* Q5 ]: \( r
** Configure the McASP pins 4 k' s/ D4 y3 e
** Input - Frame Sync, Clock and Serializer Rx) d$ D, k; w# k- Q4 v( j
** Output - Serializer Tx is connected to the input of the codec
; n# u% V5 c1 y9 X& o# }# J: }! J+ X+ P*/
# j0 N7 Z" F! K- \  RMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);  U8 A6 W2 Z) s1 ?. r1 f
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));/ i3 `" c" ~  M- z6 U2 T$ h2 s  e
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
. x5 `) |" t3 K| MCASP_PIN_ACLKX9 s( I2 V3 F8 p7 K& D7 M1 D
| MCASP_PIN_AHCLKX
; V' b$ ?0 s/ h* |7 S| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */, U" \& E  x: _2 O& U! n) m. n
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
* A: g  \9 y4 P6 j8 K| MCASP_TX_CLKFAIL ; B/ }2 ]: u4 A  `
| MCASP_TX_SYNCERROR/ N* X' N/ v- J( j' X6 B
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR # G7 P6 r6 n. U. [( Z
| MCASP_RX_CLKFAIL1 T& d0 L4 t  C. r; K! y% l2 Y
| MCASP_RX_SYNCERROR $ C) L- ~  f* Q6 L0 Z1 j- o/ ^7 @
| MCASP_RX_OVERRUN);
/ M# |" I. P2 j0 e/ q}
static void I2SDataTxRxActivate(void)
+ z8 j$ O3 n( v/ N* f" K{
8 ?) h- [! a( x/* Start the clocks */
4 q1 Y% u' s+ s( K4 N+ w" PMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
* E. z9 `7 x  L. SMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */& I8 g0 Z2 J+ i7 k/ q5 \
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,2 Z0 y# v, S; B2 E* Q7 _6 Z
EDMA3_TRIG_MODE_EVENT);8 N* v& z2 [9 P0 l6 @% j
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, , b) t+ j) s/ Z% U' m. h4 j
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
2 [, `$ _8 @; \/ H( e. a" T+ a, OMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);& d; }& ^! E; _9 a+ H$ T
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
; A: B4 v* U$ ^9 ^while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */- X3 {) Z: m9 X
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);6 d0 G6 F; s3 F2 E/ z$ ~
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);9 o, V7 J1 W3 x$ w; b& E6 E1 ^
}

- b7 l; V) S$ R6 x2 m
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

2 |# ?2 o; a% K" N




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