嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
$ p* k  ?: v9 p9 B" W: J- v+ X8 cinput mcasp_ahclkx,/ n3 ]( h$ w& i
input mcasp_aclkx,
) D  Z2 _* b4 L! T* [9 E9 t) oinput axr0,0 [4 U2 a( ]& r0 i$ Q4 j
4 o3 Z: P  r9 W9 \
output mcasp_afsr,
! ^) s7 i+ D( |) h8 N5 [" poutput mcasp_ahclkr,, ^' A! V2 V1 D% Z
output mcasp_aclkr,2 K4 H6 j& L; |, V* m
output axr1,
. M* ?1 N! H" F" Y  T
assign mcasp_afsr = mcasp_afsx;* i5 J$ s0 n( a' S: _
assign mcasp_aclkr = mcasp_aclkx;, ?) _# {9 x+ x2 A
assign mcasp_ahclkr = mcasp_ahclkx;* ?) \! H. `1 m% Y
assign axr1 = axr0;

: u8 Z" p% H* \" g9 B# A7 Y2 D5 h  o7 K% y
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
  o2 Z4 Z8 r4 P, g& e' f1 {% I
static void McASPI2SConfigure(void)- {- t; N; p/ I4 f2 P
{5 T* G# d4 s1 o& N+ U& h. l/ w
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
* c, F7 J  l* z& v" V# yMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
2 e/ Q8 x) ?' f: F$ S2 hMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);6 o" N7 H9 @' M' F* A7 p; k& L
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
1 Y6 b6 F3 U' }1 t# b) n& lMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,! `% V5 i" _% g# m) h
MCASP_RX_MODE_DMA);$ b# J5 @) Q! t6 D
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,$ n4 r# D6 g' f
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */- e+ h7 [& e7 C/ {8 @" x7 _: m; R9 t
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
, g7 [" G2 @! @! d+ G* WMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
; `2 ~. P6 i. p# h" L3 UMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
# w5 q0 Q  S3 A6 i3 q! JMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */; {' v7 X/ R- z) s, C1 e% W7 t
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);* p: R, J5 `1 Z2 m4 U
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 1 \  |8 R3 T2 k9 o# f
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
6 U8 m8 Y4 ]1 H5 ^: f0x00, 0xFF);
/* configure the clock for transmitter */& O% M$ _+ i" w
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);# G. q! m  _3 R7 D, f: r
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 2 e0 a0 E% a$ ?6 A/ U
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,4 X; I( U2 b8 e, Q1 x7 ]$ X8 u
0x00, 0xFF);( d2 h8 t+ z5 G9 M
. \: \1 ]+ ~! m
/* Enable synchronization of RX and TX sections */
7 p! @4 T3 m3 j; W! C0 fMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */0 \9 q: |5 f. ^& K# v' @
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
( H+ ?8 K/ A( n# S' _! KMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*1 L0 Q( s1 C* V2 ~* j
** Set the serializers, Currently only one serializer is set as7 u" I; H/ C+ a. Y  j) @
** transmitter and one serializer as receiver." w& B! R6 k8 k9 F  T! G
*/
, b; J' `% ~, R, hMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
% c( u5 @* i' J7 fMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*6 ^. K& V& z! x! v) }' F5 c
** Configure the McASP pins & T3 D4 w, ~5 h
** Input - Frame Sync, Clock and Serializer Rx. S' S. K- ?: I' [
** Output - Serializer Tx is connected to the input of the codec   `6 \$ \/ J8 Z( ]. }' B
*/( S: \! D) c( K1 C+ S0 A- ]8 f& w
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);+ L# x" x( a8 K/ {. J
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));( z* T# ~# l! u
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX2 t% x4 L* B2 Q) `/ h
| MCASP_PIN_ACLKX
* _$ T$ k6 M% c/ b| MCASP_PIN_AHCLKX# {: B7 g2 g% @! T9 v9 s1 f0 _- b
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
1 i2 r# q9 h$ Q* z# {; UMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR & J& a+ x, T; f
| MCASP_TX_CLKFAIL
  w9 ]7 F5 o, }& Q# \/ m| MCASP_TX_SYNCERROR" q$ Z$ B3 ]0 T2 c
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
" @% g/ M$ v7 i7 g7 v# v| MCASP_RX_CLKFAIL
# z9 }( [! M$ z0 h- m! N5 J| MCASP_RX_SYNCERROR
4 M$ G* s7 [6 ^, M# k# @' h| MCASP_RX_OVERRUN);" q8 K6 m( M# ^) l* |( c  [
}
static void I2SDataTxRxActivate(void)
8 K# Y# {0 G$ ?4 v$ G: M{
- {' [$ ?* F! G  A' b9 Z/* Start the clocks */3 N# [7 w* s. s4 n
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);: M) h( N! Z& ?
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
0 `$ B$ m( ^  L6 C3 MEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
, J. D/ j" D  J. `# u% f4 a9 zEDMA3_TRIG_MODE_EVENT);0 C7 q; T% n- \" t  \# \
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ) W. g4 c4 m0 A9 r
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */4 R8 Z# e4 H7 J) c
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
! w1 @0 S( S4 k' SMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */1 X4 s$ E/ a: I7 R' m4 u8 C
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines *// o) _3 s& @. w
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);# T: c6 N, Q; ^) E
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);# W2 N- Y( ]4 D: M8 S$ X/ D/ S" Y
}

, ^7 V. n+ Q. e# ?6 F
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
) l% x: Z4 f' X! g+ G' r





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