嵌入式开发者社区

标题: MCASP自环配置。 [打印本页]

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
: @* D5 X3 O* e7 ]2 Qinput mcasp_ahclkx,' O3 R4 O9 k2 k
input mcasp_aclkx,: K6 O# V  @* s" _# ~" r% C
input axr0," P& }' V9 l- r/ d' u. R" v
0 G. |- l+ K9 [. U. C- M& m2 }4 L
output mcasp_afsr," f! X/ p" _) j$ ~& K
output mcasp_ahclkr,
, `( k3 t3 S: D; ~2 _- b& T8 @output mcasp_aclkr,6 f, ^( H/ J& m. ]
output axr1,! |  @; q8 z# |2 u0 d- w1 n) |
assign mcasp_afsr = mcasp_afsx;
7 O; d  _& B' |8 dassign mcasp_aclkr = mcasp_aclkx;
$ X& X7 a" U/ ]! U1 f. B" G. c0 b" Massign mcasp_ahclkr = mcasp_ahclkx;
* F" ~, O( c+ h7 Lassign axr1 = axr0;
, B: A, Q- u! Q% r- Q

/ u( S! ?: k' s4 [/ B
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

9 M$ B% z8 R0 d6 j
static void McASPI2SConfigure(void)
% I$ X# X+ J# W, G5 ]6 x. ]7 F{% w1 c: M" L( V# z/ m/ l4 D6 N& _
McASPRxReset(SOC_MCASP_0_CTRL_REGS);2 b1 n5 C$ T& A+ E
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
- a- {, \) d1 u* FMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);, z" ^" v: @* F* ?; u
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */) q" K/ [2 @9 n9 E5 S1 j% ^
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,3 A0 c/ [+ O: C( t: r
MCASP_RX_MODE_DMA);$ W! [- D) u: w4 z- w( H+ w- h5 L) z* A
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,1 w8 x1 p2 y7 U5 h
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */1 _' {5 t4 c# O+ T
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ' {. C5 W) t, b2 J. Q7 `5 U
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);! Z9 B- J- ~) Q2 y. u5 u1 F: @" f4 g
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
; _- h1 t& C, M  s) M" X4 }MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */2 y( [; A! f+ }
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
2 \( Z+ n9 c8 B' p' i- }McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
! l4 C- K6 H8 ^' qMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
% A  j# f. \0 l0 v: V) w0x00, 0xFF);
/* configure the clock for transmitter */2 I5 d& {! q; S  X6 \" v+ ], @% j
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);3 \, P0 D- B6 I. e$ Q/ _; b
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 3 A% ?# `8 M( n) n+ L+ U/ c, g9 H( R
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,) q2 @# a, W; R- _$ P3 w
0x00, 0xFF);/ H( B3 b+ B) z* M: U1 M
4 P8 u% i, Q/ W% V* `8 b
/* Enable synchronization of RX and TX sections */ & u* I1 H; p! T. A6 @6 F1 r; h* b
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
+ s3 N6 z+ X+ lMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);; A) |: w' F; A; O( ~2 V
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/** H  r0 k3 [1 [+ m! X
** Set the serializers, Currently only one serializer is set as
6 L7 h; `* t0 a. ^** transmitter and one serializer as receiver.8 j( {3 {, |# e6 s) E7 t+ P+ h: j9 v
*/9 b- W! g4 |* G
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
0 {( W+ ^- T3 Z5 a+ NMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
5 h1 U( v% {2 e, |1 x; ^% \! u** Configure the McASP pins * |4 H. J6 h' W% F
** Input - Frame Sync, Clock and Serializer Rx% t7 O9 q) [* n# s# _
** Output - Serializer Tx is connected to the input of the codec $ x5 r. p$ f' ?
*/- T0 H8 ?  P* D$ E, |' i8 ?# Y' z
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
. W8 g: z; D' U2 t1 a, ?. cMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
" v, E0 S7 G9 r) v3 |- |McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX- T+ A, `5 i1 b$ R# u& ]4 f& k
| MCASP_PIN_ACLKX
% g7 G9 J2 O8 l6 ]! M) Y| MCASP_PIN_AHCLKX
% a( [! K4 X5 C: ?+ z) T| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
# P* K2 J6 }: E5 Z+ p& CMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR , l: w& n: A6 m  \
| MCASP_TX_CLKFAIL & Q/ Z* b) z, d( T. e5 b
| MCASP_TX_SYNCERROR6 @" T$ [, `/ R8 m/ g1 C, `
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR ! ^: u* k! k9 h' r# G: w. e
| MCASP_RX_CLKFAIL. a% H( z, w# z
| MCASP_RX_SYNCERROR
+ p9 E3 Z: `+ t% d# r; r" B3 M2 Q| MCASP_RX_OVERRUN);/ c6 R4 D, c, G$ z& K
}
static void I2SDataTxRxActivate(void)
# k+ r' W6 V" ^# H{! B' A( U( U) Z7 _' B
/* Start the clocks */: L+ q! b' T' `+ }4 W0 G3 R' D, e
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
5 a( D* ^' y5 t* d  [. AMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */, u1 M1 U/ r8 w; B# z3 m( `, Y$ A6 V
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
* C, h9 e: S# L! n4 @7 ^EDMA3_TRIG_MODE_EVENT);
% p/ _. A, @. r- P  |6 sEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ' `* A2 @6 k9 G. r/ V  V
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */* |/ N$ G/ _- |0 y
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);3 A5 z8 N4 B6 n/ K( x
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
2 u; ]' c5 k  _- v  s5 cwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */. \( O; l* l6 t! ?9 {3 e6 g5 ]
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);& q6 n0 C2 [  Q  D, A) U
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);5 c' F: Z9 a+ }4 M$ Q, D
}

3 P8 v5 T$ \4 Q7 Q7 s3 S
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
/ s7 V3 B0 R2 o0 c( j/ }$ g3 F





欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4