嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,' B6 r) _  l# I, Q& ^: z7 C$ ^
input mcasp_ahclkx,, \4 q# A: \' E0 Q
input mcasp_aclkx,
7 x7 _/ {  `* w, @# Vinput axr0,+ X+ c9 U* P/ y9 _
* v0 _4 P3 c% j$ D+ a4 u
output mcasp_afsr,
3 L' u' ^6 r. \* m9 Z# ~output mcasp_ahclkr,& y$ X% `, _5 g9 Z
output mcasp_aclkr,
- F2 L0 W8 u' X& L8 n3 r6 X3 I1 aoutput axr1,
3 C5 n; y9 |' I
assign mcasp_afsr = mcasp_afsx;
  z! V3 t8 I3 x9 z$ Kassign mcasp_aclkr = mcasp_aclkx;, a  o2 l8 ?. ~3 [% m
assign mcasp_ahclkr = mcasp_ahclkx;& d3 j" ~; d. a
assign axr1 = axr0;

+ V" f0 G0 p( a+ R8 {$ s, k
+ e1 V1 P2 W8 T- z) I( t+ y9 E
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
, ~% B6 c( |& l6 B  ^0 G4 l& a
static void McASPI2SConfigure(void)/ ?/ o" J, P1 F$ b4 K% m  m
{2 B7 A5 s3 K1 j  H
McASPRxReset(SOC_MCASP_0_CTRL_REGS);. z% |4 `  |/ {/ _2 Q$ I6 ?6 r- G
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
( O; x: [6 Z! \6 I) e" K3 VMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
8 ]0 P9 ~7 i+ j5 ?' \( L* x1 s  g( CMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */3 S% V* g; }4 l; y# `3 y- V
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
; z& `/ K6 H7 }9 iMCASP_RX_MODE_DMA);
% `9 m$ v$ J+ a3 h: h3 C5 b) uMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,$ c8 M6 z* n) E2 H  `! \; Q/ T( [. X4 P
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
7 e! V: c; L( M8 g% g" HMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
9 q7 S& F! b) d1 _( T* _3 JMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);0 @( p* R5 ^2 A+ t+ V: ?/ b# j
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ) i% M2 r# n% }  Y2 W
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
$ E' L( ^+ m$ ~& a  R* eMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);( p; M! O$ ^- {9 W' i
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); . n% E" z. g, l( e" a
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,! \" A9 s  D( s9 `1 X
0x00, 0xFF);
/* configure the clock for transmitter */- K0 A6 s, p8 l' \+ l! m/ ^$ P
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);/ x8 w0 a* B: d2 ~4 n( u5 `& X
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
7 X* x) H- P" L8 sMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
' h" p' d- C% Y  B, e. e0x00, 0xFF);
. L5 r! W( u+ u* W  J- g
5 s$ T6 w2 @$ k* T) Q) S/* Enable synchronization of RX and TX sections */
% ~7 X& O6 s$ Q3 I# K7 i  E! \McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */& R3 f3 H) W  e  g  s
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
' u8 u: ^1 x! W8 c2 ?, U3 SMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
9 \' _  X0 x7 W# q: T7 d9 D, ~** Set the serializers, Currently only one serializer is set as
- `: D6 L3 l7 h. |$ m" h) \. E** transmitter and one serializer as receiver.
) T% {5 K- [. n; r*/
5 D3 X$ i8 R* f2 K) o% n. F$ b8 Q3 UMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);/ p+ o, f3 X/ c5 F8 {9 S" x- a
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
- J& d  s2 l2 Y) v3 b8 n5 f( c** Configure the McASP pins 2 t: r: C+ R2 w/ I$ {
** Input - Frame Sync, Clock and Serializer Rx- q/ F' I1 f: a! S, l  X3 h0 [
** Output - Serializer Tx is connected to the input of the codec
2 ^! H  F' y9 S( F  d*/
$ {. c9 B$ K+ H2 x1 n8 xMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
, \; k: H3 e# U: {0 G0 p6 MMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));) b- H. s7 Y. ~$ f2 b9 z: K
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
  f* F+ L. x9 A| MCASP_PIN_ACLKX
5 E7 Y: W0 b4 e/ l5 }| MCASP_PIN_AHCLKX
! J: e: w' H# \1 o| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
$ t5 E; @& w- n7 _4 jMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR % k+ S) T+ |9 D) k+ ^; s
| MCASP_TX_CLKFAIL
' S7 F! o2 w: c: C| MCASP_TX_SYNCERROR+ b6 M; t/ q5 o: `5 j2 ^: ^3 u
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR - m' C  T0 k: n  R- E- ]
| MCASP_RX_CLKFAIL
  x# b3 J: h/ l| MCASP_RX_SYNCERROR
1 @+ O+ a5 l' C: P+ o| MCASP_RX_OVERRUN);9 [1 ~2 Q2 y6 v2 b5 V
}
static void I2SDataTxRxActivate(void)- }1 q% Y+ k) z7 U; U, ]( H
{2 S) r7 f) X% ^
/* Start the clocks */7 j6 e, _+ }! w: e. I
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
' o: l9 C  j( K1 M8 S8 FMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
. f7 e& z. A4 S' N3 M; FEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
; O4 R0 S2 U' W0 ]EDMA3_TRIG_MODE_EVENT);
* z4 L7 K/ L; E  \; k: nEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 2 A$ [2 A) A, n0 k" T- z
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */5 J& H. C$ H9 u/ u7 r+ X, a; B5 B% N
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
' R6 x8 n4 b0 J$ t& `0 W, qMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
9 }! U! z8 ~# U3 d. s' c: a! O' awhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
9 D5 j, n, A( ^5 KMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
5 b; V$ N5 g; t2 P) P' [McASPTxEnable(SOC_MCASP_0_CTRL_REGS);" n. C3 q. Q# {& I5 x* v# c0 R
}

0 I( w; [* J3 z
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
9 p% t/ ^% _- o' [. ?4 T& @7 I





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