嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx, T4 l% }# D5 `4 ?
input mcasp_ahclkx,
/ N: \; Z6 O$ r. X% @2 [5 {input mcasp_aclkx,! _4 ~+ p) m- Y6 E: Y9 U; n/ W$ Z
input axr0,0 J& f4 O# ~8 H: [/ Z( V+ p3 p
' ^% ?2 ^5 [1 |& s5 soutput mcasp_afsr,3 w- W, N) @0 w
output mcasp_ahclkr,' _' h9 k: N2 O& ?/ k' }
output mcasp_aclkr,
# d Q- T" c( m& O: A6 R; goutput axr1,
3 n. r* a5 @* H* ] p) P7 {
assign mcasp_afsr = mcasp_afsx;
) ]2 q; M" _1 g& Xassign mcasp_aclkr = mcasp_aclkx;9 M3 i' ], I* U# Q, E
assign mcasp_ahclkr = mcasp_ahclkx;
$ ^3 B0 {8 }( l$ iassign axr1 = axr0;
9 K& u3 {3 V5 b& `$ ~# F
$ e2 m! E9 Z5 h
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
2 j6 Y! L" e# @5 e- s0 Z* s
static void McASPI2SConfigure(void)
/ M. T2 ?7 f/ {1 i0 \{
z a, H* ?* i5 v& p. q, p. xMcASPRxReset(SOC_MCASP_0_CTRL_REGS);2 _4 t% Z/ Y" C
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
* ^5 m ~: ~& l" j) C, PMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
( X" _! O: ] _5 EMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
4 J' O/ F/ C( Z& C5 \McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,+ r; n% k* w8 z* B9 B6 E
MCASP_RX_MODE_DMA);4 E* A: R# \% E+ O0 {. w5 j
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,- p/ {# h4 b9 t0 L
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */9 O; a$ v; ~; ?. u c
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ( T) R; ~# d7 ^( r
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);$ n. ^- s, I* p
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 1 i% H1 t5 a; }& T; u1 @
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
% @; |/ r* Z( [ V+ H. bMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);0 ~6 K7 |3 o: H$ E, U/ j
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ) o- l1 ]# T' ^5 J
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
$ R4 G9 i6 G) h8 u8 v# ? x0x00, 0xFF);
/* configure the clock for transmitter */
- l; E% v. _$ A5 b% T( TMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);3 |) e, b1 d3 N9 O; C! D t5 H9 D
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 9 r, D; `) S5 Q6 D7 h" O7 N
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,' r3 V t- A! l% \
0x00, 0xFF);. b. V* I" Q ^
( u; R7 A7 j1 J: B+ b
/* Enable synchronization of RX and TX sections */ $ y) B& }* n0 a+ ?( C! Y
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
0 z6 F2 Q8 f- yMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);# o; {# ^* i: j0 X" D- k
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
0 s$ b2 W" G) p. O2 ~** Set the serializers, Currently only one serializer is set as
h5 _ Y" A. U* u- j** transmitter and one serializer as receiver.0 L( |6 ^3 I# @4 d
*/
( C% A2 {5 d! pMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);9 X$ j; ^6 V, z* ]6 G
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*2 _5 j' y! Y2 ^" H) R2 Y: @6 B
** Configure the McASP pins
6 ^8 L6 ]6 K2 D0 \' {. [* w8 ~) z" ]** Input - Frame Sync, Clock and Serializer Rx
8 U& E; i) Q4 v2 ^! h" h+ O** Output - Serializer Tx is connected to the input of the codec
( B1 V7 I5 F5 U/ T, K*/& ]' a9 S/ f7 _; w. W. D/ ^* e! l2 a
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);6 Y" l: p/ d5 i5 p1 ]+ x) c
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));+ ~, n* Z F( ^8 F6 N# O5 G
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX3 m( G6 O7 b& a( E' Z
| MCASP_PIN_ACLKX' T+ i+ g. ?* d
| MCASP_PIN_AHCLKX; S: u" M& V( r M- F6 [( V0 V6 I
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */, K# ~4 C3 l+ w9 y/ I
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR $ p" o/ a8 K# }! E- L1 [& N( n9 U
| MCASP_TX_CLKFAIL 1 K6 U$ Y3 J4 \5 q6 P/ d c) N+ u
| MCASP_TX_SYNCERROR& j( q P' h8 g. ^% y( E
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR / \9 ~5 L4 P9 }8 @% e" J, s" G
| MCASP_RX_CLKFAIL
* U! k6 [7 d$ v7 @; b# F| MCASP_RX_SYNCERROR 8 u4 _; N) ]# j2 g& I9 q: g
| MCASP_RX_OVERRUN);. _! B- B0 \( ^ t# G
}
static void I2SDataTxRxActivate(void)
0 w; K" i4 T4 _' w) z) a9 W{
+ v2 }. ^4 i7 _* D; S$ ?% z/* Start the clocks */
- {+ o" q7 W5 a. l6 EMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
! {0 r* ?" n* Z- ^8 W/ f3 sMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
0 J; l0 @2 l+ Q' W! OEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,7 Z. v6 r1 s' d2 e6 r- _
EDMA3_TRIG_MODE_EVENT);
$ \- y# T0 [/ v' N8 KEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ' y$ u% ]6 b T
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */! a }! n$ ]! }0 h6 S
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
: Q8 Y* [& V7 {. j4 M2 d/ [/ R* XMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
& V4 }7 ~& A e: Z! lwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
% w9 c2 u% T7 B- H+ o0 z$ n* VMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
# P& P' m# P7 ^McASPTxEnable(SOC_MCASP_0_CTRL_REGS);7 k" J0 d2 P7 p' L, x
}
) \) Y* x8 q8 _( p' n4 i: Q
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
: b9 c" w4 G6 q1 \) C* C' V) r& J
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |