嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
' N4 G+ |0 ?$ o( ^5 pinput mcasp_ahclkx,
8 i. Q& T8 r7 n1 [5 H* l0 dinput mcasp_aclkx,& ?" @6 V; ^1 Z7 \7 K3 C
input axr0,
) [. y; S* s& G' Q' l/ v2 @$ m+ P3 d& U
output mcasp_afsr,. T- N  W( y- c) n7 I( [5 l
output mcasp_ahclkr,2 x- y6 E# a, t4 |
output mcasp_aclkr,; G; J# a6 V' Q" A
output axr1,& r" q6 _2 e' I( Y; E0 ^
assign mcasp_afsr = mcasp_afsx;
1 o8 T) v% M9 H, {assign mcasp_aclkr = mcasp_aclkx;* f+ P, m; V/ |* v0 |' X5 ]; G) p, O
assign mcasp_ahclkr = mcasp_ahclkx;
: E  I( m& h8 qassign axr1 = axr0;
2 X% M1 a, M/ ~0 v
* m8 x' O' h5 b) K- k$ \* q' I
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

% G2 O- N0 c! b+ P; \
static void McASPI2SConfigure(void)
  [) K) i; O( ^% }' q{
  p, @* C2 }  aMcASPRxReset(SOC_MCASP_0_CTRL_REGS);* X3 {' R  L! w  R
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */5 t! N- k0 S, U/ W/ L1 j
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
  r- [: k/ [" j* A' r# jMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */* Q$ g; c! M) N' {& ~: U( m
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,' }9 y, c& D- t5 R9 i0 T
MCASP_RX_MODE_DMA);
8 H" P3 B) @8 \' s. }McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
: U* o1 P# ^5 d5 p& W6 tMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */- B7 U  {1 _- _. E1 L" I; B* ~
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
& V; J3 b& C$ _  KMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);( z+ q2 |& z' H. V  P8 c
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 3 M- h4 W9 l1 e9 R: D
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */9 [$ s( N$ Z2 Z2 |: O6 i% v
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
% @9 }7 A$ R+ a1 x! f; ?6 ~. J8 \McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
) Z; R% O# r% {( @. }McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,5 X; h/ A; ]2 C( P* R9 R' I& O- S
0x00, 0xFF);
/* configure the clock for transmitter */! r/ D) L5 m7 b, c3 d  ?( l
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
# F* k  E6 Z. r* vMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 7 K' u- l6 V7 P
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32," m4 l- J7 u1 X; p' E4 u* j$ I
0x00, 0xFF);
3 W; Q2 ?+ \9 G" G  p2 `7 m5 t# }2 m0 w5 M& J0 T
/* Enable synchronization of RX and TX sections */
  r! ]1 S8 @9 W) n% w. `( ]McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots *// E' T+ E$ R2 m; o1 G4 ]) ^. c
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);" h: L# o, W& R2 e6 X8 c
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
0 |: m" b7 B$ q+ _** Set the serializers, Currently only one serializer is set as
8 Y4 w7 u0 `8 C& A& u3 M** transmitter and one serializer as receiver.& Q% F3 t/ g: `
*/4 A( O/ U' X3 q! f5 R
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);" u# H3 X" I' R( p4 V
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
" j5 p) }- i8 O0 f5 |! j3 {4 ^** Configure the McASP pins 7 J: H8 f4 A3 y1 |( ?
** Input - Frame Sync, Clock and Serializer Rx
) ~" d9 j* ~% T( |** Output - Serializer Tx is connected to the input of the codec # n2 z" f5 L3 W% o2 p8 C6 _, X
*/
6 V6 q% [2 s5 q. BMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
. Z: [, _7 N" r6 ?0 P8 oMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
( J; g2 f6 V% nMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX& n/ O/ m$ U! ~" I. [
| MCASP_PIN_ACLKX$ R/ b8 z7 B+ @+ T6 M
| MCASP_PIN_AHCLKX
; Q" U: d! X/ e% T+ P) S| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */3 h) t6 o& _9 k* q
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
& H  P" Z. x8 k5 U1 q, F+ v' ]| MCASP_TX_CLKFAIL 2 L; L+ k9 \# U$ M$ e
| MCASP_TX_SYNCERROR
/ \8 p/ u, Z$ x/ h+ m| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR ! l/ e& p; T4 s% ?  i4 g3 J/ r7 r* G$ ?
| MCASP_RX_CLKFAIL
( i" g  U! e% `* r$ q! Z+ i/ p1 h/ I# r| MCASP_RX_SYNCERROR
: d' a  w, T6 s) m* s' E| MCASP_RX_OVERRUN);! ?, I% i7 |% u& O4 t, l9 c
}
static void I2SDataTxRxActivate(void)
5 \5 B2 {! L& U2 N* E+ k8 S{
: S8 _9 o9 Q5 \$ s) N# w/* Start the clocks */( G0 o) Y' \  _$ m) i$ ^% B
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);5 k+ `! P3 l$ u9 d2 a3 b# m
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */$ p- M6 p  f+ ?: C
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
6 J' Y# U' P7 r! vEDMA3_TRIG_MODE_EVENT);
( h3 i2 C5 n( P4 C# \EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, & E% G8 y* `1 A. O$ p' A" K6 L
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */6 [( q  z, z) ^+ y* \
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
, X4 Q; f$ y/ }5 j& ~+ p/ U. IMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
+ P- R0 Y2 U- Q! uwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
, ^; V" v6 s% N7 h4 I# VMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
4 H* `( E7 i8 f& _+ A0 E; L/ eMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);) ]. R* x1 [1 R  M, ~
}

- ^. `3 M( m. F. b( V
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

* u1 {% E9 E' l/ j9 D+ C




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