嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,6 L' q- ?- b# l8 x4 h
input mcasp_ahclkx,9 H6 j' J9 i, y8 i z+ l: d
input mcasp_aclkx,+ H f; F" R m1 Z( n d
input axr0,
9 \, y1 n% O. {$ F& N( @% w% ?" G+ W
output mcasp_afsr,: c; W+ z0 o1 j& D
output mcasp_ahclkr,) {- w/ _! \* S5 y* _7 _- y
output mcasp_aclkr,, @1 ], [) D& x! n5 h! v% Z2 i
output axr1,8 o$ q F V2 y2 L# N/ ^
assign mcasp_afsr = mcasp_afsx;
W) i5 q+ I( D4 Yassign mcasp_aclkr = mcasp_aclkx;3 v# b2 ?, j' l" M
assign mcasp_ahclkr = mcasp_ahclkx;+ \3 c$ K) K3 E% L& g
assign axr1 = axr0;
7 l8 g5 C# [3 B# V% E: B: |1 t
! ^, b6 }5 d- ?: Q0 _
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
* u+ @7 g8 p- k* |8 vstatic void McASPI2SConfigure(void)
! p8 X- W$ m" c% B# N3 m* R+ m4 X9 ?{
. x* M" J4 x. DMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
4 \' o% P) G- |* d" EMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */0 r8 d( ^; }- x5 X
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);: }2 R/ y1 {# A! o# m+ O
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
' v( j7 l! l! R& }) m$ ]& Y# }McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,: {5 w" ~( J3 l( d5 U+ `# t7 n$ n- o
MCASP_RX_MODE_DMA);
: z* l5 ^' E3 p3 uMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,$ @" E4 B8 H7 r8 \/ l
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
% Y3 F" q! H! F- zMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 1 J) h l! \. |7 Q! ~$ N
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);2 Q" n& `* ^2 L& b! ^
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, # K$ N) ~! ^3 L" D6 \% U) h$ r
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */- H8 l7 w/ N1 o, h, ~: U! k
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);9 C2 F% J( `1 `- B
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
; N% q% x6 D8 P7 k0 g u* OMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,2 ]2 v5 n7 Q% E, s$ U$ P
0x00, 0xFF);
/* configure the clock for transmitter */% ~; G, t4 X/ j/ ~# a% t8 `
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
3 u1 r- H/ d2 ]7 S6 x; @$ SMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
! n+ T/ s% u9 u6 D! }$ j4 pMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
0 F- P2 B9 Y/ Y0x00, 0xFF);
8 Y2 i7 a7 C( P* t3 _# ^$ ?4 H! x; i3 Q' c2 {0 i% J3 M7 z
/* Enable synchronization of RX and TX sections */ F, K( e3 k: \' B" K2 Q
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
; q1 N* W% p- X7 uMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
! q4 `0 \7 a* S7 gMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
& k" e3 q* L- ~8 }1 f** Set the serializers, Currently only one serializer is set as3 L* b* ?/ |# m6 c' h" E4 s/ J' {( d
** transmitter and one serializer as receiver.
: C1 V! S& H* F+ c& c5 H! ~2 o*/
& p% j1 F& p; b2 {4 ` ]8 \McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);5 H" ~1 p; p. u- N( a0 X
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
, K' T, }% m X4 R" ?4 h' b4 @4 y7 r** Configure the McASP pins W* B9 O% F1 x8 @( l4 p
** Input - Frame Sync, Clock and Serializer Rx
7 Z! p3 i2 H v! O6 s3 a** Output - Serializer Tx is connected to the input of the codec
: q. R9 T9 B4 B/ j*/
' v9 f" x% x) P( @& L8 L4 K( gMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
! \2 R+ G/ o5 q lMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));& D8 f. G4 t% V
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
) U' [0 a( G _3 G9 x& A e| MCASP_PIN_ACLKX
% Q8 L5 K4 P5 x8 Z/ I/ I6 X% ?& r| MCASP_PIN_AHCLKX
% Z( Q! l0 j; X# ?" u| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
% L5 Z( j8 M- T4 i) p. {McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
6 q/ u {5 \0 \! _5 o$ j| MCASP_TX_CLKFAIL
k* P/ o7 [. p$ h& k K! H| MCASP_TX_SYNCERROR
$ j& z9 y6 [+ N4 S| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
) G' t. G. P7 j# W3 ?| MCASP_RX_CLKFAIL
) z3 p" M7 ? R& j& V| MCASP_RX_SYNCERROR
0 f5 H0 L& I; P+ w| MCASP_RX_OVERRUN);5 V6 s9 W, w$ y5 E0 Y" @& T
}
static void I2SDataTxRxActivate(void)
$ j7 w- U# H9 F* |; g3 U{$ z" K: r0 B5 i4 F
/* Start the clocks */8 V' }6 t; G( o2 Z$ g" O8 g/ P
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);- W6 {6 X) Z2 F* F% V
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
6 n \8 F7 Z* |- @" C, REDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,) c: j3 z' M; N9 t3 i
EDMA3_TRIG_MODE_EVENT);5 E# B# ^+ F! I. u7 n2 u
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
. V. T4 v6 m! ^9 H" }/ tEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
1 _$ u8 t; @$ M" V3 YMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
/ Y H' r- u& o+ q$ m, B3 mMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */+ ^9 c- T7 f, s3 v7 l3 k, N& |/ g
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
# X# ~8 {- b* c( B' s3 r: T3 JMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);7 k8 w/ q" A) H: I
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
* \9 A: b3 X" c" D1 D0 [5 [}
- i' _. G' G; z1 F1 k8 @
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
{/ Q( T' @/ l
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |