嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,' F; G& g3 u; |+ y- f
input mcasp_ahclkx,
2 z/ |: `  d: \2 {4 hinput mcasp_aclkx," V- F) x# M4 U/ H) L- T
input axr0,
$ ^, G! u/ Y7 m) {: N; {( X1 O7 Z, ^$ t
output mcasp_afsr,7 |; z& G/ h6 `& H
output mcasp_ahclkr,8 ]4 x7 f: }/ d! C' A
output mcasp_aclkr,  {3 i' x" D6 f" |* f5 x' O
output axr1,
1 B; O% x7 g/ L6 u, H% X
assign mcasp_afsr = mcasp_afsx;  }3 N' M+ x$ V3 Z( k- }: R
assign mcasp_aclkr = mcasp_aclkx;
+ s% @0 e5 W- U+ ~: vassign mcasp_ahclkr = mcasp_ahclkx;
4 a2 g* R% [$ b9 Eassign axr1 = axr0;

6 L9 r* z9 Q( a% i3 L  o* E  M( h& e/ r% [- f. ~6 ]/ d% B2 C
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
4 P9 Y6 C) y$ H/ f. F. {9 ^
static void McASPI2SConfigure(void)5 S# _  w4 b) w, z- V; O
{( V' Z4 t, p1 l2 J1 A
McASPRxReset(SOC_MCASP_0_CTRL_REGS);' t; o( N0 I, P" \3 M
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */! ?& J' W0 i, H9 C* y! T8 V/ Y
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);6 e/ t9 @  G$ d% M8 h+ R4 s' L
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units *// `8 X: x$ f7 r1 m
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,. j$ m4 M' y! C! |- c$ O4 R, H
MCASP_RX_MODE_DMA);
# B- t. K6 O3 ?# dMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
. o! C( E. x; ?0 b8 Y; S4 cMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */& D. E' }- |- J2 o
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, : r' j5 a# o: G( N) h' S
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);, X5 K+ n9 \1 R7 b, r! }
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, / k4 W9 ?# [& g! I4 L
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
4 D# R7 Z+ ]* o' f7 w$ v2 g3 \& V6 w% XMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);1 x7 o( J' ]  W
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ! L5 p4 H- F$ D$ Q( G7 B" V
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,  j6 `1 R3 _6 X% N& ^- Z
0x00, 0xFF);
/* configure the clock for transmitter */) B. R3 D, Y8 y
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
& i' A0 x* I0 {5 D& a' zMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); " G8 z) ]4 T8 N0 \- R
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,: D" x5 p" I+ U) x' [
0x00, 0xFF);
. t* C. ]6 n5 y( b; }- {5 [  c
6 b9 p) B; i/ |1 Q/ A) G4 Z/* Enable synchronization of RX and TX sections */
/ f# K' x/ l/ t1 h2 f8 YMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */% d& g3 U" ]" ?) \
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
2 H9 m$ O$ M4 p% a7 {2 vMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*, `' ]4 J* ^$ e6 P
** Set the serializers, Currently only one serializer is set as
# ]% k) F: H9 m- Z** transmitter and one serializer as receiver.
5 b1 b) @6 c: T* c7 ?$ M*/
7 g4 F% `  E" p- pMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
0 i- \6 ]2 Y5 f6 O% @  E! zMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
( n0 o* r2 I% `% p/ \, X0 T** Configure the McASP pins
6 h- E  E/ O# {; j4 q3 l** Input - Frame Sync, Clock and Serializer Rx! T, _6 B# b1 z  Z3 P+ t# o( n0 d
** Output - Serializer Tx is connected to the input of the codec
& i( {' v0 D7 E, I+ J*/
) a9 c7 ?5 r+ |McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
" |  m; k0 L8 m* ~0 vMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));% w3 N: E2 t0 v& K( Q$ B4 F' ]
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX: Q- T* d4 a0 a" H
| MCASP_PIN_ACLKX
! z6 d2 A* G8 J7 y, g. `| MCASP_PIN_AHCLKX
! u7 q6 d  q9 u% B| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
+ _9 c: z; ~. {& j* s" m6 cMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
% ?1 I8 Q6 t" T) n; N| MCASP_TX_CLKFAIL / B- a! V1 p( w: c: g
| MCASP_TX_SYNCERROR
$ W/ s% b2 [9 I5 ]+ u| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 4 F+ F7 U/ f; }. F- P) h  }
| MCASP_RX_CLKFAIL
$ d* Z6 X7 t( G: T; s2 n  h/ _| MCASP_RX_SYNCERROR
# m0 }/ g7 f2 _& n+ b4 U| MCASP_RX_OVERRUN);2 |- `0 M4 T- M$ d
}
static void I2SDataTxRxActivate(void)
5 h. }1 @  y( g* V0 K( p$ a& t{  q% b% v: t& N; N
/* Start the clocks */- ~4 Y! e2 u$ S
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);! H! Y& S2 U; u+ i6 T
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */) O' y$ I! H7 i
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
7 r5 C' z" Y2 u: wEDMA3_TRIG_MODE_EVENT);9 H& V4 f) B% @, O, }* }; W
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, $ i1 Q1 V. g# }9 E& \  G
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
; I6 _" v% V! @1 pMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
. I! K& X! d$ O4 O  c- PMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */" \0 N; ^, @8 Z
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
) z( L, e8 m; U3 ]7 D/ N- \0 V/ g5 PMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);0 v0 V$ w  Y8 j# F! ]
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);3 V% W7 {5 y" B9 n& ~& U+ M
}

( w% Y/ Q/ ?) {( h9 a; T4 ]! \! ?/ ?7 i
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
' y3 ^, {* P. U- x# N* p- l





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