嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,9 B. v( z" v# w7 Z. K
input mcasp_ahclkx,
' `$ y1 _9 m! u) V) t# r1 jinput mcasp_aclkx,
8 e7 {! Q% v- d" }input axr0,* M3 n; e% [& {8 p4 v

; S- x7 g. K% A7 ooutput mcasp_afsr,
6 K; I8 ], d2 m* L, l- Qoutput mcasp_ahclkr,
1 P' a6 s2 o% l/ soutput mcasp_aclkr,
9 N8 @" g+ {  u, l! G4 Coutput axr1,
. \4 f1 m" k( N$ e! ~9 w
assign mcasp_afsr = mcasp_afsx;
0 T0 I) b# L5 @1 sassign mcasp_aclkr = mcasp_aclkx;
5 ^3 A2 o& E: g; \$ kassign mcasp_ahclkr = mcasp_ahclkx;' s0 y- ^. G( q+ A- }
assign axr1 = axr0;

, O6 ~' Z3 {# Y# `1 m9 z: K; r$ g5 d/ ]+ X0 E! I7 ]6 s7 p/ [
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
8 F4 o( n0 Z# v: d  c$ X% _
static void McASPI2SConfigure(void)+ W, Y+ g  X0 W2 A6 s
{
, {0 Q( D) o5 J# F) f2 TMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
- I9 z6 `) Z8 IMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
% P# t9 v  D  xMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);6 {8 A! V! C" ]1 F9 `2 ~
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */4 C9 P, W& l. P$ b6 b, X# w
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,3 ~3 i  J8 E" S% z5 ^
MCASP_RX_MODE_DMA);5 z1 F# a# X2 f7 K9 Z
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,5 K( P. X1 u4 K4 G
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */( R. c4 Y0 O7 z/ i' |" i
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, # n/ p8 y5 f) T% c; o5 h
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
* e- z! M: R( C$ |! S. f1 yMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
7 ^- R3 D9 X7 y) e- g  zMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */: W2 m  G# e' P1 _
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);+ B0 P# l9 Q3 N; T; C- K8 R
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
$ ^9 ~( n' ^, ?0 \McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
$ \  p, ?- c- S. r0x00, 0xFF);
/* configure the clock for transmitter */. {. t' K5 {& {7 }3 `8 f: K+ Z& E
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
7 Q9 O. E5 J1 Z6 P& yMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 7 T0 v- w# ?: s9 S0 `1 e
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,) N0 ?" X1 s; G3 g9 \" m- n4 F
0x00, 0xFF);
+ i& c; q0 `% Z' l& c2 c/ ~# @! S& f* B( v$ W) o% Q
/* Enable synchronization of RX and TX sections */
# a/ o% q: A7 J+ P% dMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
% [% r- J' C1 \2 jMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
7 X) s; k; @8 e& A/ {# b. GMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
' a$ E: R0 L( |2 `** Set the serializers, Currently only one serializer is set as: N) t6 I1 U* F3 ~
** transmitter and one serializer as receiver.( o) n- e" d% H* `5 g* [: I4 j9 g4 U
*/
1 H5 s( l. }# H4 ^, @McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);6 G# {0 \6 K' T  f. w: Z1 ]# w
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
& `. H/ |- [5 I** Configure the McASP pins
0 U, q2 h% Q. s  q** Input - Frame Sync, Clock and Serializer Rx9 J$ g2 B' |  g" [4 \
** Output - Serializer Tx is connected to the input of the codec   q0 j/ M% J+ H" J
*/$ s5 |: p% }5 b! T! ^
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);) |, h) ]( |0 I
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
9 `1 j" L+ R5 ~( x0 FMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
; [: L/ F7 s. ?1 q| MCASP_PIN_ACLKX
: |8 N/ b( I3 |+ g; d' p# Z3 A| MCASP_PIN_AHCLKX! L6 y  Y* g" ]5 F
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
6 l6 |4 J' {8 W( c4 {McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR + {% V$ t  x4 w- ?5 g
| MCASP_TX_CLKFAIL 0 U( i+ w" K: p: H/ E8 i# Z
| MCASP_TX_SYNCERROR
; _( U* r- G1 `1 C/ \# j. t| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
4 ^- i# |. _& a* }& j3 ]0 X| MCASP_RX_CLKFAIL
' ?  m) Z. y! g) Q; v" {7 T| MCASP_RX_SYNCERROR
% ?% K* c8 E+ j' o2 O- R1 z| MCASP_RX_OVERRUN);
8 L  p) m. f0 r- a! a; w0 S1 F}
static void I2SDataTxRxActivate(void). v! m. P( m/ H. Y
{5 n. Q/ j$ a5 s
/* Start the clocks */% {5 O4 t2 X6 O. f- k% z! `
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);: B: E# ~* z' ~" n
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */( s* W  {7 k: C3 d
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,% K5 I7 r1 n& m" G, E
EDMA3_TRIG_MODE_EVENT);
% d- i! _6 l2 i" OEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
3 l8 n+ K# A7 v0 u2 A" aEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */' R' `+ l3 r# }* u
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);# K/ W& P9 o7 x& l; t) V6 M
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */% A6 J$ ^% [0 b7 R
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
( j1 g: a; Y$ QMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
# q: g$ e5 M' Q7 }3 S: Y, j# LMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);% d0 N1 D( S) _
}

8 k# c/ \, m( B4 }, G% s
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

- N* T. }* ]" M/ V. f5 j




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