嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,6 R+ Y3 M7 O: a1 s6 u1 S/ z
input mcasp_ahclkx,
. G1 O3 [! d! c& p# O1 L0 S: Winput mcasp_aclkx,
8 I8 l! X8 C5 t5 Kinput axr0,; P! E$ _4 k& Q9 B8 F: o

0 u7 O% o* N' m( y5 }7 koutput mcasp_afsr,  e' O: W* H  v
output mcasp_ahclkr,
0 J: D- W( S/ O0 P" uoutput mcasp_aclkr,
) o" Y, l' E4 ?" e; A8 }output axr1,
& _4 h9 k+ Z# ]. k/ j& d# ~4 y
assign mcasp_afsr = mcasp_afsx;& i6 t5 t2 M3 t3 f4 Z
assign mcasp_aclkr = mcasp_aclkx;
0 a' r2 U* J6 ^( ]# xassign mcasp_ahclkr = mcasp_ahclkx;4 e* e! n) q6 h; S1 c% U
assign axr1 = axr0;
  v7 r* {( J& v, }* ^# ]
2 s* A2 j; g& i" E* {
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
7 L; A% p; _7 i* h) K$ y7 x/ l
static void McASPI2SConfigure(void)1 k; |; G6 |' o8 G0 r% _" g" ~3 ?
{5 I, P. T! B: b5 E1 e9 V" Z' r
McASPRxReset(SOC_MCASP_0_CTRL_REGS);: z& ?. I! W- u' U1 Y- f
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */9 j* M* x4 m8 \: U, Y3 h& U
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);, y* V- j8 L, _; e) t. @" Z7 ]# t
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
! _% k0 \, G* lMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
+ x- Q' F* R1 J) R, g- t' AMCASP_RX_MODE_DMA);
. ]+ k, z9 v' O# N: y$ GMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
) r2 ^. T0 F- O5 p2 qMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
* i# `8 M, A5 p. ]/ }$ A5 Q: ZMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
9 t& J2 ?4 J, v/ K/ D* AMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);  D8 \. l9 z! Z! I
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
, I8 A( b; M# X1 K5 G% n7 a# wMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */9 E! y* P$ Y( _4 V6 o# t
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);' H0 @3 _, i6 D3 @; q- U1 {
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); # `  H' X7 Y% \' p/ {
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,! A' a- q' u, S) F4 H
0x00, 0xFF);
/* configure the clock for transmitter */
1 t9 y9 r6 a! C- j7 a! `McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
8 K$ Y  u, `  a9 F5 GMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ( g& _1 S7 t! M% ~- Z
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,, b5 t3 {* N* q/ r
0x00, 0xFF);
& t% r* t- N4 A2 k* V9 e$ Y1 z* N8 ?& R+ ~8 z6 L& }  B; @+ C* c. r
/* Enable synchronization of RX and TX sections */
- U0 W" Q2 R* W& w& O. ZMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */: C9 a* U  c$ ^5 j! C  ?
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
' E, W$ q3 {, c0 f' t- O. Q4 {McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*5 e- n) \9 L$ d5 w: c9 u! q, ?- G
** Set the serializers, Currently only one serializer is set as
% S4 ?7 v7 x" o** transmitter and one serializer as receiver.1 f/ L, b* Y4 H( D4 T, r$ b
*/4 G5 A$ W) D3 b. t
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);# t: T; ]. g' `, `$ O% T, f" W
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
6 P4 e8 v$ D+ v0 {" s3 v  T** Configure the McASP pins % c5 D( v, D3 p+ l" V% B7 k0 Y
** Input - Frame Sync, Clock and Serializer Rx. Q) w% d1 n; R& E8 w
** Output - Serializer Tx is connected to the input of the codec + \" g& j, e  _6 O( o/ ~3 C
*/
3 I) \; Z% F  X/ A( tMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
  w6 @# ?  B1 T0 ?McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));, \5 m1 X& L2 d2 c1 U. C. g; y7 h
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX! e3 C2 I, Q6 x7 k% ~; `7 B
| MCASP_PIN_ACLKX
) a( y# [; z: i$ x" z4 z| MCASP_PIN_AHCLKX
! q9 N9 y5 i  B# P| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
2 ]0 S7 Y6 g+ i( f% ~2 w4 ^McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR / m4 r1 `# s5 T0 a! y/ U0 b
| MCASP_TX_CLKFAIL
8 `+ `- e7 X3 K) s$ _  E0 C| MCASP_TX_SYNCERROR: {; K7 ^) p( C' K. A
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR & p8 M* T; Z( V( l$ Q1 q: ~5 l* q
| MCASP_RX_CLKFAIL
$ |: }7 j8 v1 _, A/ x| MCASP_RX_SYNCERROR
  z, r# r; p: U| MCASP_RX_OVERRUN);. B+ H2 J' u) \
}
static void I2SDataTxRxActivate(void)
8 I% y+ u  L# U3 q5 c{8 K; }) B" w4 e8 e: }. ]
/* Start the clocks */& ?1 Q  E, i* x- }/ I$ x7 ^
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);2 z* _+ o8 M5 @7 B+ |! \( N
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */& t; u+ ]3 A  E  B0 I% a5 e
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
( O/ \, }. i& e4 uEDMA3_TRIG_MODE_EVENT);0 ?1 O/ Q! W6 K1 {" f, }& C
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
( l8 q+ f# Z7 U' S1 k" qEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */3 y) F, X- w) S+ a- d% R; \
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
$ C4 w8 L1 _  t# ]McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */' Q, |" R4 C% d4 o
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
* [* ^, `7 L! s5 E& j: {) }McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
; I$ H5 _: f* R3 d# }& u! Y% cMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
2 |& J1 h; m- r0 M% Y) W* Z7 k* D}
% B( l+ C: I4 f2 n
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

# E5 e+ y' K  D' }2 F5 X




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