嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
8 I: q& C5 v+ i  t$ {6 ]- J  M" U5 Hinput mcasp_ahclkx,8 l$ H8 u" R3 ~* {
input mcasp_aclkx,5 h9 Q1 {  l4 v/ I; ?# E
input axr0,
' R$ z9 D. I" g/ t  e2 ~( ~$ j; t# }5 r% g, c1 b2 p. i4 K
output mcasp_afsr,
5 I% S8 p# f/ ?8 _2 ~6 ~9 Xoutput mcasp_ahclkr,
- d* o  e1 Q* k1 B, P" E& ~$ \output mcasp_aclkr,1 S, E1 d4 Q( ^
output axr1,
: q: d; c$ A5 m
assign mcasp_afsr = mcasp_afsx;+ T; L# o4 w0 P0 X, b$ w6 H
assign mcasp_aclkr = mcasp_aclkx;
2 r7 O7 l$ k$ W4 vassign mcasp_ahclkr = mcasp_ahclkx;2 c4 N0 ]% m0 ~1 ]1 O4 m
assign axr1 = axr0;
# y& f) u, _1 A( Y8 Q5 ~
; G3 G, o( E( Z: d7 C3 j+ l
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

4 `" Y; L4 [, w& E4 c( b
static void McASPI2SConfigure(void)& \4 T. X/ `0 S0 r
{5 y' o- `; i/ P4 T# b
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
5 _7 Z6 `8 O" }" M8 I. YMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */8 {% D2 i4 u# _. \, W, t1 `
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);8 Z6 t* p8 U) |! ^0 I/ U2 ^' i
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
9 p! i& b& C. W' bMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,1 [& T1 C8 D7 E$ l
MCASP_RX_MODE_DMA);. i4 R: l7 \7 z8 C( @2 R' h
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
5 v9 {; k, G9 V/ y' `+ O3 aMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */3 L/ G3 ]: X" i. b2 G
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
8 K1 Z* a/ b0 cMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
; u0 K. W3 i1 I( \3 rMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 3 f# w; ^& `: p1 J
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
! U  g0 _2 G4 e( e6 p  l$ ^, VMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);9 S: L. `% m5 Y  L; Z: o- p$ V9 b& q
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); . b+ k8 m* J0 \  ~5 d8 a1 h
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,0 Q) O9 |/ s9 D
0x00, 0xFF);
/* configure the clock for transmitter */
* ?! U! H. r" Y# S2 C/ CMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);$ T& ~* U' q) F. r) S6 o/ E4 h- S
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
9 ?! k/ ]& I( t9 v' l8 H7 LMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
. _, Z; J  Z) e. v. c8 t- x# {0x00, 0xFF);
/ s, E$ x- ?% B  q. u% q* G( t; T9 E" G: y+ x  A6 q
/* Enable synchronization of RX and TX sections */ / e6 T/ [' l& [0 `
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */. o- O+ k1 s8 i, o: l5 Z7 R8 T
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);; y4 m4 C" e: `; p0 n
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
% t6 s" c6 T* z8 v; s! l** Set the serializers, Currently only one serializer is set as
1 Y, ~5 m' k) y9 H' ~: d, `! m** transmitter and one serializer as receiver.& x6 U, t$ z! o, ]8 O
*/8 e" t8 y3 c# M, C; X
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
4 n+ I( l; i7 p# ZMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*! J! @- s5 Q5 o% n/ k* O
** Configure the McASP pins
, i4 Q8 [+ g1 B! ^** Input - Frame Sync, Clock and Serializer Rx* H- i4 C. H9 F6 }
** Output - Serializer Tx is connected to the input of the codec
) d. }1 ?+ m3 t* V5 }*/. S2 {. ^% G. @2 x
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);9 p, O7 n0 _& @4 M+ I  ~* G& s
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
" Y1 j% z+ E/ i" T+ @7 OMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
$ p+ @$ z/ z5 _, Y( y- r0 x| MCASP_PIN_ACLKX0 y7 j+ x# t. v& U$ o
| MCASP_PIN_AHCLKX
+ e& S& T" ~" s2 k2 S5 p" |  ?. T| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */6 T# ]( W' m8 w$ b
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
$ K; P. r6 S% {. c: l| MCASP_TX_CLKFAIL " a5 [6 e' k& B
| MCASP_TX_SYNCERROR& b- L$ n9 Y- _' ]
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
# Z* A# S1 {- t| MCASP_RX_CLKFAIL8 U# H0 a$ H" ^) }# H/ T+ \
| MCASP_RX_SYNCERROR
% l9 b1 c! f* }& a  Z: a| MCASP_RX_OVERRUN);
/ K$ X) \, J. r  u8 ]+ C1 D}
static void I2SDataTxRxActivate(void)! S* e; h  k4 q8 [0 U
{
: Z" ]( f# t! C/* Start the clocks */
1 ~1 G& N% U- Q5 i# |McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
( H1 j/ K5 c, P7 z/ z0 ~) uMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */! L- R9 j* Y+ p( T" _/ i: S
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
1 a# w" s1 T% b8 K( f1 g% y5 h9 xEDMA3_TRIG_MODE_EVENT);8 Y5 n7 _7 z1 g$ U; B0 X1 O
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
$ n5 ]. Q4 K2 fEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers *// D; ~% R( A; y" K; p. a
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);: K( h  ~. R) e  |: h" `8 ^0 Y
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */+ ]! j. q  m$ `
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */1 J. x+ Q) U; h+ |# E5 V. E! S8 ?
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
( }  @6 E7 c+ v& R' r, @7 j; wMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
( a* a( Z' E( D" w( ^}
" `+ L; L, j% I* t0 M: ?
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

6 Q/ f. B2 W5 Z7 t/ C  L




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