嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
. @0 W: [, J6 }3 i0 y$ Z* o* h/ N3 Winput mcasp_ahclkx,$ h- q5 ?) t/ g
input mcasp_aclkx,
- M2 ~" x. L* N& `. r6 c0 R5 Oinput axr0,8 G' i. T' ]) E' }6 p
, Z: f! ], ]/ U- D* V
output mcasp_afsr,0 e" G" C$ {" ]" I. m6 }# }
output mcasp_ahclkr,# u( G8 a& Q; ?+ l4 J
output mcasp_aclkr,
7 r4 R* j/ D3 S8 s9 doutput axr1,( E1 X2 A# G' M  i" X7 d
assign mcasp_afsr = mcasp_afsx;' Y1 V7 T* j: j8 |0 h- i5 M, o# v: O
assign mcasp_aclkr = mcasp_aclkx;
) }( i4 E% t6 I* P& ^; Bassign mcasp_ahclkr = mcasp_ahclkx;
+ U6 z* L9 F: iassign axr1 = axr0;

6 Y6 x8 |0 w5 y% b4 e$ P
: G6 N$ e  v* p
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

3 h& r$ @* w- u+ z" i
static void McASPI2SConfigure(void)
9 k0 w( |3 r) [7 \+ E0 D{
+ @% C1 D! L% cMcASPRxReset(SOC_MCASP_0_CTRL_REGS);2 G; c/ [  J& ~0 m8 ~
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */1 B8 @$ `# O5 \' M$ Z& f2 A2 v* v
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);* T0 t1 R; Z) v  n) k$ T5 e6 ~
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
5 g1 ?" J8 \1 i1 b/ bMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
" d7 B7 b1 |; _' W- m2 d$ T4 w0 |# vMCASP_RX_MODE_DMA);. T5 g4 ~: n3 E7 Z2 H
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,0 b6 U6 n# U0 s2 a5 p6 o; d
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
* `* k9 K6 v% uMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 1 E; B7 X) Y! f  t0 |! U
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);* k, N5 X/ f* }. Y! l; o* Q
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
4 f! n  d: Q5 `5 }7 Y* A+ O3 L9 oMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
7 W" y( P: {" Q7 aMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
1 Y7 Y* L) b7 w; _/ x4 c: i" RMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
4 C$ O$ v9 A1 J5 b6 V+ D- A5 SMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
# b: A3 n% |; z0 v1 l9 T0x00, 0xFF);
/* configure the clock for transmitter */
, S* p( x* Y; l, B9 M, wMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);, J* Z" u9 F8 J, i$ D
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
8 m; V: Y# d, M9 a( {McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
7 t& ?/ D8 I( |! P4 g' M/ K0x00, 0xFF);
* t+ D) ^8 W0 E; b$ b$ k+ V) m9 w9 s4 w5 O5 R
/* Enable synchronization of RX and TX sections */ 1 e% D  O* s# k! S
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
4 V" S, \; Q! m0 AMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);! ^9 k" j- e0 n: K5 U* ?! n
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*& q7 y, v- n( y9 q" z# W
** Set the serializers, Currently only one serializer is set as
& p# L  l+ f/ @( _; k** transmitter and one serializer as receiver.
: U5 p. f; Y( `9 S" o8 J2 U( p" P*// n  d7 _/ t4 l) ?0 A$ [3 t) r. i
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
2 J# o$ c2 A0 Y1 hMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*% B. Q! `% n( K% q, s' M% ?; f
** Configure the McASP pins
! D) ?+ T/ q$ ?# U** Input - Frame Sync, Clock and Serializer Rx9 A" v$ s7 E7 S: }7 T
** Output - Serializer Tx is connected to the input of the codec
, V: i" \8 z. ^2 z( j/ v7 k*/# i! y5 H; o# X8 Y1 e" c: n
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);* }+ v3 D# ?3 b: ?$ z9 X. }
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
5 g" V% }& P! EMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
1 O. ~4 K: B( d; B6 A| MCASP_PIN_ACLKX
5 v5 k% a* D$ c0 m| MCASP_PIN_AHCLKX
4 Z" ?1 ?( S6 p7 k| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */6 v: q( k4 I( u6 G
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
# D$ q' N+ w8 K6 A| MCASP_TX_CLKFAIL 3 ]/ d  F' T& q
| MCASP_TX_SYNCERROR
; n6 Y) r3 y8 }, y2 {| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
, [- l, a- d+ J) H| MCASP_RX_CLKFAIL* q. {" A2 I$ s) K' @) h# [
| MCASP_RX_SYNCERROR 8 Q6 ~. U7 s) G3 J& x5 U( s6 J
| MCASP_RX_OVERRUN);
* ~& w& p5 I1 O* n' W3 ~0 t- C  D}
static void I2SDataTxRxActivate(void)$ x6 X- }% c$ P- A
{
1 ?( S$ N% Z8 B' `  z/* Start the clocks */
; v2 }+ k. X2 ]9 a- y' K5 mMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
% J" a0 }3 q# \. k  xMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
- d4 J; ?; Y7 j& F( AEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
. }* Q* s  a" ?) G9 d7 I! I. q; ?EDMA3_TRIG_MODE_EVENT);
/ \4 |# c+ Y3 uEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 7 z0 W! l. n6 [" {" z! W
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */# M6 c- ^% \5 y( V. v, G3 `/ O# K
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
- }' D; s$ I/ |8 r+ o& EMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
. \: F% H5 W# r% dwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */4 o1 l1 v, b( y6 T; H: o) M. z
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
& {7 ^5 M, O1 e) T" d) H8 u4 F8 g. GMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);+ l3 ?/ ]9 O. z0 n0 Z7 g6 g& r
}
3 [; V4 q, k5 e
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
1 S6 T# b& V6 Y( B3 B





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