嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,) M( ~/ }' g0 r' `% |
input mcasp_ahclkx,. i+ `8 P. S2 e9 t$ ?! j
input mcasp_aclkx,: h0 O8 U$ n4 q) O9 U1 k9 i
input axr0,
, r: z; z5 w! x6 H5 W  `
  v6 o' S+ E- _$ uoutput mcasp_afsr,
8 n; W/ O" L+ k& G& Z: ?output mcasp_ahclkr,! a4 @% Y% V! F6 Q4 b
output mcasp_aclkr,. H& x8 a4 k, {, e$ T
output axr1,
, }% u' C6 Z0 s5 K! z/ K. J
assign mcasp_afsr = mcasp_afsx;
/ Y# e& u/ e  t4 J* P( Xassign mcasp_aclkr = mcasp_aclkx;) G( @& S1 `: j2 S9 z
assign mcasp_ahclkr = mcasp_ahclkx;" \5 v3 V. N! v& n6 G4 K. n7 `" V
assign axr1 = axr0;

  k4 Y$ Q+ ~- O- Q) u4 q! ]  G# v5 i# ^; `2 p  n$ j9 k8 B9 B
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

" s  V$ _8 q9 O0 ]$ s+ A, Y
static void McASPI2SConfigure(void)
" K; e- I$ D, Q1 R4 I: Y$ Y{
8 ?3 @, k1 ~1 A  tMcASPRxReset(SOC_MCASP_0_CTRL_REGS);+ K9 I/ q" K" h; `! Q! m( r
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */  |3 q2 \) ?0 e5 k/ A
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
) T/ s1 V2 t6 m/ K2 e1 @McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
. I' V6 L8 W1 p$ P9 y( m4 CMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
, z5 v' g; g# c9 W( JMCASP_RX_MODE_DMA);
+ }4 n6 X% ^2 H7 `3 L" L% Q, _" WMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
4 }8 G" \: K2 ]/ o7 q9 qMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
( P9 g% q2 I5 F3 v# M, ]' CMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, : Q1 U8 L9 L$ b7 {! u
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
" x3 p# C) y: ]& N( RMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, - v1 J- a8 Z+ u
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
" z. _5 _& ~1 x# s/ V4 FMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);1 b5 s# y, W5 @$ C& n
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 0 A; H- K0 B* G' }4 {
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
4 t8 u/ `4 R6 T& a' y0x00, 0xFF);
/* configure the clock for transmitter */9 ]% e; p) A$ k* R% k
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);  L4 o2 K7 v& l* @
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 5 U3 p% ?" o; k0 K" b+ ~9 A9 P
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
& h  M) N5 P: b0 b3 ]* v) h0 |/ ^0x00, 0xFF);
( f5 a0 s( x8 Y& c
. S8 H' R; O. q6 d/* Enable synchronization of RX and TX sections */ : y) d- ^9 k% i- Y! r1 N( R9 t& C
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
" x' n6 T. s. Q* R3 V8 b; h2 CMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);+ d$ D- j5 I/ T7 U: H% z% t8 {
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
9 H* a4 o1 R2 \: F** Set the serializers, Currently only one serializer is set as
) f9 Z9 ?' b3 q1 E; `** transmitter and one serializer as receiver.0 Z7 M4 y' P( |, r
*/
/ P7 u, f- n" k* Q9 c+ \+ X" u$ I( D; YMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
4 _. L# o$ t1 R+ d/ l% P8 h& GMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*6 J" D* Y2 ]0 C, ~( i
** Configure the McASP pins
2 l* ?; U9 V/ d9 E4 s% d3 ]** Input - Frame Sync, Clock and Serializer Rx4 d: \  R/ z( b0 ?
** Output - Serializer Tx is connected to the input of the codec
3 ~0 X4 x. J8 f5 n8 `*/  `) n+ R3 t; g
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
- U+ n. J. B% R3 cMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
: S8 N) ^2 P0 M7 c5 X: }* RMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX: G7 c9 U: V3 W' F
| MCASP_PIN_ACLKX2 P. x( v2 k. a% U9 z$ D9 ~4 Z
| MCASP_PIN_AHCLKX) A# w3 c  y; k) W8 v/ K
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */& x+ r& F0 Q" M7 N) H
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 7 B8 {& U) ^) p4 g& W' R
| MCASP_TX_CLKFAIL
9 x& W2 {6 b- N, {) m| MCASP_TX_SYNCERROR. c$ ?5 s( K  V
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 7 _" `0 [% ]% s- @3 s: b4 V
| MCASP_RX_CLKFAIL) F" l1 m. u5 Z2 K, q) ~9 f; g+ Y
| MCASP_RX_SYNCERROR
4 X7 k/ Q5 t1 F# A3 h, S| MCASP_RX_OVERRUN);4 I5 h& W* `6 B" I  z7 M
}
static void I2SDataTxRxActivate(void). b3 d! i( s; L
{
. T8 y! y# ~( U; j/* Start the clocks */0 Z- x5 ]( |& i9 O3 _" e
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);3 U- d9 h+ z$ I* [. Z3 l* H
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
  S2 ~) ?; o7 {2 f; E, P4 z9 EEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
; k; }7 w( E2 K8 V6 {+ T" \EDMA3_TRIG_MODE_EVENT);
3 Y8 ]4 n2 `2 x! Y6 y  iEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
3 M& l6 g( p0 L9 s( K; CEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */& z* s" T6 _3 b+ [; |& n$ v
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
4 K3 F+ l" q6 V" ]+ B6 _& j+ H* HMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */2 E8 c) H. B7 U* c
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */, B) r9 [  D. g4 A# X) X" D. V# `* x
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
! P; Z5 R# [. k# @McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
0 G/ J, ]" z9 v% w2 d}
( `; L. v5 N7 j; j0 M
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
; e* \$ I8 j! X2 H2 D6 Y4 E% Q* J' B





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