嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
# S% m* q8 N2 ~input mcasp_ahclkx,
- H' D; L4 z, L8 Linput mcasp_aclkx,: I+ t# E9 L/ u, f; n( |, ?9 c5 D% E. v
input axr0,
% M* M7 h* c. S; @- k
% I( {0 O. b( x# j/ p& X3 boutput mcasp_afsr,
, J. d: |- g4 n2 T% ]" koutput mcasp_ahclkr,4 L7 z+ \, g$ Q+ l
output mcasp_aclkr,4 c, x$ `) [) q
output axr1,
6 d7 {' h* C; E/ _# `
assign mcasp_afsr = mcasp_afsx;( V% a7 n3 Z" [# N `. \: G- O
assign mcasp_aclkr = mcasp_aclkx;
1 d& Y! Q) s( v5 `: Aassign mcasp_ahclkr = mcasp_ahclkx;
9 z" q1 X, u/ f# j- ^assign axr1 = axr0;
6 U- d0 h, @6 J- w; e; ?' \. a$ E" M
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
" M8 o( _7 n9 t( I* _$ Tstatic void McASPI2SConfigure(void)* ]# h4 i$ T' U) l# R4 V0 ?6 Y; j1 H
{5 ^8 T/ j: ^1 ?" M" a2 l9 C1 I
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
y( `. F# j/ C! |9 M3 @McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
$ s/ I$ D/ p* p8 @, k: U) r1 VMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);$ H- I* m( l3 S+ W. x* j; ?* z) a
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */! w. Y0 g/ E# r
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
4 v/ Y$ a; [: X0 j) BMCASP_RX_MODE_DMA);! Y) r6 J9 u8 X7 x& m5 L- U
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,5 e" B; x" i1 ^+ U1 L/ N
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
7 e8 C3 s6 G# j" O7 ?5 ZMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
+ K) ~2 H3 a. I( p4 @. n, f0 FMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);1 E' @2 H+ I3 S* ~% ?: S
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, $ ^4 j! `; i' u% H
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */) A& T: E5 K9 i% i2 U2 Y) f5 G3 \
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);( b8 D7 v% P+ k A: @
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); , ^7 }, Y" M. R; K8 l. L6 |5 m5 J
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
- L- m4 }+ o4 B9 y1 u; A/ v, r0x00, 0xFF);
/* configure the clock for transmitter */
( U$ l" R' Q* O9 c! x% ~9 d9 gMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
, k0 }' S1 E: H6 ^" {6 E3 \& r, iMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
; |1 o6 V$ w) @ b4 v3 F$ f9 VMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
) c/ h: k5 O+ K+ ~" }0x00, 0xFF);9 u5 s- A0 C5 V5 Q, m
8 N$ X% B U7 A& W! f4 h* g: D
/* Enable synchronization of RX and TX sections */
5 W5 F/ P9 c7 T8 j, a0 L3 u; JMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
% I9 q! l) D# L! @/ c, L: gMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
9 a# J6 ~* @8 f; l8 nMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*6 V7 p$ d( `7 o. f5 q* u7 w7 `
** Set the serializers, Currently only one serializer is set as# E; T2 x- r' c5 |! z$ `- x
** transmitter and one serializer as receiver.
: ~% w1 j# |+ \7 H' }+ H* p, a*/
2 Y# t0 M! ]8 B! tMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);2 |: R$ l: ?1 m! K3 i; V
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*7 X% s6 @# w6 Z" a3 _0 \
** Configure the McASP pins " ~5 l' y8 ?, L5 v `) m2 v
** Input - Frame Sync, Clock and Serializer Rx S4 @; E) q5 R% {0 M2 G- j5 t
** Output - Serializer Tx is connected to the input of the codec
: |" A i& k# p3 L: b3 a) }*/
- E k; I6 ]" ?2 s1 cMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
/ B, W7 o& ^5 C; FMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
! N, }' F6 ]- u4 ^3 ^- i& \3 ^McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX% `$ r7 u* o( P+ K6 T
| MCASP_PIN_ACLKX1 d& D0 @! e% d9 u* t/ U% I, h" w# B
| MCASP_PIN_AHCLKX# u8 Y2 s# o( M) R: ?
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
8 P9 P1 v$ y) C8 lMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR - r9 V5 K5 Y% `: k
| MCASP_TX_CLKFAIL ; R8 f, ?9 h7 A. o& f# w
| MCASP_TX_SYNCERROR+ c( ~& R7 w% o' }! f9 A( w6 ?
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
/ O% T$ K1 j. p1 e, U/ || MCASP_RX_CLKFAIL- j9 ?2 e6 Q2 B4 }
| MCASP_RX_SYNCERROR
- O& E6 s; O6 O5 |4 R0 `3 s| MCASP_RX_OVERRUN);3 v4 }0 G f# J9 D6 g: g8 N1 r
}
static void I2SDataTxRxActivate(void)5 ]. H1 j6 i' s& e
{
/ G' B7 U% P8 m- K( l5 G, w0 h/* Start the clocks */
( @3 O: K. ?9 W8 eMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
e F# r2 \4 J% s: U ~1 d- PMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */' ~6 C- b2 s1 u S* ^: |& n
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
; j- F, F) |& R1 S/ |% j) D% j$ iEDMA3_TRIG_MODE_EVENT);
* p3 h$ q5 V) o7 gEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, * Y5 t/ b5 u3 z5 z2 b
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
2 [% r5 p' P1 @, r! fMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
) F6 C8 w Y2 z$ Z- J( {1 J3 Q, Y1 tMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */. @* a$ w( S5 L9 }& H+ {0 p
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
3 r. K& Z- n' y3 IMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);) L. W0 c: b3 D
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
' k: m$ G# v* J8 i) |" p+ [9 h}
4 |2 {' x: e( P4 H' Y0 B
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
9 d& t3 w2 u% W! a, b4 V" W: C+ Z
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |