嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
5 R2 c; \: M, q# j' }4 R+ uinput mcasp_ahclkx,
$ f- N* K7 k' t) q yinput mcasp_aclkx,6 s( o+ b" [3 {+ H% k9 W6 I
input axr0,5 [$ Y* W8 w3 Z' w; ^* W
. ~6 p2 Y, a! I+ D$ X% i8 j0 B, Routput mcasp_afsr,
( X; D- d5 D) o0 ~* v* foutput mcasp_ahclkr,( L8 r1 `3 U& M' A. ?' l
output mcasp_aclkr,' p! f; [: D; D6 m! J6 z& v6 R5 `
output axr1,
; C+ |3 {# L3 t. J: k
assign mcasp_afsr = mcasp_afsx;* R x0 G- G) ]1 ^
assign mcasp_aclkr = mcasp_aclkx;
0 r6 h2 q( g _9 e$ Tassign mcasp_ahclkr = mcasp_ahclkx;" j* K7 a s# g S3 C) ^4 ^$ B3 ]" x
assign axr1 = axr0;
" L; O1 k9 P% q% U/ t1 ]
0 }. y1 L$ A( c# x
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
7 e N m& H4 p4 d0 q" w- B
static void McASPI2SConfigure(void)! V! e. l. f' l. D; {* O% c- Q/ A
{: c. J; e' q7 \ d* z
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
; q% U9 w$ d( j$ j; x0 X9 t& ]McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
/ {$ X1 A9 C2 c3 N( [7 @6 H; _McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
3 X. c1 m6 O# |McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
# L, J' h5 ~( Q# [' VMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
# ?" p m7 j; Z" K7 [8 ?. F* _4 PMCASP_RX_MODE_DMA);
! O" @. O* |' EMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,# a3 k3 q" H4 B. m" ?) h& v
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */3 c& Y$ p) {) H8 X: ~% V
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
2 ~9 C( x8 h2 w0 |/ AMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
; g) o8 g% M3 k( ]( sMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 5 N- x# ~( o, [8 Q1 i. B Z% @
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
8 \% I0 a1 J- W9 G/ ?1 W7 `! R7 OMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);1 y. o3 U3 x0 g. ?( x
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ; _0 J0 m1 z; l h- C0 R5 h
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,) a+ q+ w# d* F, V6 J/ q
0x00, 0xFF);
/* configure the clock for transmitter */; P0 Y. k- X, @+ U6 i& O8 K" w
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);7 u. \5 G# ~% E$ t* N/ d9 [
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
}& f) @0 H& Z$ w# \; J+ JMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,8 q' u- J* E" e7 t. H6 I, G
0x00, 0xFF);# L& f* T) ]7 Y/ [& n0 ]
" w6 r) Y3 A- h1 x! u
/* Enable synchronization of RX and TX sections */
: h- V) q9 K! `7 v8 qMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */% D& K. f% |6 ]6 U5 M
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);! C$ z4 t/ O. {; s7 m8 E
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
( _7 n9 `1 q( J) O" {** Set the serializers, Currently only one serializer is set as
4 b: c4 R, M7 [& X \0 I+ y k** transmitter and one serializer as receiver.
6 U- G. g) r- N+ N*/+ o0 f$ K7 x1 P
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
% Q0 C/ ~3 d+ x: [& Z; fMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*+ I$ I$ \2 _0 Z; X
** Configure the McASP pins
/ |$ V1 I& k' \) p% Q7 z9 ~** Input - Frame Sync, Clock and Serializer Rx
* }0 S) Y5 w# u6 x+ ~" x** Output - Serializer Tx is connected to the input of the codec 0 ?* M o* n! Z1 |- `* S
*/
4 C% E% C) L/ S% pMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);/ L8 i4 z1 _, q0 T U; q; i2 ?0 l0 R
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));* c( K/ ~* f/ Z
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX% t4 B8 m8 J+ T/ h3 ^: C" U
| MCASP_PIN_ACLKX% |% B. b+ V; N; u+ V3 Z
| MCASP_PIN_AHCLKX
8 y8 C+ M3 D8 \7 @8 A| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
! ]5 ]1 E) M# [/ q5 M" v, d3 f6 UMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
& L1 _, _- J2 W3 ^: m5 h4 X, f5 G| MCASP_TX_CLKFAIL ; ^- o P! y! G, {$ x
| MCASP_TX_SYNCERROR/ R: p' l, A+ k
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 1 U0 H" T" w' f" ^. t% I: B; G+ R
| MCASP_RX_CLKFAIL
9 R* R* L$ P$ q5 ~* o| MCASP_RX_SYNCERROR
, B$ p" y" `) L* v$ |) j| MCASP_RX_OVERRUN);9 p1 a, K( @1 H/ w1 o& w( T
}
static void I2SDataTxRxActivate(void)
9 K# X4 `0 h( q. N: F2 H% M{. t( l0 E$ G* n% w: Y$ o
/* Start the clocks */
+ B/ f6 S7 p5 s2 R; x, ZMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);& i2 g7 ?& @$ U1 F$ _/ J% p
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
* U# j* E" w, YEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
* I7 @( K9 x, l6 n+ \6 qEDMA3_TRIG_MODE_EVENT);
& }/ h; b' T) T/ \% P4 g; gEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
1 B7 n. _$ v; J. ^. SEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers *// l c. m( Y' W8 N
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
. t5 b% k- E$ n Z: sMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero *// V+ Q& M7 g% ]% K# B
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */, y8 E4 c( _& @7 S$ c+ d
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);. ^& I0 n9 }2 p, M4 \, U6 ]; I
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);' b* h; | K& R" C
}
8 X5 h1 K# ^- c O2 J请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
) u. x/ q' h4 A a w# @ J
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |