嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,: p% l2 Z( V9 L: o; T: N
input mcasp_ahclkx,
, ]1 K! k6 N( G' w/ oinput mcasp_aclkx,6 Z5 _( j& V/ v: _4 c
input axr0,, \8 e0 e1 @; g( m6 T
+ {* F9 @1 `: k* B, z5 k' z& Uoutput mcasp_afsr,) C0 W6 g( R, D0 i$ ?% k/ c: V
output mcasp_ahclkr,9 A% a5 `/ E6 D# ?; P
output mcasp_aclkr,% _0 G, ~' ^0 E
output axr1,
5 ]. @/ I2 i! U1 e' ?6 H
assign mcasp_afsr = mcasp_afsx;* z; f. s; s: A0 `2 y8 c3 C
assign mcasp_aclkr = mcasp_aclkx;( u. D5 \: ~$ F
assign mcasp_ahclkr = mcasp_ahclkx;
+ m7 o @/ j+ A# Wassign axr1 = axr0;
0 ^$ }% f: |# ]/ z A! j
" I* M9 l8 S, }+ ?2 M在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
/ I7 ^/ F4 X; q7 U3 o+ \
static void McASPI2SConfigure(void)
# f, Z( y$ n6 m9 d" d, m{
2 r8 y2 Q: g( oMcASPRxReset(SOC_MCASP_0_CTRL_REGS);; W" U: D3 L% k! e1 ^# t9 P
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */6 y* F" R( t- D# o8 p1 i6 y; o) ]
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
& B0 W ?! V; q0 Y2 {+ ~& p6 Q6 HMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */4 k* V0 z F$ W$ t- U& g
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE," a* D0 K* i9 q5 X4 ^
MCASP_RX_MODE_DMA);
4 n6 t; Z: A: Y B- [% A* Z7 b. gMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
" s5 }) G* s+ O* ~2 b8 g& lMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */" V. ]5 m1 e+ _: L* f8 Z/ S% }
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ' P4 B3 S8 \" l, e
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);5 a, Y- g) a2 f7 x3 z/ {1 v" p2 E
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 3 y' ^( S) \ h) ]1 w
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */* H3 H8 r. ]% g
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
: L5 O6 G! u! z' v- l* NMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); " V/ z- L/ p' d1 L4 K) l" }
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,2 y0 l1 i. E- ^4 `! G
0x00, 0xFF);
/* configure the clock for transmitter */
* ]1 X9 `& @. X) D: r. SMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);) G0 t' {" ?! ^6 T
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 6 x& L. T; {4 ~ }8 j
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,& }1 [: B% Y" L. ~
0x00, 0xFF);3 u2 I1 J% b8 c, h( ^* `; ]; r
' C; j$ D$ x f# [
/* Enable synchronization of RX and TX sections */ ) i; B% R7 L; L% `* O4 L5 F
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
2 I7 g; ~5 v# rMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
: R. k7 ?4 {8 u# ?( LMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*/ L$ P+ b6 }" k3 c( H
** Set the serializers, Currently only one serializer is set as4 D7 T) Y7 Y* I4 e; X* J
** transmitter and one serializer as receiver.
6 z1 f- J9 G9 w2 A. }" j*/$ X }/ c( \* d! T+ [9 e
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);: {5 s# u( n1 v7 X* n) y
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*6 B. W4 g) ]8 }, r+ ?# q
** Configure the McASP pins ) d0 |# k, d2 V2 E
** Input - Frame Sync, Clock and Serializer Rx h8 U& y4 i+ |. W; u' E' }
** Output - Serializer Tx is connected to the input of the codec
" A7 S0 c3 U6 W. ~; A2 T*/2 N0 y) e* b1 Y1 ]+ I9 r
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF); {2 ]( q* I( m6 K
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));" k2 s7 s3 B2 c1 g" }7 i
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX( `* E# v6 w8 @- D
| MCASP_PIN_ACLKX
3 `8 }: |, O) H$ b, O; ?1 }# F| MCASP_PIN_AHCLKX7 n: P* ~( o+ h% l
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */( u" z' b) K* q; r/ I9 w
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
3 A- K" i8 B" t+ e2 Z# D| MCASP_TX_CLKFAIL 9 K9 i& \2 t- Y! E3 _4 l2 x" a
| MCASP_TX_SYNCERROR
6 I5 T0 Y' F! q/ E1 l' q| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR |2 H' p% z: L: G, F; y. z1 L- V
| MCASP_RX_CLKFAIL
- q7 \. I/ Q6 W* P, ?6 V2 U2 W( i| MCASP_RX_SYNCERROR
) r. B1 `& R! E% f8 z0 N| MCASP_RX_OVERRUN);. ]' }4 H3 G" r; c, u; |3 M
}
static void I2SDataTxRxActivate(void)
9 J, `; g' z! m7 P5 y{
+ s5 T' Z3 r+ {5 c Y1 G% {/* Start the clocks */
, |( o5 c: V8 e$ L% ?McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);/ ]" y" A& z* f8 h ?
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
- x1 G/ Y& j7 k# U0 Y' aEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,: a/ ]( H# h' n5 K7 _/ {
EDMA3_TRIG_MODE_EVENT);9 z, D) ~+ t7 z% |; C
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
: f+ i2 Y( o! aEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */! O0 B; f$ ]2 H: [9 W" O$ V
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);/ c% Z- U9 \! F# v! @
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero *// G# f J' | g, t8 u
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
6 O4 J/ G& e* @4 R: ^( WMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);+ |6 |4 v3 Y6 ?
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
! d7 \* w+ A* {}
. B: l! V' h4 |( U* C0 Y
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
1 Y- f4 X8 V* a
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |