嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,% P$ |- }6 S( v9 ^/ ~! Z
input mcasp_ahclkx,
' q- g2 K; G# E2 m+ {1 Qinput mcasp_aclkx,
- ]  H, \5 J% \1 T* ^input axr0,
! D$ _  X8 k: E$ Q- u/ g1 k; ^' z0 `% I: P
output mcasp_afsr,% i5 t: X; d( E( L3 P
output mcasp_ahclkr,
/ Z4 W/ @2 z6 r  C7 `$ `5 Ooutput mcasp_aclkr,
5 v( x% n+ q2 ^0 y9 x  ]output axr1,
1 L% K2 }+ P% F5 a1 u7 @7 {# b8 u- Y
assign mcasp_afsr = mcasp_afsx;
/ i7 h; `  Z3 g7 F, ?7 R' X! Bassign mcasp_aclkr = mcasp_aclkx;
" ?4 F! O5 U! ^: y. a+ `assign mcasp_ahclkr = mcasp_ahclkx;
) g$ w. @$ J( U. ?- Nassign axr1 = axr0;

! }* l2 g! [) @5 x" |6 o: d  e+ p- ~5 _5 l5 w
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
. k3 s& q5 J* D$ }! y$ w4 X
static void McASPI2SConfigure(void)( b& i) J6 ]# e3 }7 m! `
{
+ a' K3 e' |& |1 }0 i+ w. aMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
- M& ^7 X7 U1 ]: N; }McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */( D! m7 L% k- l5 ^8 D% F
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
6 w0 o4 ?" V& K0 L. F. m3 A3 yMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
: ], t& b& G' M, Q3 N$ q+ kMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
9 h" g- J6 ]" t% A4 k8 EMCASP_RX_MODE_DMA);4 a: l( U) \' h+ n9 b8 q" H/ a
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,1 \4 b  b1 _8 |1 J) F
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */8 v6 y1 m- F4 r  S& X) r, `9 |( j
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, & ^7 ~# \: @6 |) A
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);" o# W1 J% f* F3 @7 y
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, " J+ g+ t- \7 R" F& w
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */1 z" {0 B- a* N; `3 @1 Q; l9 @& c
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
) o+ n2 r1 G$ a# g) r) U6 ^  M: [McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
& K+ ]7 [- H$ I0 D! {+ |. {' H2 F5 A: VMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
  H' q- ]' A2 B2 f0x00, 0xFF);
/* configure the clock for transmitter */
6 V; b1 a2 S6 W# d- M1 SMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
. {8 k8 P7 h" h8 L, s1 BMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
: B- U4 Q8 N% P& C) cMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
3 u; L* ~% e+ q5 v% |0x00, 0xFF);: g; O) a" ~  Q  i6 |1 ~; f
8 C" [6 A; j; \. d9 P7 j
/* Enable synchronization of RX and TX sections */ ) V% e2 k; ^' f8 D+ [
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
: p' }% K9 Q, e3 k- ~2 @$ [  v  y9 f; gMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);( X  L4 g" [9 ~: m3 p( m2 R
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
: R; H3 R/ U4 S! S/ b** Set the serializers, Currently only one serializer is set as, C) C" h  k/ \3 P+ O
** transmitter and one serializer as receiver.
; k, I9 e6 ^& m0 s6 R6 `*/& n" Q4 i, C( ~" Q  `) o
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);/ [4 j" o/ i  f1 p7 o
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
) n5 }$ q9 O! r7 y: D  L- Z** Configure the McASP pins
9 r3 O) X! C' f; Z; M# ~** Input - Frame Sync, Clock and Serializer Rx. c9 E1 m0 v5 g7 y& O
** Output - Serializer Tx is connected to the input of the codec , d: z- Z) W0 E6 f$ p
*/* U+ V1 Z. t9 j, Q4 v
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);+ T/ g5 z+ |, i
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
9 p4 Q! A  n' Y. ^2 L/ jMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX2 M! U* n7 @4 \$ o# L
| MCASP_PIN_ACLKX1 W  ?. n' ?! z/ u9 F6 P2 ]9 ^! ]
| MCASP_PIN_AHCLKX( }% h: X2 N/ i% S$ O- d: r: w( j3 \
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
" I# r/ ?1 {. {- @  g8 ~: T1 i! PMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
2 V* F9 K' a4 B5 I8 i: `| MCASP_TX_CLKFAIL 4 P9 I  O) o6 P4 M; |: z- k, A2 P# r
| MCASP_TX_SYNCERROR0 d. T9 G% W9 g! ]5 V  {7 E* L3 ~
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR % ?3 X6 E3 e$ O. U
| MCASP_RX_CLKFAIL
4 K# @, n8 M* v| MCASP_RX_SYNCERROR
0 u, |9 }0 t6 |9 u+ o| MCASP_RX_OVERRUN);, b$ z+ s  G/ }9 e( A
}
static void I2SDataTxRxActivate(void)5 U+ O' M' X4 I: F
{
1 d; H2 @+ q( d! @1 Y" U/* Start the clocks */1 T8 m8 G# N' O& A
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);# j, y. Z. Y, l9 P7 t: U
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */& [6 ]3 c- G  j* N, X3 b
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,' l# c4 J( r% D
EDMA3_TRIG_MODE_EVENT);
4 E/ w. @9 l/ `* b5 f- e, a$ E6 h  GEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ; |5 D: @: U; s3 @& t. E
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */( {! f$ F( N0 e
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);/ D8 F) D/ |# Y4 u9 i3 M
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
: Q- r( K" n4 U3 o' s+ }4 gwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
2 t) P5 Y+ A* \3 y9 L# j  sMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);  E; r; o5 n) d0 D( M! U' ~4 u
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);# ~' l* P. E  p; N# [
}

$ Y) l+ [+ s3 T: O7 k. t
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

+ F% e3 \( e" N4 m: T% \2 @




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