嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,8 X7 L& e/ N$ T0 {% A+ }
input mcasp_ahclkx,2 r: j$ B" f3 q r) E# W
input mcasp_aclkx,
7 v7 `& H# l9 q9 a$ l W, ^input axr0,
) P( P& W( f0 F6 J' U8 u( I
9 L$ d) \( e+ @& s( U; `, `( L1 z, Ooutput mcasp_afsr,
/ h# u+ j: f3 L3 r! z' T8 w$ ]# Soutput mcasp_ahclkr,
$ g" C4 z, \- e" B% eoutput mcasp_aclkr,7 t: D0 i E# O
output axr1,
0 r) u! X; n1 k
assign mcasp_afsr = mcasp_afsx;
$ ^# m, @0 a* B w" massign mcasp_aclkr = mcasp_aclkx;
# G, O$ j' w3 T8 f" Fassign mcasp_ahclkr = mcasp_ahclkx;
& f3 w3 @% E! X2 l! aassign axr1 = axr0;
- c, Z9 Y6 e' j5 {- w8 o# d9 b- y% V) p2 I- j$ R! M
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
2 P5 s4 T5 }% J8 V! e+ `
static void McASPI2SConfigure(void)
' n/ S3 I% e* [, [! F! j( P) P$ e" H{" n! ]7 N# n3 \ A! r9 t% U
McASPRxReset(SOC_MCASP_0_CTRL_REGS);, G% ]( y3 u% T& n8 r% [
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
7 n4 t, x: J" {' I3 [$ uMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);0 f9 l* d% E; I0 \# w0 {# @. y
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */1 t' i u$ i: a; u( W' b9 R
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
/ M# _$ B, ]' d; A( LMCASP_RX_MODE_DMA);. P6 c' ^4 j' B4 u
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
4 b. K$ }2 v A+ R2 A8 bMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */0 l$ V6 U/ o7 D7 R
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, . S- ^: [( @( S) W
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);) `$ W. Q" h. _2 x
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, % C# ^( ^; P3 y7 {7 r0 O: _/ o
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
, Y# q: a* M6 n/ O9 eMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);: k8 O7 N1 Q6 \, A
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
. W% r* O1 i% h6 g( d" dMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,/ E7 s" x$ ?% D* B+ r0 z
0x00, 0xFF);
/* configure the clock for transmitter */* G3 t& m: ?/ R+ L5 c3 {7 g
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
# H, F. F$ P! j2 ]$ R0 g$ J/ FMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
9 y4 ]2 W- N) a+ S7 s. f" U0 EMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,0 j( r- \& w- |- b
0x00, 0xFF);
4 d1 u1 V) c9 |/ D$ u8 X# u% {/ s3 J" f$ F) I5 S) ^5 K3 e% |
/* Enable synchronization of RX and TX sections */
. {2 j. o% U/ G* n+ xMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
, A! ^1 T9 p8 f. ?McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);+ _1 f/ {* c) D5 E* s
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*0 T* t \1 A# X; t; y
** Set the serializers, Currently only one serializer is set as$ W1 g! i g$ c! n8 g8 f
** transmitter and one serializer as receiver.
" o& l" a8 A4 D/ C*/
* V+ o+ i2 b0 b3 c; O6 p2 zMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
I% h t: f3 H' b0 @. ^McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
0 ^# x( B2 B! `1 k+ J** Configure the McASP pins
" w$ Y/ g$ B" F- Z9 i# q** Input - Frame Sync, Clock and Serializer Rx# O# c7 ]! V6 F. G+ X4 o
** Output - Serializer Tx is connected to the input of the codec 6 j# ?- I* r4 y2 ?1 l3 ^4 M
*/, ?1 D, o' c/ N' S' q
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
( P# m& s2 Z2 b9 K3 x6 ]McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));9 [. q( J- w$ V
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
. V# P. N4 R+ {; n6 N, l4 A| MCASP_PIN_ACLKX( ?# Q, [, l1 U2 L0 }5 N8 T2 H
| MCASP_PIN_AHCLKX* }' T: o" Y1 Q9 w% _' G
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */2 t8 g+ [, h6 j( T2 n) v
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 9 v$ W {: A* ?7 o1 n
| MCASP_TX_CLKFAIL 3 L' E6 W/ h" h& v2 f
| MCASP_TX_SYNCERROR. y# W/ X9 D) D/ q5 d) t* Z; b
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
& `. j5 Y% y: }8 o' |: U| MCASP_RX_CLKFAIL, H' c' L2 ]& W
| MCASP_RX_SYNCERROR ) A8 F7 M- f9 R8 P z( Q
| MCASP_RX_OVERRUN);
) E, ]9 H$ Z& n5 d+ M$ m}
static void I2SDataTxRxActivate(void)2 h& G1 ^! h( L- V3 }5 Q' m! E$ p
{
6 d, @: v# ]. Z5 M- p/* Start the clocks */5 v9 c( J4 z( M. a a" j: y" C
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);% \3 E; p$ z9 l8 k
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
1 ^% i" @& Q1 J" O8 G9 _/ LEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,/ e$ h) L# P! ^& v9 G
EDMA3_TRIG_MODE_EVENT);
2 a. W0 |5 O4 \: m: m& w1 aEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
, z2 q' _' f- G4 [& OEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */, r: |5 \) Q8 U
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);$ K0 w4 I$ u# v, r& z U
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
3 o9 M, _. R! n( [while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */$ D: q! p/ v1 I: B2 g- W2 G
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
4 q; |# T d9 q/ o) rMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
7 r( N5 v: R) h# o9 u}
0 e& G% m& O" S8 P; ^( x1 w
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
3 C# ^: `# h/ u! W8 l
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |