嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,% w+ J& Q) ~8 [; T$ n: X% t
input mcasp_ahclkx,% S5 H% R$ E' h5 [6 ^* J" m
input mcasp_aclkx,
: o% ~/ o5 E' o3 g4 Minput axr0,: V% R* L6 G) ~3 o3 r
$ {7 E7 ~: J' x8 {% [
output mcasp_afsr,5 H7 A0 e! B% j; }+ F( |- m# A
output mcasp_ahclkr,1 x0 X$ @6 S; w% ?" m
output mcasp_aclkr,
7 I0 J) u; l" ~output axr1,, S& P6 F7 s/ E
assign mcasp_afsr = mcasp_afsx;" G) s! m$ u# j5 k
assign mcasp_aclkr = mcasp_aclkx;0 k( T7 p0 V3 k1 ~" h" k
assign mcasp_ahclkr = mcasp_ahclkx;
- E2 Q5 g) l. P0 K; y7 Fassign axr1 = axr0;

0 I; e( ^2 ~" x  P! R& g) A! L) j/ B
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
0 U2 L5 s6 b/ b9 B7 g# S
static void McASPI2SConfigure(void)
3 h$ E1 l/ ?+ w8 j' ?9 [" p{; Y. H8 A: [3 K# h/ T
McASPRxReset(SOC_MCASP_0_CTRL_REGS);/ }8 |4 l. C# O
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
8 b9 A5 t( \6 x8 X0 ]9 h+ I1 @McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
7 d5 ~& `% ]# Y+ w! tMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
- r% J. ^* A4 W4 r' ]McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,, o8 L+ E9 N( t8 P) m* D: U3 B; p+ r' L5 q
MCASP_RX_MODE_DMA);# Z" t# ^1 M, @% h) X1 n" z3 \8 K0 a2 \
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
& h, T( \; P7 C8 tMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
# V( X) i# `6 o8 g% W# @McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, . T+ q# o. c  v) u* J6 A
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);. M2 d0 U4 J- ], ^# C( m
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, , x) d9 R7 [/ v) ?( x
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */5 a3 c$ y) X+ E" i$ t! ^1 k0 Z
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);6 \8 @7 `; F: c$ Y( h5 F- q* `
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
- x7 U  _! U  C/ l8 _; `8 K$ KMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,  |0 a0 h  {6 N0 L) y. T# a" J
0x00, 0xFF);
/* configure the clock for transmitter */
; |& w$ U. R# Z6 l+ t7 oMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
7 V$ o/ \9 I( `McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
$ E9 u# j4 M! Y# ^McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
6 n$ {8 E# e, k: q8 n7 `0x00, 0xFF);7 ?/ [, B5 u* S8 e1 U+ T
: P; f4 Z. s+ y, p( E
/* Enable synchronization of RX and TX sections */
( d3 N+ q( f6 u6 x. wMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */9 O/ P. U" L) F. |; u) e% v4 B' F* l% |
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);! j+ ]6 N- K8 [7 F
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*8 P" t2 U5 E* |
** Set the serializers, Currently only one serializer is set as; B  N# O  D; _7 R$ y. ]
** transmitter and one serializer as receiver.
' H/ ^# \) }/ Y: n*/
* Y1 E5 Z) @: E+ ]1 AMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);1 J! e; F) Q. J2 v9 I7 h, {# d
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
- E6 M" Y, Y- B! c** Configure the McASP pins
) h% a* I/ ^7 W3 i** Input - Frame Sync, Clock and Serializer Rx
, b, H  @; E5 s5 F! p** Output - Serializer Tx is connected to the input of the codec 3 N7 J5 i3 W' v2 R* f
*/
( `4 q) t* i- R. j2 r# F' M6 M! XMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);+ T1 i' l7 J6 y- K, p" P0 ~
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));# X4 T6 G. `  M9 h
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
2 i2 V& s7 {; D) Z; p| MCASP_PIN_ACLKX  K0 p" X# i. ]1 I# ~/ M
| MCASP_PIN_AHCLKX2 o# B8 k6 _- M7 |5 C
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */, t7 ]/ w; p1 Z
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
( h& V8 G( o) ^! g" {7 W0 d; J| MCASP_TX_CLKFAIL
" r6 D3 U& Y- L/ f! }  C0 [/ @| MCASP_TX_SYNCERROR2 |8 y4 p" F3 y2 H' S
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR : w4 H0 t1 F. S0 ^
| MCASP_RX_CLKFAIL# [: e% a1 F; Z( ]# a1 i/ O
| MCASP_RX_SYNCERROR / V1 g9 B; C& f' G+ N7 {8 ]
| MCASP_RX_OVERRUN);
  b. ]8 v6 `. Y4 p( k}
static void I2SDataTxRxActivate(void)
" z: R" n) v! f{
( i" {, P, ?* l  M. `/* Start the clocks */
3 ~% h& _2 X2 s; I- N/ n- kMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);' Z  z4 F: i# D1 j6 P1 R
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */% a: S( V5 L8 Y" a$ ]" K
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,* c; g) X4 O" X' m
EDMA3_TRIG_MODE_EVENT);' V5 J2 E1 o5 X7 B- S3 E
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
& r$ j4 c" a0 L) tEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers *// C& |8 c6 u& o7 e% u, A' G) C0 _
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);( K+ e/ t4 o" ?4 W. \
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */- w# M* `. B% ?
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
1 \4 q. r8 j: {* f8 rMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
5 A& D, b+ q8 h2 ?  l2 NMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);8 c* V' @* h# z; c7 X# W
}
- M: v, v, s7 G3 Q$ x/ x; x
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

) y, P  ^4 [: t  R




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