嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
& y U0 e5 x+ {6 `3 ^. ?& ^ C2 r+ u9 g. Ainput mcasp_ahclkx,9 `0 u+ X. D# |7 X8 g$ s+ l
input mcasp_aclkx, M" u) D& a2 t
input axr0,
6 V) B6 g/ y) y/ G- |* r# G1 {" U- x8 S! \! Q: h/ m
output mcasp_afsr,: j; ^1 j/ d3 ? f1 U* c8 b9 F
output mcasp_ahclkr,
6 x! P! ~) K. |! [& e' @# l4 {/ ~output mcasp_aclkr,
$ L9 Y1 O8 p! uoutput axr1,( R) E& l( H3 [4 a$ Y
assign mcasp_afsr = mcasp_afsx;
1 C1 C; O" v/ }, Q. e2 B' Z0 iassign mcasp_aclkr = mcasp_aclkx;
( m1 M! ~. ~& m7 `assign mcasp_ahclkr = mcasp_ahclkx;
7 K3 e5 U$ E: zassign axr1 = axr0;
; T& P" y; R/ A& \' L) S, r
, r' ]1 q" Y. |+ T
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
9 ~& r- J n6 o2 Pstatic void McASPI2SConfigure(void)# n* i& v9 o( H" p
{" X7 }" C1 x& l$ l0 [ R
McASPRxReset(SOC_MCASP_0_CTRL_REGS);$ G$ q9 X& e/ W6 g- H
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */% ~% ]! T) G0 T5 P* k$ h
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
8 L" T0 c' i" M# b) pMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */6 d7 I9 k( A) r3 L6 Z* B3 ~' b
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,1 D1 T1 \8 k8 o5 q* ~1 M
MCASP_RX_MODE_DMA);# @2 E+ j2 a8 h& u! O* p. W
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE, `3 l& t% B9 t% c8 Y2 p* l
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */- [, q+ h; e; D6 f8 r o
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 4 y4 c- B/ M9 z3 Q! R- w3 ^5 z; w
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
6 {- s) p" C9 q6 _, n0 @2 cMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, " n- `+ R b1 w* w; m$ l8 ? Y8 v
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
" M- U, D3 Z3 m5 LMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
( L! w6 Q1 C# R' I! CMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
g& F o0 u+ x3 gMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,) S, D9 S; K7 w' k+ V) C
0x00, 0xFF);
/* configure the clock for transmitter */
3 f% S1 ?% [7 BMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
4 Q8 j1 y2 s. `! z3 n: K0 mMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 1 L$ d8 e4 ^2 H) {
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,7 V8 S, x+ X9 G+ T0 j% D" H' s
0x00, 0xFF);
8 m( H, A. A4 [7 O- [8 F( U
& R$ q; Z! f! e/ E3 m- y2 F/* Enable synchronization of RX and TX sections */
8 u/ d5 Y' N4 G( O, V, }) L$ G3 ^% sMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
6 G& k0 L# ]$ [, [/ R0 C: K0 QMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);. d+ x( S6 _8 {2 e* p" D
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/* _& s9 r& S# P
** Set the serializers, Currently only one serializer is set as9 m$ G1 f1 u5 r d! H! |0 Y# ^( `
** transmitter and one serializer as receiver.9 A" y- f& v5 Z/ l3 n) o5 k$ x
*/! x& l. X$ t5 I+ g8 y9 Z
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
, c4 l3 K$ e5 ~" R. z: d# ZMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*% }0 j9 z$ D% W v) c7 q/ V) [
** Configure the McASP pins
a2 U8 k8 R9 _0 b, G** Input - Frame Sync, Clock and Serializer Rx' |5 H( C! P! |0 F
** Output - Serializer Tx is connected to the input of the codec - n. ~! J4 y( J7 c/ {; w$ u
*/" J4 _* b8 u2 R% X2 }, Z5 P
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
) d) D$ X% a; j* kMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));3 X" n" b" J( n6 W" d7 ~( g, I: ]
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
7 G* E/ F F. ]| MCASP_PIN_ACLKX m' Y7 t% w: r) e
| MCASP_PIN_AHCLKX" @ |9 I7 o! P( q& k' \
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */' \; b/ b7 j2 T3 r4 X) ?3 c
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 6 g ~- O S. ^6 w
| MCASP_TX_CLKFAIL
$ S, }0 [# P& ]" c# [* Z| MCASP_TX_SYNCERROR
8 ]1 F# F& j* g4 s9 _9 S# J0 c| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR / q4 o7 t3 z/ C
| MCASP_RX_CLKFAIL
! g$ {5 j9 ?# p| MCASP_RX_SYNCERROR ( F) l/ Z3 X+ v9 j( ?$ W' G
| MCASP_RX_OVERRUN);( }& f( D. ?/ K& M2 Z
}
static void I2SDataTxRxActivate(void)" |( a& |! x" u8 R: t- @
{; `: E( J) M7 t4 h- d
/* Start the clocks *// b( z E, n9 t7 T3 y
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
/ G, d9 l! Z* I8 ]McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
, V: x. ^" x" oEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,; k" \4 I1 u: H; w% R
EDMA3_TRIG_MODE_EVENT);
0 W9 l4 G+ v ]; {. f7 S" LEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ! ?6 E# o& E5 i/ [! Z4 v8 C
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */3 q: i7 z+ k3 T6 t; _+ {. ?+ `5 i
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
6 J! y; ^+ ?; t! f! k* A" @5 ^McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
7 O) f6 s' y- k) ^9 \# O nwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
1 r$ D, H# }' H$ iMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);; x" c' Z6 V( E# K! d8 L0 r
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
7 Q, i c* j. Z# X! c5 t}
& ]: h/ F+ { L& h& M: E' h
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
- p; E- u; Y# l4 A* E
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |