嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,) B5 O# J$ W' w: e
input mcasp_ahclkx,: m9 B. P( @! ^& {2 h* a5 j
input mcasp_aclkx,3 @, F, P2 k/ z( ]* t; N2 L
input axr0,  b- U0 v' `: w2 L

5 ^4 i" N1 N8 |output mcasp_afsr,7 ]( f# `. f, C
output mcasp_ahclkr,
' F, D$ m4 _( O4 G( G" b7 B" w3 joutput mcasp_aclkr,' E9 Q/ t: N% R  O4 h" m  x5 {) S
output axr1,3 I* ?1 P8 W% n5 A. d
assign mcasp_afsr = mcasp_afsx;
8 a% Z/ l2 C4 M8 d' vassign mcasp_aclkr = mcasp_aclkx;4 y6 E% ]4 `8 ^3 _
assign mcasp_ahclkr = mcasp_ahclkx;
" b& x8 I1 D" gassign axr1 = axr0;

3 P/ O2 f- p9 I7 K6 L1 T- N
+ w" V4 c4 ^5 }" H
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
& ]: B% `- c* Y
static void McASPI2SConfigure(void)
( v9 Y; d6 a4 u. J* n& ~9 B{
3 m2 Q# v1 }3 u7 s" m( `3 _/ FMcASPRxReset(SOC_MCASP_0_CTRL_REGS);/ X# b* _# n4 q9 c% e+ ^
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
  M4 l( ~- Y* ^, j$ B$ ]7 AMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);) u# y4 O* o  H( I) I0 f7 k
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */0 [+ p2 j6 G1 D) g
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
9 j- i: ]7 {% O6 A. D( IMCASP_RX_MODE_DMA);) S: }3 L% t! `: R5 J
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,. \+ a3 o+ I  j/ z% u/ |
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
. I1 _9 B9 y5 R. @McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
' h7 m" C! w) D! {9 ~1 L, oMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);* U0 Z4 j- g  T) ^9 {. O, W( \
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
2 L/ `* x& v4 ^2 vMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */3 D: H7 {: T0 Y4 Q  c/ V, B0 t6 e
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);9 o' ~' b% ]5 A. j7 Q* \# \
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
7 M4 @+ u2 D9 e0 \  tMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,' W- H7 U. Z7 Q% v( ?: w
0x00, 0xFF);
/* configure the clock for transmitter */: z0 b! ~+ X' C
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
, N4 R( W  {  g+ _2 ~McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ! T* E% a9 i. O* \7 p$ `- S6 [0 S
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,0 a  `& g/ U% r$ ~1 T- D1 s; E
0x00, 0xFF);% F# V  O9 {5 R4 I) p
$ n' Z$ o" Y$ s/ x$ y9 v
/* Enable synchronization of RX and TX sections */
" _% ^+ O! J4 S" e% A" _* j1 F& W4 pMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
7 ]* f+ P* S2 F) r% j* qMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
- Z, C+ T4 Q0 h7 C8 nMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
# E% p; Y# r1 \$ m  r0 U. D** Set the serializers, Currently only one serializer is set as
; X; C" I0 w, W+ B. e( h** transmitter and one serializer as receiver.. L) j$ ?& D# S- T. H# J& h
*/- {7 h4 X, G) U, P
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);# X4 \( D& x) d9 J, s9 u$ ]8 Z
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
7 C: k1 a9 c1 q4 n7 Z/ H** Configure the McASP pins . g- s$ j! G1 M6 [2 o
** Input - Frame Sync, Clock and Serializer Rx
% \" A2 _: K" F3 |: {) n** Output - Serializer Tx is connected to the input of the codec ; c% h* ~; ]& r4 _
*/3 r% o- h' t) ~! U$ Y
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
3 j# s& W0 S9 G4 g0 tMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
2 Z; A( h5 X+ Y0 @8 wMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX6 D9 S0 i3 g4 F; L( Z( l
| MCASP_PIN_ACLKX
, P6 \' }, v( Y3 q| MCASP_PIN_AHCLKX4 v. m# k7 G* d; H. ?) y
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
. v4 _6 Q! P1 zMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR + M. U3 Z3 _9 d% w$ ^' \# `# X" i
| MCASP_TX_CLKFAIL 8 c6 ]/ _9 Y; f
| MCASP_TX_SYNCERROR
7 ?: x) V( A, @/ g| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
7 F5 e1 ~1 v  M  |- D5 P+ V| MCASP_RX_CLKFAIL7 i. S4 s. z. i: k" C
| MCASP_RX_SYNCERROR
6 l, ]! X0 x+ r# o, Y* }9 O| MCASP_RX_OVERRUN);
0 o6 h& }0 O5 _1 |5 I}
static void I2SDataTxRxActivate(void)- ~, s% |% }9 K7 o. j6 H- D4 M
{
4 J8 g, h4 P/ x* A/ h/* Start the clocks */: x  @; Z: \, D+ L$ l! ?2 w  h
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
2 ^+ Y  C& h6 q+ cMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
0 a/ z. |: n9 S3 nEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
$ W1 f4 ~0 u6 Q1 k3 ~. [$ CEDMA3_TRIG_MODE_EVENT);% v4 T% E& I1 [* f  j3 M7 W5 S
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
& ?; M' X3 Q7 t  x$ j. e  vEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
- u  b) j0 Z. O' M/ T( ?/ W# rMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
. |( ~1 d9 M1 J8 SMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
7 w2 h; H, ]! o$ i0 }while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
% d  ?* n8 P5 X  c. _# F+ ~McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
  T/ t: G: E# b$ N# t9 C" {# k: NMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);6 r, k$ W' d% p: y& ~  W- U  ?
}

9 A! V8 B/ C; k) c
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

# F7 n( W- ^/ Z3 C




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