嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,3 v1 Z1 H6 Z5 O* @/ X- k) W
input mcasp_ahclkx,8 S$ s2 p7 t# R7 K# Q
input mcasp_aclkx,
4 O: h/ n2 I( I- B5 Y% Binput axr0,
/ m! u7 x0 x2 Q
% h5 ]$ i/ i  W3 \- F6 r4 q4 |output mcasp_afsr,
6 ]8 H, G) ?, S- t- r# c3 G6 \output mcasp_ahclkr,6 j! H5 s/ E: W; G
output mcasp_aclkr,. u& N6 ]& q. v3 _, V3 R
output axr1,7 |! J4 u0 f: H# }! D
assign mcasp_afsr = mcasp_afsx;
0 E7 E4 `0 X* q* D$ cassign mcasp_aclkr = mcasp_aclkx;3 u( l0 F! v$ D! j; A
assign mcasp_ahclkr = mcasp_ahclkx;( z( T$ R  m$ L. U
assign axr1 = axr0;
4 t6 ~! _" z0 L8 `5 ~1 z% [7 I4 o: h
4 c2 d' ^! s+ Q$ U
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

& c* ?9 Y; U, b6 ~; ?1 D7 \
static void McASPI2SConfigure(void)
$ F7 v1 R* q0 W5 S! @6 q* j{
/ |5 t2 e: g4 v" R" q4 cMcASPRxReset(SOC_MCASP_0_CTRL_REGS);' i6 T- L% T/ @6 c; V* [+ q' G
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */# e: S; }% J/ T7 k  ]9 i1 O9 I
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);! u. j, m  A3 y# n) m# p! l, _
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */+ j3 C' {) l3 B$ ~9 [" z" [# F3 M1 _
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
+ P$ [1 D; A: @, ]9 TMCASP_RX_MODE_DMA);% h6 d$ V7 _. i" Q' B$ B. D
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,+ |* ?0 L; c6 r' [" `* F! }
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */6 E7 r2 a4 l. k/ C& A
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, , p/ b' y4 {: B& W. J. A
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
" E2 {7 m  v$ g4 w. AMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
7 `8 F6 i: ?% C0 P8 FMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */' Y! s( d& r) B% X' D; f
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
2 {; E) M( c" a% h# i2 L& ZMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ' M2 F$ N6 O) h8 c# J" n
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
7 A3 I9 n+ `5 _- k. |: W! c% I0x00, 0xFF);
/* configure the clock for transmitter */5 }6 }/ n+ y4 u% z
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
; N$ C3 N% Q5 j! YMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 0 t+ h5 G5 n8 E8 u1 E# F
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,7 m3 y" x( m, F2 A4 \; k, v
0x00, 0xFF);) f- O% v0 r7 D, f$ E" j" t

" G% d, z. n$ u" q/* Enable synchronization of RX and TX sections */
7 \2 b0 r& s$ N, D: @% hMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */2 ?/ [8 |. z, ?; _; T( L
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
0 d2 M1 B+ f8 e+ m, j" z# q9 rMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*1 V. w% V/ r+ m. E
** Set the serializers, Currently only one serializer is set as
& u1 N# n* `* R( L** transmitter and one serializer as receiver.
( k- W7 U! e  X*/
% t8 T9 C. M3 }9 h% pMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
2 q6 r6 t8 A7 C2 B5 |9 ^McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*% L8 i# @  h  d' r3 j
** Configure the McASP pins
5 e* @6 Z0 C6 D: I) a* |% y** Input - Frame Sync, Clock and Serializer Rx
; D* S! |0 N& O- V2 y. D** Output - Serializer Tx is connected to the input of the codec - _2 p: B$ G% e* B
*/4 }9 o; q4 P2 u: y: z
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);  R9 I$ }2 f3 M: b; t( Z8 T
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));/ m$ e! K5 O, K- f
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
+ g* t. ^, g3 z: M| MCASP_PIN_ACLKX
9 \  D! u" f, d| MCASP_PIN_AHCLKX3 I# s+ a1 \! g/ N- z. b* {
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */! W: m" w4 i0 F' f7 o
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR $ b9 N* f6 Y: p9 P0 F  P+ m, p
| MCASP_TX_CLKFAIL   v: G9 M, v8 x" r  f, j
| MCASP_TX_SYNCERROR  M/ E4 Q' B' y; {. h' x
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR   x+ x! {& m. G- ~
| MCASP_RX_CLKFAIL& s8 N" m" Z- A% J  `$ I
| MCASP_RX_SYNCERROR 4 A- ?& Y) ]) m
| MCASP_RX_OVERRUN);8 E3 G# C1 I2 D- ~) d& b
}
static void I2SDataTxRxActivate(void)
% B" F0 Y  ?: F) s) Y9 O+ c{
. C& }# |: ]: `% N+ G/* Start the clocks */0 e# W" _2 q* \, L, Z
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);" d, w% E9 F  Q
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */5 f' o6 c- u: f
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,. }3 C; f) E) U0 o
EDMA3_TRIG_MODE_EVENT);; Q6 P9 f, v0 A- _4 H8 w( ]" U
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, / P. g0 z6 j' E  y2 ~
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
. s3 G; f5 y' n: ], H1 Y4 {3 M4 ~0 AMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);4 q" p# g$ R: T4 Y+ ^4 z9 B
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */! Q6 B  }+ u/ S& u/ j
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */6 q0 r2 h: f4 z6 x+ _! }) U$ k
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
2 B( O8 d4 y* g. P+ ~$ ~McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
' m5 c. e1 w* _) T2 _8 E, A9 J}

  v/ f5 l7 r& m7 u3 |# K
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

. e" R3 f+ g3 |7 T8 c




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