嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,' F' }) Y$ V+ S, S
input mcasp_ahclkx," r8 s! t3 E. U+ u) [
input mcasp_aclkx,9 Q, k9 ]) D/ O5 @5 M
input axr0,8 W, D/ ~3 q6 \! S: f

8 `, t: U6 |+ Y  }. @output mcasp_afsr,
" \( n$ s; j+ E4 Foutput mcasp_ahclkr,
1 X$ L3 n$ R1 Z( @) t& {0 ^7 joutput mcasp_aclkr,6 N5 p9 X4 t% T) [9 `+ U1 Z
output axr1,
7 a! z- b" n5 b" j
assign mcasp_afsr = mcasp_afsx;; r0 G3 u  N  b
assign mcasp_aclkr = mcasp_aclkx;
* `$ r: [6 t6 @" }8 {/ }assign mcasp_ahclkr = mcasp_ahclkx;
' J2 F3 w+ G0 v" f0 _% w: R8 Passign axr1 = axr0;
- v* ?- C3 O# }# f

0 P; O1 t& h% Z" U. I; d
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

" {; B( C2 ~) c( Z9 h5 S$ L; ~
static void McASPI2SConfigure(void)' m) ^" j/ ~# a( J- i
{$ q# R: V, v% D2 t
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
  V8 p* l( e$ w  U+ wMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
: }7 |. n9 C' I* h3 f7 D- MMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);) e. s$ T9 K/ s8 }, O
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
/ P* y! f# i3 T* }. U+ NMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
$ z5 ]8 v7 M- n: s1 Z/ oMCASP_RX_MODE_DMA);3 j5 Q* s* Q; N% H1 O0 Y
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
) x0 }% N4 N1 ^% b+ C& QMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */- c: C6 L9 H* V9 {4 |
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
' W' ]2 ?2 A/ \7 m  _4 p  lMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);+ K# _9 i. W5 Z; K8 z
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
1 Q+ f8 X4 z1 u, GMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
* S/ V# g3 W7 ~, v" {McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
& ~1 p" V' q2 f& H& bMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 9 @+ L0 v$ K/ c( v: F) p
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
' {8 D1 g) W" ^1 e* W9 K8 o/ G: k0x00, 0xFF);
/* configure the clock for transmitter */
$ g  i4 }# o" R5 I# {McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);5 Q+ l" @% k9 S$ {0 i
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ( l1 j; `( D( P5 P' g
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
! b( s. K- \$ l" V( @: w# |  y0x00, 0xFF);
( U, L$ ?6 s$ [7 g7 ]$ \- ]5 s* y4 a5 ^5 v% w
/* Enable synchronization of RX and TX sections */
1 A7 V. \6 g( u5 t" ~1 p4 f+ }McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */, c& p- W; d7 R$ w3 B* W; L3 v
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
5 d8 p1 F2 ^2 }) m& ZMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
( `0 ?# Y( @1 _9 X% j0 q  T** Set the serializers, Currently only one serializer is set as* _4 d$ |- d7 G2 i
** transmitter and one serializer as receiver.& V. S% z/ Y# {' |9 v, y5 ?
*/9 Z# n/ F7 |; Y  }6 t/ y- N; K( ^; W
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
& q4 F, @$ Z& ~! S- e$ CMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*+ e# x/ S7 O0 {0 \# {
** Configure the McASP pins
; c' I& w. R4 ]- V** Input - Frame Sync, Clock and Serializer Rx
& R! D* J) Y( `. N** Output - Serializer Tx is connected to the input of the codec 1 b( m: }& q* \, P0 g; j) k
*/
3 w( Y- u1 N! I, B( R* IMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
. b+ @' i6 b1 |3 zMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));7 G0 I4 c- ]2 g4 g+ I. s- l% p1 |, q
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX7 U- E, e& _) ?
| MCASP_PIN_ACLKX
9 F- q# p+ U. J4 H+ v' \: v| MCASP_PIN_AHCLKX/ V3 U, {" w: e; n
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
" @6 Y+ E( `  ^6 fMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 1 c/ _+ V! A! b1 y/ j
| MCASP_TX_CLKFAIL   h( ]6 \2 a. X5 ]8 n8 Z
| MCASP_TX_SYNCERROR
4 O+ R8 f- F" J( q, f/ s& J' t| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR ! U# B- E: T+ Q2 w2 h
| MCASP_RX_CLKFAIL8 F) S* A# F" m. ~9 v
| MCASP_RX_SYNCERROR
8 R% `6 Q) Y8 T6 F| MCASP_RX_OVERRUN);
+ E  L* k4 F9 a}
static void I2SDataTxRxActivate(void)+ v0 W+ ^8 W+ F( q0 e( w
{
! u/ L; B. w" G/* Start the clocks */: C3 A- r) ?  ]6 S3 x9 _
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);2 G7 x: Y% X  H+ N/ A/ N
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
. }3 k3 o2 ]3 `# i) n$ QEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
2 w, I5 s" s, v- ^5 K( EEDMA3_TRIG_MODE_EVENT);
" @' p* I! t' G0 D7 zEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 1 M4 b( P1 }9 I
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
! c" t; v. l/ d2 w9 j4 `6 SMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);4 n- t1 g4 V5 }3 T  c$ V
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */4 p9 w! }* Y( h! `! v
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
9 {1 w# @( V3 \9 _McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
& }" h4 ~& K/ |McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
- u' M$ k5 V# S}
+ L0 @3 f" h, L& V+ w
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

9 ]" ~8 p' \! |9 ^2 ?7 a




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