嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,5 o7 s, v3 [& d/ T! V# J$ ^1 M  k
input mcasp_ahclkx,. {  l' S5 b; s* Q. c. |7 Z
input mcasp_aclkx,0 N, x; t( l" r. ]  c% G
input axr0,
9 w8 x6 W& O( ?. |* t+ g% f4 q; S- f! M+ \& t
output mcasp_afsr,
+ b/ [5 c/ f8 ^% goutput mcasp_ahclkr,
6 A# M/ |; u( ~output mcasp_aclkr,
' x% Q- y3 }! voutput axr1,
0 o# V6 o0 n( j1 J* Q/ g( F1 w
assign mcasp_afsr = mcasp_afsx;. N4 T9 ^2 j. ~: L% ~2 g! y7 |
assign mcasp_aclkr = mcasp_aclkx;
+ J* V. w) y: K6 Gassign mcasp_ahclkr = mcasp_ahclkx;) t6 j5 H8 n$ v( T9 M" Z
assign axr1 = axr0;

' m1 M' M/ [- ?% _# G8 w$ F; \$ t/ ^4 v- d* i9 V; j7 `
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

0 f+ R, L2 D: k0 A& ~
static void McASPI2SConfigure(void)- h) Q0 V% ]1 P! F3 I" s- e3 q
{+ r0 t1 h2 p8 ~& J* V
McASPRxReset(SOC_MCASP_0_CTRL_REGS);; J% D+ n, F( {% s0 v+ }
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
4 z, O  J0 S; H9 d4 VMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
6 @! K! Z8 q: o5 B; eMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */5 L% T3 R! [# y, w1 I# Y% E9 U
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
: Y0 |# L) K% {/ B7 z# ^8 C$ zMCASP_RX_MODE_DMA);: C1 ^/ Q7 `; |/ T7 \5 y- k0 g1 I
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,1 ?( j" y3 _0 s9 O
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */. |& ]1 ]1 M# c& A; {; b# |
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
2 [6 s  e0 F7 Q2 r1 IMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);8 \/ _3 a6 r% o7 e7 y, P1 |
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, - E7 \! \& a2 y& B2 e; ^: a+ R7 q
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */  e  O- r& D* |9 }5 Y+ G
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
: d- N$ C$ w4 o0 s, i% w  H+ jMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); . |: _* u- ]+ I  J! }. f1 G# V
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,7 k5 C; l7 @5 g8 G8 f
0x00, 0xFF);
/* configure the clock for transmitter */
7 d0 H  C- T- ?2 e) mMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);1 q% E  d5 j0 [0 X* F$ f' u
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); + |7 L+ W/ P" c
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,. f0 M- f( M+ N% V- O5 V) Q
0x00, 0xFF);( `! g% m0 ?" k1 f2 Y7 {
6 X& ~& V: z: C' i: Y1 [
/* Enable synchronization of RX and TX sections */
9 k8 O6 d$ j. X9 U8 E/ B$ zMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
5 B. A' ]7 L% Y- q0 \* A, F8 @9 GMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
0 e9 T% \; j) c# R9 ~4 ^8 vMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
* w% R6 W: w/ p+ g3 u** Set the serializers, Currently only one serializer is set as7 `! k* P; v* Z- c
** transmitter and one serializer as receiver.
! d+ u5 P, G9 ^' _' j*/7 E3 E2 e7 p7 J0 \% |
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);( \2 K: w3 T  Q' L3 A
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
9 o0 X, j# e* @3 B  f: [** Configure the McASP pins
8 v# [; z# A4 P** Input - Frame Sync, Clock and Serializer Rx
) Q2 [, U; k8 g3 c) @& r** Output - Serializer Tx is connected to the input of the codec * d' @8 T2 G# T8 f- f6 {# j
*/
( a& g# C9 [  K- V& D7 d: `McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);$ V( ^0 Y! [! S! j& r, T0 o7 j  q8 m
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
9 g! d# o; m9 Q+ ]+ G) ]McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX5 Q3 C1 b: x% j/ W/ m7 E
| MCASP_PIN_ACLKX/ R# Z! g% u% W9 c0 P
| MCASP_PIN_AHCLKX
2 ]- a0 H  E4 Y: a, p; L8 h! N3 K| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */" a7 N6 _( l$ W; C/ i; X5 R
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
' J, {1 b& @: r) ~0 _| MCASP_TX_CLKFAIL
- @6 e& A2 \& [' {3 R2 v4 f| MCASP_TX_SYNCERROR
0 m, z6 B: o9 G| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR + ]1 ~  H! J" e. e: t/ ^* |2 ?. G# G/ a
| MCASP_RX_CLKFAIL
) j2 ^: m) `! G! `$ Z| MCASP_RX_SYNCERROR
( y9 r$ Y/ Y5 o, X| MCASP_RX_OVERRUN);, M0 F" h/ M$ F/ {/ m
}
static void I2SDataTxRxActivate(void); S- z3 f1 }4 m) O$ @$ Z/ Y- o
{" F, ^7 w* C% ^7 m
/* Start the clocks */- X: x4 Y5 N8 J$ ]/ @/ |" d* E# h! k
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
0 e; g  M( j/ b* WMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */) c2 P1 v% g6 ^9 I$ G. A9 k
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
( m/ \5 s& X5 ]* ?2 V+ K# x# i( p' wEDMA3_TRIG_MODE_EVENT);
9 j0 q) q1 E& x+ e. M6 dEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 0 E2 m, {1 z1 X# X. D
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
* ?' h8 c/ z% ]6 E8 X5 ZMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
$ ]& D8 a. Q# \% b; a" [' ZMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */8 I) {) F1 A( A8 @7 o) s4 }# M
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
9 |1 S" s. U* P, `+ K2 \. VMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);) }& M  [7 `' K
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
2 O, A- z7 `/ ]! q  F}

) i  A. n& R* L
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
2 C5 A0 T' b; R3 Y





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