嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
4 @+ B/ g: e% [, O5 Zinput mcasp_ahclkx,9 T0 B2 L( L3 t. q
input mcasp_aclkx,! c- T0 ^. w6 m
input axr0,
& B) c. k& }: W/ u. d
' }5 D  d. `& N# P; \9 L2 P- I' x; ]output mcasp_afsr,: Q# Z) n! e3 e% [) ~# S+ n
output mcasp_ahclkr,
" d3 P( H, H. s- u; q# s4 \# boutput mcasp_aclkr,1 c0 u& [9 E8 k1 ]8 L" G
output axr1,0 ~3 s$ ~5 d4 b
assign mcasp_afsr = mcasp_afsx;) [/ u2 k% Q5 y( b
assign mcasp_aclkr = mcasp_aclkx;# M2 l) c. r6 M& ?/ V$ A. C* f
assign mcasp_ahclkr = mcasp_ahclkx;( N% u# \2 J" R5 Y" B
assign axr1 = axr0;
9 Z1 k1 \* o; m# P" ^: N# e
6 N& b, |4 T& w8 z: G" c
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
) O0 U: |8 d. P+ W
static void McASPI2SConfigure(void)
! H. O5 M2 `2 I3 `+ Y1 F) d5 k/ d{  D2 @0 p6 k9 G& |
McASPRxReset(SOC_MCASP_0_CTRL_REGS);* f. U8 J" |& q- G5 d  \
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */6 g- X9 Y' `/ ?9 o" `
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
4 Y9 |1 @' |. o" |5 tMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
/ m+ Z6 P  n5 S. M: _McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
$ {6 N6 K9 w5 w0 C1 Y$ {; @MCASP_RX_MODE_DMA);7 v0 D0 y3 E2 q% J  Y# g
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,* g& {) S  J: L' {  z( C
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */1 V2 S; y4 H" P# I+ N9 V& N5 {0 x
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, . m/ \" E4 o; E$ g3 N, ^
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);2 j8 e  [- j0 a9 P( x
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ) L4 Z! I2 r3 c# \3 f
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */1 t7 o6 x7 r) v2 @
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
' {# K( z9 Y% p. pMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
  r9 z. J* i) R4 MMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
" P0 N% y4 q; P& B! r2 W0x00, 0xFF);
/* configure the clock for transmitter */
. q' x) P/ @& d" z  g5 R, ~McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);# F7 e1 A! E) \+ s- E: U9 Z% d
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
; v* `8 t- U+ K( D$ m2 ^McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
3 X4 z- p) ^( e  ~+ [0x00, 0xFF);1 w. q  c% C# j' Z! \* ~- x1 I

6 b7 \; C+ H' r' v7 B# }/* Enable synchronization of RX and TX sections */ $ M: f- q; Q5 F  m+ b6 {5 A; {" _
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */" W' T4 j2 x! o7 W3 I( Z" u2 l
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);3 X& _( \4 X" h) L
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*; S5 l3 B& V% O& u
** Set the serializers, Currently only one serializer is set as
& W! e. l8 }# K4 ?** transmitter and one serializer as receiver.
$ |6 [1 {5 \% |*/
% d+ g+ T! v  M5 L5 c0 GMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);4 L$ Z' D5 H) n" i4 U8 s4 k
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
  E2 q5 e$ g1 Y* t) q** Configure the McASP pins . \1 c% M" c+ i) i5 }$ b) i
** Input - Frame Sync, Clock and Serializer Rx5 S5 ^2 g3 g4 T. J6 w5 b# K
** Output - Serializer Tx is connected to the input of the codec
/ Q, J# N8 W3 g" V3 n& k*/
4 ^6 J9 Z# n2 c0 F) Y0 KMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
. j3 |6 A; p+ B: h% YMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));% x, Y+ _8 C0 ]8 a! q
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
; Z, J( r2 C0 l+ s. A| MCASP_PIN_ACLKX
, g" p) d& V) B! H6 K5 S& f1 q" S, s| MCASP_PIN_AHCLKX
' z8 l7 H4 t  d; S( Z0 }% A  ]# I| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
9 l; T9 C6 a/ k4 qMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
5 ?( t$ d1 @! t8 l: x| MCASP_TX_CLKFAIL
/ P8 T& b5 l1 F| MCASP_TX_SYNCERROR
5 c- d+ q8 t+ F5 j| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
" z. ]& |2 C9 e: h: k| MCASP_RX_CLKFAIL
: m4 a/ h: B+ Q% p; o) _| MCASP_RX_SYNCERROR # y4 G9 m: ?, ^1 ^$ f0 r
| MCASP_RX_OVERRUN);
/ ]8 r# g) c2 `}
static void I2SDataTxRxActivate(void)
/ Z! c! C- J1 v# S0 J{
  ?9 m, z, ?! r  t/* Start the clocks */( t+ t- s6 e+ i2 `
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
  {0 z3 l, C( A* g2 \& N! wMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
4 ^" I; N( O7 `" @; y% SEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,2 U7 H5 I  _, n& Y* ]( {3 |
EDMA3_TRIG_MODE_EVENT);. y7 _7 w3 V3 a$ K
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
  z2 Y  \) J2 o% E( K) MEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */9 h5 s8 f0 ~- B& C1 l
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
" d; |7 d0 _+ e, sMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */7 u5 t6 ^6 M/ A4 O8 [8 ~1 H
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */+ q  b; v- }+ \" ?( z2 Z6 o- [4 ?9 U: d
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);& U7 |2 o( E  r' t
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
. o" P, ?6 M' V2 E& u}
/ S- G8 B8 \6 n: W( p+ a; E% u3 a
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

0 p2 Y5 V$ a9 e6 Y" m




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