嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
1 a  g9 D4 |: h* t; jinput mcasp_ahclkx,
8 Z! c( x5 F& @. R" s8 e% o$ dinput mcasp_aclkx,
1 D2 `( P7 m4 H! C( O; qinput axr0,
) A% {) E2 h& n# h  K" f- E: w! T6 n' L5 h8 W. t( U+ @# ^
output mcasp_afsr,3 e8 v- \0 i- A, ^$ M+ A2 ]
output mcasp_ahclkr,
8 U  D- X, Y$ L- \6 {% loutput mcasp_aclkr,
/ R, p6 q1 @; ~- [7 E, z$ F( Ooutput axr1,
- T0 w% |; C' j* v5 T& s8 t
assign mcasp_afsr = mcasp_afsx;
* o& w" U' @+ _/ r6 q4 hassign mcasp_aclkr = mcasp_aclkx;
, `# ^0 \' W% Y4 l. Bassign mcasp_ahclkr = mcasp_ahclkx;/ t) d5 P) \+ k
assign axr1 = axr0;
: |- Y7 h7 O# }: U# z, H
6 U8 y) ^& i1 p( Q# T/ s
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
3 M8 `4 R! B& s* P" M0 Q
static void McASPI2SConfigure(void)
; ]( S$ b+ a  x* V{
6 B4 t9 f3 l* [McASPRxReset(SOC_MCASP_0_CTRL_REGS);) q; b, M% C' q1 k, h
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */$ H. w7 i" O) w+ x0 D% h
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
: g+ w" B% p; I8 d) |2 c2 W/ tMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
9 d) K7 E+ E6 mMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,; L4 O4 r$ N! }, l+ j
MCASP_RX_MODE_DMA);
, q5 j# K; x9 v6 r( L8 E6 e: aMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,, x# q% d+ F- c. Q5 b
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
6 K- k; o9 p' X5 ]McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
) x: v! y' L* N; K( d" eMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);5 N6 o2 M  A1 ]8 [- j) o6 r
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
, j" Z4 h  o' x. nMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
" V5 O) |# F2 I) C/ V& eMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);: U! h5 S/ J+ ~' ]0 h
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); % z4 p7 ~! h8 d* F3 K+ E- Y
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,, z' P5 p1 l8 f) ]. W4 |, O
0x00, 0xFF);
/* configure the clock for transmitter */% T" I0 l1 x. q6 ]
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
7 C- S4 \  B1 h4 n( nMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
( m3 B3 b4 R  {/ U/ M) b7 EMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
( y1 e8 d* w6 s$ l: Z  N" I0x00, 0xFF);
9 I/ I% A& g- z$ R- o" e9 D0 J( x- n/ j1 n1 w2 ?6 y+ G/ `
/* Enable synchronization of RX and TX sections */ ( v2 d. J6 N4 S' j
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
. T: H5 m8 G$ V# ~; c- B- jMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);9 {8 J, L# y, i. k0 A
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
2 Z+ h6 G5 _- C/ Q; q# |: H% f** Set the serializers, Currently only one serializer is set as
6 J$ h. _- V/ \( j! B  ]** transmitter and one serializer as receiver.. s7 w7 V" e( d% U$ Q# g
*/4 ]; A  A3 j2 V, f" e
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
# L3 v" a! `7 }6 R9 O( d% \) w0 sMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
% R- M8 g, G1 O** Configure the McASP pins
7 F: E/ o6 y3 J7 f; H** Input - Frame Sync, Clock and Serializer Rx4 ~% {  i' |3 {2 [  T
** Output - Serializer Tx is connected to the input of the codec
4 i6 j/ c, R, Z/ f3 I6 x*/
8 L5 W3 h+ z, P9 EMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);. x+ M# O7 i8 L# F
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
# a# n; I0 ]3 E  nMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
" A- b5 `3 D; ~9 C| MCASP_PIN_ACLKX* W+ ]& e* O' N
| MCASP_PIN_AHCLKX
' I1 D9 m0 B2 ~| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
* `( i' ^0 F6 F1 l% v7 T- FMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
. Q. O- W" v( }3 t7 a0 P/ k, }% c) G; K| MCASP_TX_CLKFAIL # B" f% E) w! X) w
| MCASP_TX_SYNCERROR% E2 N5 F" Q- `+ @. V: o2 u+ w' L7 F
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR * v7 ?7 r( e, A+ R3 @0 B
| MCASP_RX_CLKFAIL
6 S  k( O" o2 O  ]! W( {| MCASP_RX_SYNCERROR 1 g" \* ]9 B' }. ]2 Y$ q
| MCASP_RX_OVERRUN);
7 b) q% x0 n5 C1 }# K}
static void I2SDataTxRxActivate(void)! ?1 @: V- _  ]; y0 q) h' T
{
# C1 m( d# a3 s2 d/ ]7 l/* Start the clocks */7 B1 e6 H- Y  }3 t( L" ?
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);& i2 b5 N" S$ H1 a; G. ~
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
2 p- ~; n3 t0 JEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,' x) P$ a8 q0 x* Y( Q
EDMA3_TRIG_MODE_EVENT);8 C# G* m  h: P# K
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ; I  E9 G% k* X4 B$ p  X8 ^
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */( Q; A& E8 k$ B3 b' i0 B2 U
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
4 \+ ]$ o( I5 P% @! F" i) ?McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
7 x' R' ^7 z4 X* f/ bwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */7 f( G9 w: F- s8 y% n; L
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
# l! T* m5 m" C, w3 k+ ~( IMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
1 I; ]% b. r8 N' g4 h) h) N) i}
& D# N& n1 @# H  ^+ J) R2 {
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

( c9 c: P) a5 m& a




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