嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
4 i9 L1 \/ g3 v; M" P0 f' vinput mcasp_ahclkx,. t: F. B: ~# ^5 ~5 B4 e
input mcasp_aclkx,
* O# Q, n, j/ m' |, Y3 D1 k* Qinput axr0,
9 P1 m& @# {% y, \- O( m2 D; n+ }0 ~- P, ~& C: W
output mcasp_afsr,6 O1 l8 G+ f' y+ k: U
output mcasp_ahclkr,
1 q" E- M9 f) T) F( ~+ |output mcasp_aclkr,& O; M% ]. i$ Y$ i& K
output axr1,
( L( P$ I; O6 ]
assign mcasp_afsr = mcasp_afsx;6 Z- \, a* t" r+ x  ]2 v
assign mcasp_aclkr = mcasp_aclkx;
0 ], M* ]0 a+ s4 T( z2 e$ j/ vassign mcasp_ahclkr = mcasp_ahclkx;
9 t$ L! _5 }+ n8 aassign axr1 = axr0;
" ?+ `3 X% V9 t" u; J$ W) b  @3 v

2 y8 ]; z$ @2 l, q) b# ]8 T: q0 e  Y1 P
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
$ P1 t. b1 l( X  p- G
static void McASPI2SConfigure(void)* L  E. R- T! z8 T0 m, u
{( N5 }7 _# y6 K8 L. n
McASPRxReset(SOC_MCASP_0_CTRL_REGS);/ Y9 d7 i" B3 \
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
+ u# C; Q5 J- P; OMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
6 K- w8 j, C% GMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */) r" }4 ^/ P+ a4 a0 W# i6 O3 S
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,* E5 M* n2 Z8 a: J, [: [* |
MCASP_RX_MODE_DMA);
1 n) g; @$ o: R1 l1 ~/ e* TMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
0 @+ X$ h! u  q' h+ BMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */. I* ?( m5 t3 h+ k; d
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
+ V0 f  w2 w4 n) DMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
- `; D. d% j  Y# xMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
6 |  C4 @* X, H1 f6 |: GMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */5 x. W. S; c$ ~7 b8 T8 A. [' |9 f" `
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
$ [& Y8 _- G7 J4 A' c4 R+ aMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); - Z# [, G. V: q! Z* t; j+ ?. u1 S  b
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
0 t. p7 @' d7 L, p0x00, 0xFF);
/* configure the clock for transmitter */! }/ q# m' B% G: f. e5 s, j
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);  \5 _0 y  @( ]( E( `6 n
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
4 P6 O8 ?; K/ s: d* ~; v  F. i3 q6 ZMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
) w3 y" j5 N; O! m. I0x00, 0xFF);
* ~4 s4 P! t: Y7 l
7 E9 g1 a4 j$ o2 f6 J3 M( q5 X- j0 {& s: ]/* Enable synchronization of RX and TX sections */ ( d4 A  O& i! |" r5 d* t
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */0 x0 [9 V) T/ V/ C) b
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);" c" K" [3 {+ n1 o% f) w
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
1 V0 `+ b: `1 S, O** Set the serializers, Currently only one serializer is set as
" ~9 g( e; P+ ]$ C2 `! Z" R8 G** transmitter and one serializer as receiver./ `) s5 U7 O5 U1 R- \* N
*/
" W. d/ p$ H/ v/ u' W! {( ^McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
+ a8 N3 g5 t* ^1 S4 e1 IMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
& r! g5 d" Z6 V3 i** Configure the McASP pins
: I# R0 p* Q2 C/ k** Input - Frame Sync, Clock and Serializer Rx
6 |) b& {' N: X/ i8 e3 G$ s) u** Output - Serializer Tx is connected to the input of the codec 4 ^: t4 d( C$ m9 ?- w, G
*/+ P0 n: d) @( q
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);0 v0 j* i* ~5 n
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));8 S- ?; z1 ~8 T' w
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
. u& B. x* t; U) q7 f: \9 O, k3 {| MCASP_PIN_ACLKX6 a# W' S  f6 L; c7 t# {
| MCASP_PIN_AHCLKX- A" g. Z1 C" t4 e
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */) Z$ f( m6 L7 s! T
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
- x0 E: Y/ [" n) Q) \8 P4 C% G| MCASP_TX_CLKFAIL 0 x$ j3 @( R0 [; Y6 Z; ~4 B2 ^
| MCASP_TX_SYNCERROR
! m* G, _) N0 |. r( f| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR . l! ^0 w# U; b! p. W* y3 m
| MCASP_RX_CLKFAIL# Q3 Q0 ]3 O  i9 n6 s
| MCASP_RX_SYNCERROR
& p+ }# g, w+ q& Q+ {6 d! @* x" g. K( m8 x| MCASP_RX_OVERRUN);) }( @# M/ I  t0 U; b% \/ D
}
static void I2SDataTxRxActivate(void)5 ^: z+ ~8 [# x0 |- E. Y0 O
{" P6 D0 R+ R! w1 V. ^' E/ O
/* Start the clocks */
+ K' N0 a2 O7 _, cMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);! d0 G0 \% T& w' q+ A* A
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
9 \  t, x+ n  z, kEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,$ c7 Q' E  }3 w- c: f+ [
EDMA3_TRIG_MODE_EVENT);, x; p) M& D0 ^  U8 q; u, L
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
5 ^# q( d1 R( g- S4 h8 M- g1 EEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
  P- r' X8 p  L: k& c2 XMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);1 X" B2 z0 G. @) l7 d7 {
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */* G, ?3 N8 n! |
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
6 G3 O+ @7 V* }" X& ~) u) X2 lMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
1 q9 A, Y2 o7 c9 E% FMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);. A9 w5 F8 w9 X; y9 V
}

+ n' z1 C. ^3 ?: s  w
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
' Z# k- d& @1 F( L$ X5 [





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