嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,) @3 u! p' _7 k, C7 X4 u
input mcasp_ahclkx,
! K8 T& @( {2 C! b6 G  \$ Minput mcasp_aclkx,
+ c+ l" |! C, p7 C. H$ zinput axr0,6 g: b: T5 J4 {2 J2 y9 X
) C' d8 J6 B1 @  ?  e  k
output mcasp_afsr,
# ?% H8 X9 w1 u: s. xoutput mcasp_ahclkr,, B# x; R( F/ ^" @, i
output mcasp_aclkr,
2 z4 Z9 w) M" `4 S3 e1 youtput axr1,
2 R/ f1 x: j& [0 ?% l' q
assign mcasp_afsr = mcasp_afsx;0 x9 J4 Q5 @" v( f- t! @: i  C, }# F
assign mcasp_aclkr = mcasp_aclkx;
/ p/ ]: e7 S! R, z( d: Bassign mcasp_ahclkr = mcasp_ahclkx;: h' h. r$ y5 a/ ], E  _
assign axr1 = axr0;

9 B9 p1 h2 x1 S; G) r5 \$ L
6 u; e' j2 o, J# R
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
/ `3 i6 b! Y7 k1 u1 B2 R' Q
static void McASPI2SConfigure(void)( s3 b. a: G  b- p
{
1 d, V9 f  p' n1 L5 I9 wMcASPRxReset(SOC_MCASP_0_CTRL_REGS);- k) w9 ~- e2 I
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
  u, z+ _6 o4 `0 F% I- j3 s+ `  C; HMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);9 w+ J, N5 R. [. f2 n
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */- ~! \% l$ [; h  N' e) X
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,5 e8 K8 P9 x9 S, P
MCASP_RX_MODE_DMA);
7 m+ Z2 q) m5 `McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
' g! m+ Y  s8 R4 ~MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
  E0 a: a3 Y+ q" hMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, & A& o0 M6 ~8 w: u. [+ x3 l/ D
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);8 e. E9 |  S$ g6 D, W
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 7 c  ]6 F. w& V) n0 F" ]
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
/ a) p7 c8 V( T6 x( @' yMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);0 c) [+ D) m9 y' n$ ^+ k4 N
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
- W# {5 j& y+ S- AMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
8 {% e9 v  N" d0 G6 x9 S1 F' b( j0x00, 0xFF);
/* configure the clock for transmitter */
2 Q' y# s4 \( a4 _' K1 ?McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
0 d4 J# Q) g4 a( p* ZMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ( D# [# P1 m* t: B
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,/ D; o" O8 k  r+ v7 c
0x00, 0xFF);) w% W4 L" J; g+ e! N

+ L  X& r' n) W* D0 M/* Enable synchronization of RX and TX sections */ # }/ r# ?' v4 L5 I6 T! R
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */+ ~, M. ]# R& i( ^2 ?
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
1 t4 a% K- d1 w$ HMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
  d. q" z3 z7 w) F** Set the serializers, Currently only one serializer is set as
! k& x1 r5 B3 F9 w8 C** transmitter and one serializer as receiver.
" m+ C+ V# u1 ~*/
. T0 B" \5 l6 @# oMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);# n) T) Z" ^' h) t
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*8 C+ O  s* L6 g( ~- h
** Configure the McASP pins ! Y. V3 W) e% D
** Input - Frame Sync, Clock and Serializer Rx
/ f! P+ C! Q1 z# y" s** Output - Serializer Tx is connected to the input of the codec
) j/ F, v2 F6 T7 k( F2 ]*/# o- t/ I% m# [6 G' t
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
+ h1 M; R  t; \6 UMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));  A% \& C) W) _# h
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
0 B1 l& G( v/ v9 A+ b| MCASP_PIN_ACLKX
  C+ {$ R- B3 C' K7 _( Z* R| MCASP_PIN_AHCLKX
6 @$ A2 c7 Z9 _! f! b| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */, D& |- W6 z' i4 l, ^
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
3 q# U; m; @9 }9 A& D% _: r: l" ?| MCASP_TX_CLKFAIL
* f0 x: C0 _/ Z| MCASP_TX_SYNCERROR
) b2 a/ s4 f5 V: N- |, }. u| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
/ l  p- `6 b  F| MCASP_RX_CLKFAIL- x- Y! l  ?$ _& B
| MCASP_RX_SYNCERROR
# `$ g& p0 f* L| MCASP_RX_OVERRUN);
: C6 d6 ?0 W! Y9 M3 a4 W- D}
static void I2SDataTxRxActivate(void)0 ~& p# ?/ X* k9 Y* u3 K& T
{
. y! ~8 G3 H6 C2 G( U/* Start the clocks */
3 i' Y3 f3 r* w4 a& sMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
4 D: c3 I/ v2 c1 ~; ?9 o4 k7 i: q+ r; t4 HMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */4 _' I! V2 H( X/ [* Z* O% X
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
  \. i* n( s; z. T8 C/ dEDMA3_TRIG_MODE_EVENT);; O% M/ m5 y  K4 j/ T$ y/ _
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 9 m) Q0 L1 H' k% l+ ]' O
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
$ p/ j9 P. K( H7 [6 KMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);/ q3 W; {3 b4 }+ Z; ~& G
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
, z) l9 ]1 d- `6 @" O7 |( owhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */7 P- N+ a- R: i2 P& D
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
' E$ ^0 k% h4 o$ f% B; u: IMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
  d4 Z, b& e4 W/ O$ ]1 W& ?# W}
( g* b/ E# g, E
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
! r! ~6 W+ j1 ]- o1 Y  ?0 Y" V9 m





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