嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,3 P& e% n3 G$ X1 `' p: _2 w9 J
input mcasp_ahclkx,
2 j/ s: [$ O2 ginput mcasp_aclkx,% s7 T7 {+ W' m7 ^
input axr0,& G- W8 Q6 d9 ~

7 a8 a' d5 Z, h9 G' Goutput mcasp_afsr,
5 y' K% ^5 g/ A3 J& }/ g8 w6 p9 doutput mcasp_ahclkr,
5 r! q) _$ E; A8 H5 noutput mcasp_aclkr,! l; m' ?& f- Y( n2 \  }0 [3 P
output axr1,8 M" H6 T" q0 [; e- ^
assign mcasp_afsr = mcasp_afsx;
* s3 y- ]6 g, ]6 e8 Gassign mcasp_aclkr = mcasp_aclkx;0 l* G9 x4 w  \; q  N
assign mcasp_ahclkr = mcasp_ahclkx;7 v6 F% j" j) U4 u
assign axr1 = axr0;

/ c! s) e4 p0 R/ R$ E
( d8 i5 R, k6 T9 Y1 i6 l
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
+ R+ h5 J) V0 L/ Y8 s, U1 f
static void McASPI2SConfigure(void)2 }5 l9 V* A9 k7 z0 _4 k9 X
{
% D! E, O; i6 y0 C; i% mMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
* P; p% E8 e2 \6 L* T; E- [) h2 HMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
% {7 B: `9 ~* n. J! r/ ]McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
3 n6 T0 |6 P2 D* K; i0 P$ hMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
3 A0 D- _+ ^1 H. H/ E) dMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,. m- ]5 D5 C" K* \0 G$ V: O' U
MCASP_RX_MODE_DMA);
( ]* o7 K, j0 |, ^5 W5 E0 M2 PMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
0 d1 w2 U! r( l2 V, t" f' K6 s7 k' }MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
& {6 _( ]4 E, o8 k9 g, p3 W$ R! pMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
& b( n$ w3 L8 z* aMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
, K9 N0 b; m7 |+ m4 gMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 7 x) h+ n: g: L( D4 Y
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */' M5 i! }- M# i+ `
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);+ y+ A* D7 r9 z' ?0 i4 h
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
# M; s* ]% T# L7 L9 |- IMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,2 k0 @  P4 [& w* h0 B
0x00, 0xFF);
/* configure the clock for transmitter */- |1 p, z7 |. E$ _6 a( t* x! k
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
) ~8 T, }" l1 R- x+ o& QMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); & k% c' k4 Y  P* Q" w
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,* J( C% u% X9 B* W
0x00, 0xFF);. }9 e/ V5 Y- H7 Z. U
4 U8 e' t) r7 d$ h# G
/* Enable synchronization of RX and TX sections */ 0 o8 k& o  k! o. @
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */5 G) z" y' _5 c/ _& y
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
0 }+ X; I2 [) l& T5 BMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
: T& M' `8 p, j0 t( c! }** Set the serializers, Currently only one serializer is set as
" c. \- _. W: ]4 K** transmitter and one serializer as receiver.
. ^1 O4 K8 f, Q1 l*/
9 i5 V# J  o0 n& c) o) n8 o# HMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
1 n9 N* o0 _: h, GMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
! I' Q7 h/ f3 J% W& n9 H! n2 h* C** Configure the McASP pins
" V# [) s2 y0 @% ]5 V! ^** Input - Frame Sync, Clock and Serializer Rx
: G3 Y9 [3 x0 W9 T1 o5 e4 h2 \9 O5 C** Output - Serializer Tx is connected to the input of the codec & J5 x& Y( b0 q, f
*/
/ @' Q) n0 l' n) ^, A! cMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);, @/ |$ X! o5 W/ i6 \6 H" b% D" B
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
( i3 J( P$ i& y+ N; zMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX: R! m  \2 b- @% n- b& u  Q9 i  I
| MCASP_PIN_ACLKX
3 h* N6 o( T6 W; z- X/ K| MCASP_PIN_AHCLKX  o+ \! e" a( [, J, }
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */& e6 b8 O' S% E5 P) y" b
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR / R7 t& I: B4 y7 ~7 E( `
| MCASP_TX_CLKFAIL 4 j$ _1 r2 P! ?# S
| MCASP_TX_SYNCERROR
) ^$ a* W3 o4 I% r# t/ L' m1 ~& `| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR ) u; w5 q) X, q' U. Q. C
| MCASP_RX_CLKFAIL
8 L  {8 b( i' d' a6 o' B| MCASP_RX_SYNCERROR - Y! q* i! {% A! M) I0 _
| MCASP_RX_OVERRUN);
& ~) j' d, {0 O! ~}
static void I2SDataTxRxActivate(void)
5 S) S( m( b- y5 ]6 @. ?{. d7 A0 {  E# \
/* Start the clocks */3 `3 K8 ?: i9 Y* F! Z
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
+ K4 A( Z5 r, M. ?McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */! N2 C5 Q$ A' }+ g
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
% y5 c# r; @, U' m2 ?% cEDMA3_TRIG_MODE_EVENT);
0 ~0 Z9 h" {# U" t0 }EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, . v2 `+ _7 c9 X, ?7 l; P
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
4 m3 A9 E/ g3 }" BMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
$ E. S: x) K" yMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */4 q' H) B8 u3 a" y& h
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
% ^( ~) F% N' M0 F& Z8 e0 T# T" |# jMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);7 J+ ^: h4 o& j$ c8 ?; ]
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
1 R1 t( X2 r2 n}
9 S; S* L; v0 q1 |5 D
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
6 W: a' n& H! K: ?8 V2 B





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