嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
  {6 M% ?) M% s/ J2 vinput mcasp_ahclkx,
; j4 t/ t& `+ vinput mcasp_aclkx,& z8 J! f% f% l  U' z: X9 c( K
input axr0,( n) F# V; }% y

: Z+ n4 C; Z( q2 Z5 N3 doutput mcasp_afsr,+ J$ M% V; E7 v+ W' m& z0 Q
output mcasp_ahclkr,$ S9 N; x: j0 f6 ?/ |9 q* j/ F
output mcasp_aclkr,
; F; c4 f" j2 R) m& k( h0 B8 y8 N7 Joutput axr1,( a3 K* x2 n7 i) b- ?7 h3 H
assign mcasp_afsr = mcasp_afsx;) m% K; T$ F9 d0 t" C
assign mcasp_aclkr = mcasp_aclkx;0 h! o) n. N9 u# {3 a6 v: \/ J
assign mcasp_ahclkr = mcasp_ahclkx;
* k0 O4 X/ V/ ~, U4 Y7 n4 C% L: @5 qassign axr1 = axr0;
7 g# ?$ l# H) h1 H: _* ^- |

9 d. q5 q( {6 u
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

& Q/ d$ ^; k% O+ B. p) h
static void McASPI2SConfigure(void)1 z5 e4 q+ P6 U" t
{: [0 }5 I3 O; S7 o; j
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
7 }2 Z+ X; K+ e7 hMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */1 X! ~( w$ h+ E# g" U1 k
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);) z+ |6 Q8 V* O0 P
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */: b! v* N2 k0 o3 J
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,6 Q6 P6 l1 ?" B* X( N. T
MCASP_RX_MODE_DMA);7 @1 [" a: o! `: w/ b- ^& y
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
" r8 w: ^% @0 H2 Y& lMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
) q: N6 [; D9 p4 V0 ?$ yMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
# [. u3 h. p+ Q& sMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);% S5 B2 z3 J0 d: S8 y
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
' c1 N0 F9 W( y0 b2 ^MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */. e. m3 L" ?# {% i0 @/ k, w1 `' z8 T
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
, t1 }7 }0 d, }McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); + ?: \- X% Z9 Q8 e) s) k
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,! d$ Y" q, E& m: Q3 Q8 c, X
0x00, 0xFF);
/* configure the clock for transmitter */
  r- |3 w- u( d3 i* kMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
5 ?% v: U4 ?0 y" y, J  [- EMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
" O# F, L; [: s7 a4 ^( GMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,8 c3 s( N- Z! A7 z0 Y/ {8 s- g
0x00, 0xFF);
: V* p2 D2 Y$ A) _: d5 d6 q
' O, z9 y7 V0 s8 i& ]1 I/* Enable synchronization of RX and TX sections */
, F- l- u" S5 o0 v  q) lMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
/ n3 c. f( @$ X5 ?5 Y2 \) L- aMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
9 \6 ?2 K: g; ?, \1 u' XMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*) a# N. l+ Z" Z9 T* g( e% X& n# v
** Set the serializers, Currently only one serializer is set as
# _, P6 ^5 {$ F9 V" n8 p** transmitter and one serializer as receiver.( P& s) j) j' f* r& t
*/5 G! [, @1 h; e9 B
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);1 w: \% I; e( f4 L2 j
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
( X" N: E7 N* Z** Configure the McASP pins ! @! v2 _8 n" q& D. M1 f! D
** Input - Frame Sync, Clock and Serializer Rx
& m* L5 P' q# y7 t- n, ]7 v' X** Output - Serializer Tx is connected to the input of the codec
- F7 v. K$ o, W, s  k*/, A: u+ E. e2 K( [: ^
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
. n! Y/ K$ Z# p3 dMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
) o5 d$ v% p$ T( v' @; @4 DMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX* N. G; N2 R1 G2 p! u! A4 M
| MCASP_PIN_ACLKX
# c( O6 t2 T9 ^4 w$ p| MCASP_PIN_AHCLKX4 b: X# p' C7 ~& A& ?3 I
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
6 o( V4 r. ^# Y$ ~McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
9 l( j; }  j5 s2 L$ u. r| MCASP_TX_CLKFAIL
7 ]& g4 k; p! f4 ?- s| MCASP_TX_SYNCERROR0 a6 c) G+ E3 U+ q7 V- ?9 Q9 |: Y# Z
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
5 O, j% F; G& l* n2 q| MCASP_RX_CLKFAIL
# x) U! ?, T+ q| MCASP_RX_SYNCERROR 2 l; Y" G# F, u) F* [  f  ^
| MCASP_RX_OVERRUN);$ B' J6 n3 ?4 _5 x" M! S- m; a
}
static void I2SDataTxRxActivate(void)2 m) V% v# ]% B8 X3 y
{. R' S/ g4 a9 p. A* B' }! }" R
/* Start the clocks */
) L) s9 r+ N* ?  P  m. c  \6 P* jMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);  Q8 d2 _) S! G& o$ x( d4 M. {
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
' ?. \& e5 L- B" w, U# `EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX," G, X$ P* I) |& G- R6 H
EDMA3_TRIG_MODE_EVENT);
& J: r% P, w7 Z( O4 Q+ o+ ^EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, / |% ^/ N9 p! {* C
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */" D% A2 O& T0 v) T, d
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
- S9 Z6 S. o  a2 ?' G2 ^' hMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */. u% C0 u7 @; ^  A+ K& L2 D7 d
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */% Y+ ]  o( `/ b0 L
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
8 N$ m2 q% h% H/ T4 V7 u6 [8 W+ GMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
* e) P* M: x  n. |  k}
' _+ q! V2 p8 ~. i
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
* P9 v! S+ q# w' T5 G





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