嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
! \: ^. ], ~8 p" _8 Uinput mcasp_ahclkx,
% \5 G8 S8 I$ f8 Y4 D+ }0 M. linput mcasp_aclkx,+ ?- l1 L( p% H: s+ `, [, R$ h
input axr0,0 V5 T3 \( Z0 @" o+ H# i3 M/ J! E
" k/ X4 n; f0 ]0 m( D* k, S
output mcasp_afsr,* Z2 _' [5 R( n
output mcasp_ahclkr,+ v. {$ p# d! c: c5 p9 L7 d
output mcasp_aclkr,
1 D. r. N% r$ I6 Soutput axr1,
1 P* w# V- O8 B. H
assign mcasp_afsr = mcasp_afsx;
( {/ C" C% C2 R" c1 }3 `7 v' ~assign mcasp_aclkr = mcasp_aclkx;
/ g9 o. z4 v. |. qassign mcasp_ahclkr = mcasp_ahclkx;' O3 Z, _4 ]! |6 V1 l
assign axr1 = axr0;
$ T# @* N/ Y  I$ z$ d. V
( P. b( _# f4 I$ i. p: G6 f8 l
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
5 p' s7 h2 C0 Q  r' G
static void McASPI2SConfigure(void)
5 |5 s# X( s& g& B1 j6 h8 ?{
2 v, r/ a1 c) @/ G% {' rMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
: \2 i" }* v5 Z% ~4 e% O* zMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */" ?* H% a" _5 L, k
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);, h7 }# [' d5 o: ?3 ]' T2 \  S, _
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */* v( t- q9 y$ z% T6 |* L$ I3 W5 ]3 b
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
7 m8 w% H. O: A, u+ ^9 bMCASP_RX_MODE_DMA);
1 F) a6 T; N9 n9 e4 F5 X5 ^McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
! r% |; Z6 V1 Q6 wMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */: w% \8 x9 }8 `' y6 [
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 2 ^6 M+ V2 `: r; B
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);) x3 Z* P7 A! Z, y6 Q- u, Z
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 0 V  L: J* @9 {' Z9 ]. O
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */. `: Z* n1 p! u
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
9 Q% J$ ^  n) [) K* C9 j( [McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); : n. p3 s& B7 E9 u6 s, c
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
' l9 [6 m& M5 n. }: e+ d0x00, 0xFF);
/* configure the clock for transmitter */- j4 ?3 w2 R& D+ T
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);5 t5 Z5 B4 M/ T( }. V1 h: m
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ( n3 U5 }% C$ \* F2 L. }
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,8 v# k0 u- Z4 ^, g$ L9 Y
0x00, 0xFF);
% Z% C% ?4 r6 i( S$ g6 u- X" t1 T2 B0 c' t+ ^7 `
/* Enable synchronization of RX and TX sections */ 9 c9 N9 f8 F1 `1 O' [7 i
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
. F  T2 B* o4 kMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
7 }) b9 r; G% P: ~. AMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
3 A1 Y+ u) K0 W( X& L- h** Set the serializers, Currently only one serializer is set as
7 [% c- c5 R0 P3 H% s, E* ?** transmitter and one serializer as receiver.
+ Q( U2 B% y0 I: e; T*/8 \* ]! e1 R6 J' A
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
7 j& d: S7 f7 Z- ]/ yMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
! d4 s9 P$ B; Y1 ~3 C" V** Configure the McASP pins
/ _, M& _& `; G; N/ f# Q1 c** Input - Frame Sync, Clock and Serializer Rx3 z* y* T; J2 u/ p
** Output - Serializer Tx is connected to the input of the codec
1 j3 q1 N6 k6 r*/
2 z5 M3 l2 b7 BMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);3 R. c# a% l9 k) b2 a; {7 i, B
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));5 d, L1 ~& X+ D5 W
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX. @& H% O$ o. R) \9 V) q6 [* L
| MCASP_PIN_ACLKX
: i# ]3 i4 F1 `$ [, P- y| MCASP_PIN_AHCLKX
2 S& Q3 [- c% _& P* d' _1 ]| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
( D- T! S' i% ?+ I% Q% }: w& fMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
; ~; ?$ U  T. F| MCASP_TX_CLKFAIL
, K; `+ T7 Y; ]0 t7 f, w$ V  D| MCASP_TX_SYNCERROR
% ]( l5 ~, ~% L+ J! C) {) K| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR : G8 n2 M( J/ s+ X
| MCASP_RX_CLKFAIL. p2 J& j* |" m* k
| MCASP_RX_SYNCERROR 6 Y/ A( ~* {4 t' f1 N0 o- M. G
| MCASP_RX_OVERRUN);) J  S2 ~' y3 j: v5 E2 R4 T
}
static void I2SDataTxRxActivate(void)' y( t: A3 }0 x6 Y
{" x4 Y, _5 u# z. `) `4 T
/* Start the clocks */) c: f; V8 m* }. s: E
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
" F7 ^) C6 i! ~9 Z8 e3 SMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */7 g1 J4 ^: X, ]8 l& @- U6 ?
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,( @* }3 O6 F7 p% R$ U# _  i% l
EDMA3_TRIG_MODE_EVENT);4 t. J3 k* |( V! J0 k( h
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 7 g( [7 i* u' T* a# Z  ~4 }" M/ ~
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */' U" |! C' U. o8 n7 a/ [+ P
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);" `/ p2 ~  s. u6 G' o
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */8 d- r; w8 J+ D6 A8 Y
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */" R8 N5 _0 F6 M
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);" ~% E: B+ @7 B% s
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
+ J) ~% U& e& l. K( w}
3 P3 _1 g' ^2 ^) S; i
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

9 Q4 Z8 C% b- \! W+ `  B6 p




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