嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
0 a- X! e1 c+ U0 d- P: |! f& Pinput mcasp_ahclkx,; @- K2 |. m. d, i3 t) ]. _
input mcasp_aclkx,
' _1 X; n% M4 }input axr0,! ~) [9 j, G* I2 b! F

6 _" ~' [% m9 Z- u# T5 }/ Coutput mcasp_afsr,
9 E9 g, i" t( P5 t8 loutput mcasp_ahclkr,4 N' X4 o( Z# }. \2 Q
output mcasp_aclkr,
' O0 ?5 K' q8 M/ o, `output axr1,# W' a9 P; n* \4 G# f+ Q5 U+ J7 Z
assign mcasp_afsr = mcasp_afsx;+ l- E% C! n# k+ ^1 Y( }1 ?5 M- D
assign mcasp_aclkr = mcasp_aclkx;5 U& y7 }* o6 N' {9 ~
assign mcasp_ahclkr = mcasp_ahclkx;8 l. O( Q7 X7 R7 W3 M
assign axr1 = axr0;
- c' h0 F9 Q' Y, W
3 F7 s# _( N: T8 Z1 ]; c6 e
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

2 {, x, c: n( R) _5 }3 ?) z3 t
static void McASPI2SConfigure(void)+ t+ u! d/ ^2 t" R# M3 ~
{1 |* b& E) w3 ~) F6 u2 ^5 x
McASPRxReset(SOC_MCASP_0_CTRL_REGS);* X3 ~! {. I$ L2 p# J1 P$ J
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
+ w, X' N  g6 I) `McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
" |; K" @; M+ {; n  tMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */7 m" `  P) F+ A2 J& E
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,: Y/ N; B/ ^, f
MCASP_RX_MODE_DMA);
6 G. V6 `, }8 E6 ?' f2 T( t, YMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
9 H& D, P' u  N( m; iMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
4 P- s' C% u4 X7 h2 F# s1 s; lMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, - B4 Y6 G9 W4 X) A
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);, L. n& v4 q1 H/ H
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, , y% O5 X5 x4 C! v* N
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
" f7 }! _2 @& A$ PMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
% p# {* L6 Y: Y% K2 jMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 7 W! Q" e9 E$ i' l" U
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
7 a6 i$ P8 d9 \4 d0x00, 0xFF);
/* configure the clock for transmitter *// s# G( `! ?( M! v4 V) L, a8 N2 O; H
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);0 h7 ?1 g! ~' q+ z
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 6 M* L/ X9 [5 \  x
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
8 }4 {" v2 \4 ^: |0x00, 0xFF);
- l4 J4 e) g, [6 ]# C, H4 i/ g; }' u# e# U# P
/* Enable synchronization of RX and TX sections */
5 a. R4 f' M- W* {( b6 ~7 W. nMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
, J& a+ ?  g4 ?McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
% D7 I& i3 H) O, d& |: ~) lMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*) {! c9 P3 m, f
** Set the serializers, Currently only one serializer is set as
# K5 L( O' W2 }** transmitter and one serializer as receiver.
! W9 e1 r. b* ]  E( v6 K1 E2 [*/! Z" w/ w7 ~) [
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);( b+ I, p0 v! C( }$ F* N' C* h
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
+ [6 a! y  c3 w6 J** Configure the McASP pins 1 B% U0 U  s9 A# b
** Input - Frame Sync, Clock and Serializer Rx  L% C9 t, z8 D# t* D. h
** Output - Serializer Tx is connected to the input of the codec 2 Z% `) o" k8 r; h
*/% t) L9 h6 ^' e9 j/ F
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);4 X' g! c9 U2 j. F
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
0 K+ N$ a' }$ L1 PMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
! b7 v, @! ]4 L* r. u| MCASP_PIN_ACLKX
2 \$ s& p5 H' t+ D: T% F| MCASP_PIN_AHCLKX& f  T! j$ W7 g7 w
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
7 v% w+ i+ @! R, K+ ?McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR % w+ L3 M9 u0 A  A
| MCASP_TX_CLKFAIL
" [: R: X* Q0 t! y$ _2 g| MCASP_TX_SYNCERROR
; U, c* v, M6 Q' D( L# Y- E7 @6 D| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR ; s/ }. L8 x! q' K# p3 C
| MCASP_RX_CLKFAIL0 t2 z! F7 s, l; ~* L
| MCASP_RX_SYNCERROR 9 }: k* I2 i2 C9 \* @  L# q
| MCASP_RX_OVERRUN);
0 F- Q: E) \* S) Q! w}
static void I2SDataTxRxActivate(void)$ @( S7 l: v  L7 k; E) U
{
3 [' \2 @3 I6 @1 H, t/* Start the clocks */3 o4 v4 E, k: b7 U  Y" K  _/ j
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
' k* g* w/ O4 f+ ]/ R* D5 MMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
: A* @$ _% z1 Z% f! U! FEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
# |8 @; o* y* ^; i( bEDMA3_TRIG_MODE_EVENT);$ C3 H" a. P' u3 y7 H
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, % E0 Y% x) Y1 y% G
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
! x! Z$ g" @( TMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
) [" m, M0 q0 L+ C0 P) T) bMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
% j, f8 B/ y* f1 L( Mwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
% E# W" _) Y5 u- E" r) gMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
# J) C" r, l; p# k- U; FMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);- }+ T! W- N9 X0 Z( q
}

; \, R+ |2 |, F8 T" \1 ^# \' w0 t
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

: x& L- \- n! j4 i# j8 J0 R




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