嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,9 s/ ~2 s, c$ h
input mcasp_ahclkx,5 E8 F- _. H- S- X( d( K
input mcasp_aclkx,
1 t' z; l& Q7 R# a* d; b) v& hinput axr0,
% l( A) t. z+ E% J
; M/ R. g3 ~% _" m# aoutput mcasp_afsr,
4 M, J$ ~+ ~8 Q* ]output mcasp_ahclkr,* z& L" w" V, o; @/ J1 Q9 Y5 {
output mcasp_aclkr,5 J/ y! [8 c- E6 Y  s
output axr1,
5 g" E2 y' F! \) l
assign mcasp_afsr = mcasp_afsx;
3 V, u9 u2 R- r* |3 ?* O4 Cassign mcasp_aclkr = mcasp_aclkx;
; h8 z/ i" o8 g8 m7 p% {8 y/ V3 oassign mcasp_ahclkr = mcasp_ahclkx;
4 ]6 g, A/ q4 T; aassign axr1 = axr0;

5 p$ q( l) e& M. c1 ^4 r
4 x# s5 l% w! {0 Y( _/ O4 E3 G
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
% H6 J* w9 d5 s5 C! j! d
static void McASPI2SConfigure(void)
) ^4 P' }9 f, h4 r# W; |{* \! ^- @! E( W5 e9 O. j
McASPRxReset(SOC_MCASP_0_CTRL_REGS);2 D9 A; o; |$ A2 s, \1 Q
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
2 m: D; b8 @* u4 {McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
$ M; T0 H+ L% N7 r6 M" tMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
1 h4 X% Y6 Q. w% R! F* bMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
1 E" a/ z; V( f- p) ^& w# l. L3 @MCASP_RX_MODE_DMA);, k5 O9 B" k  b& c* ?8 P
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
7 n- n$ j  ]  F4 L  E. AMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */# ], i$ S9 [: F2 z  l
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, , O) t- @" Q3 B  ]/ h
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);: X  X& P+ S9 U$ V: Y% q
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
; n* [8 Z+ K+ F- T% f9 H. M4 W; vMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */: t- e& {. A. U3 f
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
/ ~. ^2 n/ D/ s. U9 T7 Y, LMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); % S( E9 ?% m/ p# C1 H
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,/ i: t0 X2 e* l! c7 g: C( M
0x00, 0xFF);
/* configure the clock for transmitter */
. Y- c4 v- @+ c! k7 g: iMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
0 W. {1 p) K! g' C. L( A2 NMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
- N5 I4 L% w- EMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32," x8 x0 s' p* S8 u
0x00, 0xFF);0 n8 O- p4 l, m- S# E" B9 E, y; D

0 q4 I3 i& r0 v2 b3 Y/* Enable synchronization of RX and TX sections */ 7 O- v9 q# h. Y4 H
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */7 \; t2 Q. d2 S" X( u( k) X8 y. c
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
1 ?5 M) B& F: N' U/ qMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*; k; ~6 q# S5 `8 Q
** Set the serializers, Currently only one serializer is set as
, Y# v" j/ s* N** transmitter and one serializer as receiver.
+ F/ H8 v0 l  ~*/
- C5 s2 L7 i+ AMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);& l+ m7 b- q' y+ I, n
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
' y3 O8 t; r- [0 b** Configure the McASP pins * c2 n1 ^# i) L6 f
** Input - Frame Sync, Clock and Serializer Rx
: O7 I- F4 J: l; }, z** Output - Serializer Tx is connected to the input of the codec
4 m: E2 d0 x" N( V*/
6 X$ l. O3 X( [5 U* o. z: PMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);4 R1 B) ~& z/ \, g" |! D
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
6 J( v5 W, H2 t( s) D, l9 DMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX6 M1 c( s1 k9 K0 b2 L5 n7 Y0 r
| MCASP_PIN_ACLKX8 N& K+ g. }2 U3 b% X
| MCASP_PIN_AHCLKX
2 i" E3 g6 q, b4 S7 {1 W: Y5 A  s| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
; D! K5 ?6 [9 @+ }0 Q3 qMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
' b. x. ]. ?9 c' }( j| MCASP_TX_CLKFAIL
" B# d9 d/ U- g| MCASP_TX_SYNCERROR
* d8 K, y  M2 q7 v9 w% [( Y1 N| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
6 `$ \1 R; @# m9 m. b| MCASP_RX_CLKFAIL
! T2 B9 t7 c$ z9 t7 Z, m) A; m  o| MCASP_RX_SYNCERROR * m1 g3 }; Y) s
| MCASP_RX_OVERRUN);1 o: p$ }% @. Q/ D- s
}
static void I2SDataTxRxActivate(void)
" @) ]; ?& G# T( m  y{3 R4 J# \8 v2 Y9 _2 z3 X" P: l
/* Start the clocks */, v& o4 Y! `3 N7 X! W
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);$ q( f4 K  D5 v
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */2 i( k; P" |/ l, t1 Q, X- C8 Y
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,) f) @7 }' L9 s( _4 Q4 e
EDMA3_TRIG_MODE_EVENT);
! t( s. H7 g  xEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
  e) H& I- S" cEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
1 y" G; t# i2 i4 pMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
5 P0 l9 q+ |8 d1 B9 w* g# }) pMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */: E: A7 C3 `7 l
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */: N/ E# E. g3 u9 P
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);9 o% B1 \" R+ q
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
7 ?$ Y: u2 c8 D, L& a5 v}
( `3 k7 _' ], M" C6 l3 b9 K
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
8 U- t& ^% o2 [: Z/ F, E5 N/ P- f





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