嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
. i# E; T0 a) a: i( G, ^& cinput mcasp_ahclkx,$ g5 [) @- a* R7 u# i8 V* k) \" g
input mcasp_aclkx,
1 ^% N0 T. y, H" i+ ?9 \input axr0,
! h* b+ y  S$ O- R7 W8 f' x
) e( Y3 x# t7 g! Youtput mcasp_afsr,
: Y- D  b& H6 a8 m' }output mcasp_ahclkr,1 p. k/ C$ j& o6 c- C3 j
output mcasp_aclkr,  g- ~7 Q( m% }" R9 J
output axr1,8 _+ z0 I0 y. z& w" f
assign mcasp_afsr = mcasp_afsx;4 ?8 E  H" F2 S  j# U
assign mcasp_aclkr = mcasp_aclkx;
( j; w. l$ T2 E; M# ^assign mcasp_ahclkr = mcasp_ahclkx;
- J! D4 `2 Q. T: q  vassign axr1 = axr0;
- |- N. A& h) s7 q$ m
6 k6 {  @( N& ~$ f
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

) g5 x# h$ E. y8 J
static void McASPI2SConfigure(void)- c% R0 i6 b/ g  t+ ?5 B& T+ H3 }
{
" L5 u8 `4 T4 L& DMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
: Q8 q0 R  N9 n6 CMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */9 O7 O. ~- Z. D8 n3 q% I% v) L4 K
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
& Q3 Z( C$ I' w4 j7 yMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */$ O: n0 M7 @0 p" U: m$ Z8 P7 \. n7 I7 ]
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
8 [0 Z% z2 B( U) p2 FMCASP_RX_MODE_DMA);( x; c( M# K9 [9 O1 ~* {
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,% B, Q6 j  x) J6 Y4 Q
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */3 i, Z* b0 F( A
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
; Q/ V% d' J& p$ x9 \' v. OMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);5 c  q+ K6 ~; S" j1 Y3 u
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
4 |4 @) W& [2 }MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
2 r% ?+ S' C; [, _$ z7 Y6 AMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
  F! P4 w5 _; [" G6 dMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); : g4 C: F" ^% d3 }
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
2 O* b& a$ x6 G+ X# X4 i4 j0x00, 0xFF);
/* configure the clock for transmitter */
' D/ y( L$ Z/ t3 X  LMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
+ ~2 ~$ s3 Y* ?2 X7 q% W* L/ bMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
, \$ L$ k. m4 H7 u% dMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,7 D4 H- [, W  C  O" g& e
0x00, 0xFF);
, \% B7 ^( e. _( a5 `; S3 ?. Y' w, Y
/* Enable synchronization of RX and TX sections */
; L. b1 o0 x  S3 {: lMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */4 y( {( j# ?; ]" Z, i5 w" D( z
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
. `8 d: r0 s0 T; F( i) s( bMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*  {; A% i. q; g' m: ^7 Z7 h4 e
** Set the serializers, Currently only one serializer is set as
; g1 y! k" U: _, ^4 A2 j' `+ w** transmitter and one serializer as receiver.
" Z6 f( f% S5 R& N% V*/
" Z9 d3 F1 g# Z8 x' X% q0 f' \McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);4 m" E5 p$ ?' d! J4 s
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
$ e: v6 F: i7 Q! J: ~5 n& J** Configure the McASP pins
; u$ K9 [0 O0 z: A- [* O: \** Input - Frame Sync, Clock and Serializer Rx
) b  |& ]6 R/ Y: t** Output - Serializer Tx is connected to the input of the codec . O% p; p9 z: A' o9 i9 J7 n
*/- r) E& F/ N7 p6 P* t3 @! V- k2 U
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);. E0 [7 m( B+ T- d
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));0 S$ h- m( {  }: _& R% N9 a
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
* Z+ \8 \& I; t" D6 l+ ?; Y| MCASP_PIN_ACLKX  a) e) H" P; C$ Q' S
| MCASP_PIN_AHCLKX
2 a, S3 n' P. M8 q1 J2 m8 T| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
8 D' t; Y+ F$ P2 ]9 VMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR * \3 E6 n9 w9 j, e
| MCASP_TX_CLKFAIL . M, V2 p9 K# C* d3 @
| MCASP_TX_SYNCERROR
9 s" g5 e9 E/ N$ q3 G1 x8 k, S1 @: O| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR # O- }5 w* |7 o2 m
| MCASP_RX_CLKFAIL
: L- ^: w# c, N7 y! f| MCASP_RX_SYNCERROR & }# ?8 m6 U7 L
| MCASP_RX_OVERRUN);
- t# Y6 I6 F  H' h1 w) G) o}
static void I2SDataTxRxActivate(void)
. l' G8 K, O  \: G: \* T0 |{
) s5 [/ D& ~: F# B0 w0 G/* Start the clocks */
: H/ r! W2 Q* S3 n2 P+ r* QMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
$ a$ P$ `! U2 l, O" t8 V: v! m- a; wMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
5 G" U) w( x. n' n* s4 h" f0 UEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,, m) t: Q' B* p$ a6 q+ i% q
EDMA3_TRIG_MODE_EVENT);; j# [9 _4 G/ x2 |/ G! \, p( C
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 4 O$ r- c' O: x! ^, s$ Y! u
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
1 w" R/ g1 ]* ^  jMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
+ y! K- h; W. M6 \McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
$ E6 ~- n% r1 x3 B; f. `while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */6 d+ @- o( j  t7 `% W6 c5 n
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);, j3 y  H* H3 L  n8 z
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
: ]7 J. c( T+ H}

, ?' s& @1 {  B' `2 L  o8 M3 f
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

; J) k! `  a$ J9 J4 R4 M




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