嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
) p3 J3 g6 ]- |* `$ Jinput mcasp_ahclkx,
* g9 o; ]+ g4 S3 H6 A7 _" |input mcasp_aclkx,
8 ]# h, s3 b: W6 j3 V3 z2 ninput axr0,
& B" H' o- q! [: {3 Y* X- p* p& q% p8 f
output mcasp_afsr,, c! W/ R" B% e1 `3 E
output mcasp_ahclkr,. }# j( p, T2 @2 w
output mcasp_aclkr,
, s) x8 w6 u0 b* n" J& P; k$ @output axr1,3 h% X9 F; N5 D2 \4 ^$ o* E( C2 @
assign mcasp_afsr = mcasp_afsx;7 r( M$ a" K; r' g! p
assign mcasp_aclkr = mcasp_aclkx;
3 ^: m- P' u( B% M6 d9 passign mcasp_ahclkr = mcasp_ahclkx;
9 |" {$ I* X. } U" `" [6 cassign axr1 = axr0;
& \( ^, g6 g. U2 L$ B! T
# w. t ?/ |' Y% ]2 K# y. g在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
- t9 p0 c5 A: _. q/ \
static void McASPI2SConfigure(void)) r2 B G# O2 s" t3 k
{
" r$ f2 k3 L, o2 ^8 R' T" WMcASPRxReset(SOC_MCASP_0_CTRL_REGS);( ^" |+ S' s w' J+ w, b# O: s* K* Q Z
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
" F3 b) k" C- K8 }9 RMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
' N5 H; g; X/ JMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
' {; d0 C4 |4 ?$ h& E; UMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,4 r( o N' C E8 m% p4 t, \
MCASP_RX_MODE_DMA);
1 C9 d- A E! Q- `. @McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
2 \" S! Q6 N* e; [MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */0 z0 D% J5 l% T1 Q
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
, h; w9 |- m/ hMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);% m ~! O# {8 v
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
, {: |: J9 g" Z/ `MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
9 y: q( @% }1 n$ l8 ~/ r; i7 WMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);# o& o* W6 a( g( }8 k% Y% Q0 ?; ^
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); $ W" H+ b2 n6 D$ G+ e
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
& X K7 U4 `' Y- L: [0x00, 0xFF);
/* configure the clock for transmitter */
1 J' O4 Q: r( oMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
5 P5 c" e1 `( z6 q: B3 ~McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); - a0 _! }3 I2 i' P- M0 d
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
2 T) \1 N* \( l1 c5 N0x00, 0xFF);5 y3 ~" c" O. m
6 R! v. r7 T5 V3 B f
/* Enable synchronization of RX and TX sections */
8 Z; g% J; }- `" zMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
2 l- G8 V H- @ B* d7 A" ]8 P) H) gMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
) u& U) U, Q. Q1 `' [ GMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
8 N$ X& b( b0 P) a** Set the serializers, Currently only one serializer is set as
7 C+ ]2 G! T* Z$ I$ {* }** transmitter and one serializer as receiver.
6 E4 R# y+ y" t4 u( K*/( H' W& ?4 n# }1 u
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);* p- M4 {% [# j& z
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
- q8 ~8 s- G8 c5 ?/ P i, s) k; o** Configure the McASP pins # w3 ^* W2 O( i& `1 o+ _
** Input - Frame Sync, Clock and Serializer Rx2 z F# [" w9 y
** Output - Serializer Tx is connected to the input of the codec 1 }, b. Q- j" | N: O2 r) } n
*/: ]: E0 C6 }: x- A+ t/ S: h
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
3 s2 Z" h( Y6 ]* {( L# tMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
9 j* M' C0 u: N& d/ V7 t; bMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX5 Z: _4 `/ Q6 p' K+ w9 K9 d9 i1 t
| MCASP_PIN_ACLKX% Q0 |. f$ s+ w
| MCASP_PIN_AHCLKX
! G) A7 i$ Q2 h, k| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */) s" }; B, c, Q. b: ~
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 9 B, v8 d% O' O' } Y
| MCASP_TX_CLKFAIL
/ Y# a: C2 d% q| MCASP_TX_SYNCERROR
4 u* [4 a1 n- o2 U1 J2 A| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
* `3 M* Q! u/ X! J7 j) j| MCASP_RX_CLKFAIL
' s4 `1 U$ E. R| MCASP_RX_SYNCERROR
* x) Y; }6 Q; g| MCASP_RX_OVERRUN);
' O: V5 C% J) F* E( ]- ~}
static void I2SDataTxRxActivate(void), i/ H# G+ d& r: E$ _' S" n1 w$ j; c$ R
{
! N( q: K& W; }% E& O4 e/* Start the clocks */
. {" H, U- s1 {. @# ~: p0 ZMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);2 P w7 F0 }$ X4 ~- c( I
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
( ? ]; g3 j1 Y' B' vEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,( X3 d+ }! ]# V7 i7 ^" s8 S$ n4 h3 H
EDMA3_TRIG_MODE_EVENT);. M+ i& ]1 g# i, r. H0 }
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
/ u* s; B5 L) `' O3 iEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */& C6 S6 X$ l% ^
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);3 e+ Q9 B6 w6 ^ i% f: s6 R6 M
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */% g; Y' `' ~2 r% A( l P4 V
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */" ?; [" M7 m1 X+ r! k% w
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
# D, X* q7 A& v9 {" l ?! f5 m' }McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
2 }( f( [* @7 G" g$ h6 }}
' a5 L9 A" u! t o. I请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
% x! F' _- k% c# w S+ C5 o
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |