嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,  a! x6 g" p4 W
input mcasp_ahclkx,# s3 t1 n' K2 |0 m1 }7 \5 S( C- C
input mcasp_aclkx,
. d1 ]. E2 p" e, hinput axr0,
4 c  r- c1 W7 n1 e2 g5 f1 z( C* u% I5 ?1 q# J" {6 `0 r
output mcasp_afsr,
; d% J2 R. H* i6 c! I+ p% houtput mcasp_ahclkr,
& O0 p; p- O+ c/ _output mcasp_aclkr,. Y8 s4 ?6 ]0 E0 L0 u6 E
output axr1,
3 [# P% z4 X# P% D
assign mcasp_afsr = mcasp_afsx;, b" E0 Z' P# {
assign mcasp_aclkr = mcasp_aclkx;+ Q" j  T) B2 e& m; r: ^
assign mcasp_ahclkr = mcasp_ahclkx;: }3 |1 {0 M2 i* W: b! J
assign axr1 = axr0;

; G- p+ x: _; ?- B$ K$ M7 q' K* Y, V7 `
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

9 G. p7 G6 n( v4 E9 w! \* e; f& N
static void McASPI2SConfigure(void)
7 Y1 k1 D) `% N/ z& ~4 N{
5 R- P$ m+ R1 ^3 l2 IMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
  T& I" k  ?2 d0 t/ qMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
0 |7 z! d* T7 L2 W, eMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
* s, s' u) h8 [( M( f. L0 aMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */+ J# o4 L. h7 {' z# _' g
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
% b3 Y! G+ z8 Z) y" m6 k3 B' VMCASP_RX_MODE_DMA);- F9 k4 G: J9 X* z4 B% ~1 J
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
7 _4 T1 a: a! L6 [( VMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
+ _  b( P0 g4 i. KMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
3 L' N) f8 B/ eMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
/ u+ P7 o; {2 R  b5 R6 uMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 5 x1 m; ?. |. T0 P- V  K" u& `3 m
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */7 g$ m# ]' r- V1 M: ]
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
( F/ S, a2 K% u+ U) ]+ J  |, u. {McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); * w+ _0 N. g( u; G9 x7 u2 f/ |
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32," g5 s& E  a; f" y9 A5 }
0x00, 0xFF);
/* configure the clock for transmitter */& D9 Q' F: u6 _" S
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);/ h) Q; i5 D3 M' f4 A. k$ \8 j6 C4 q' F
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ; w. v! C% A- T4 q% v9 s
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,+ q' K- Y1 i3 x' {
0x00, 0xFF);
, \3 f/ W$ V/ `1 ?/ U  E/ I5 e9 S. h' G
/* Enable synchronization of RX and TX sections */ ! c/ q* r/ ?4 d4 |8 A2 L5 m
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */6 E. n8 ^4 Q- Z% C# r( s
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);+ _9 W/ F3 K( s/ T, c) c  p: s5 A
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
" G; U$ @; c+ @) `7 [2 H** Set the serializers, Currently only one serializer is set as
3 U. K# J3 m# I7 L( E** transmitter and one serializer as receiver.
6 \6 B+ y0 Q! z) q*/% B3 Q  E  h% G; i8 ?1 }( Q6 M
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);9 `( Z. r7 B: w5 x: Z  P7 X, n
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*  {. K* I: |' `- H/ X( u
** Configure the McASP pins * p9 y1 R6 z. r
** Input - Frame Sync, Clock and Serializer Rx
! D" [. j8 n+ {2 Z6 @& s& R** Output - Serializer Tx is connected to the input of the codec   H* T. D1 {3 z) L" S/ `! y
*/* M1 n( j  d+ a1 x
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);0 s8 E: a, b; X" A
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
8 M: `. w  D+ O; v0 lMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX6 |7 P  V( j. X4 m8 e# ?- Q4 }9 D
| MCASP_PIN_ACLKX
9 u4 t3 }% n; [9 j| MCASP_PIN_AHCLKX6 Q2 o' t- S% N3 y& Q$ ~/ k
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
; l( q! ^+ S' t1 f; xMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
; r* l1 E0 U/ y. Y$ x  L+ C| MCASP_TX_CLKFAIL 2 \: e" c, s, a4 i9 P! g
| MCASP_TX_SYNCERROR
2 `" H. z4 D! K4 T9 `. X: }| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 3 L8 u/ b* u* V* @# B- d  r! B+ Z8 J; r
| MCASP_RX_CLKFAIL& `$ v- }) G" @/ d+ l, }
| MCASP_RX_SYNCERROR
% d, P9 C. Y8 K& D/ Q& Z| MCASP_RX_OVERRUN);+ R) R. [0 s2 N- C+ L. C) Q
}
static void I2SDataTxRxActivate(void)
3 }  e8 O! Y0 ~4 D0 r+ T{
* S4 @( g( f2 |# I+ e" j/* Start the clocks */
' ^( r/ \* \7 Y0 u8 SMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);/ b+ X8 k# @/ C) M$ Y' `0 n( T
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */0 V3 y5 {: R: P5 t/ i
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
% I; W9 D. R7 p& l4 P' d- e/ t3 o+ fEDMA3_TRIG_MODE_EVENT);
" X- ~4 j8 |2 T3 @# s/ cEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
1 _# ?: b. V. E% wEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */0 g5 r$ d9 a. ?% J
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
) E; R) u6 j& h/ v- C( J3 UMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
6 `6 {$ F$ x5 x) Twhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */, l7 T# C  u  Z5 P$ [  @; {. u$ y
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
+ @$ V- N1 x1 d' wMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
) M0 N" K) n  F}
+ l4 f* y0 y6 }9 y
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

* z8 a5 s6 M* t8 X; y' c( Z9 m) D. z




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