嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
' a: V$ p) o/ Jinput mcasp_ahclkx,
, X5 `/ x( p9 E% M# `input mcasp_aclkx,
. A7 ?/ E6 K. }, @1 W) Cinput axr0,
5 g8 b9 n* P$ D3 M' o0 a" P0 r/ Q* Z1 @9 q9 Z/ ~  z
output mcasp_afsr,
* w+ M2 G, @! G9 V: _$ w7 loutput mcasp_ahclkr,+ O2 o3 Z7 N: N0 `  @; @
output mcasp_aclkr,
8 @( M7 s: ~. T8 aoutput axr1,
* o1 u4 l5 S& t
assign mcasp_afsr = mcasp_afsx;
5 H/ P$ H/ p+ B  l* l/ c7 \- }6 ~assign mcasp_aclkr = mcasp_aclkx;0 g* d" w! y  v& z5 o
assign mcasp_ahclkr = mcasp_ahclkx;
* r6 k$ c( V3 ?) n9 ~4 |$ w: s8 r- _assign axr1 = axr0;
5 a) n2 g  l  z; P$ b6 \
% k8 {( d$ R( K- x% B
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
8 j3 Y+ L+ S, H7 l
static void McASPI2SConfigure(void)' H6 n5 Y% w, i9 D, }4 W$ u
{
- {, M5 h& [5 }3 \( J9 GMcASPRxReset(SOC_MCASP_0_CTRL_REGS);1 H! A( ~8 d" T6 A, O" R$ j8 L
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer *// X6 Z! ?( H6 c$ R+ h9 E& Y) E
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
: N- K3 b/ d' V# h  bMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
0 _! w, ?" W. I0 I7 ?% p$ N) [McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,2 X" A' n& U7 E6 I; r' @
MCASP_RX_MODE_DMA);
$ z5 `( k# F$ C* \, zMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
' y# R& m2 `1 UMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
% B/ r! o6 l5 w& jMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ( c+ V% b$ K5 s
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);/ Y9 E8 K3 s# x/ m& L
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
3 P7 N5 |, s$ w4 a% J+ H1 rMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */4 G( Q; L$ Q( W7 u' g% K6 s
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);* n; }! E9 q6 c
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
) h4 P, Q$ X2 a+ [$ ~McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
* d2 e4 I8 c, j5 [% J3 Z1 h% M0x00, 0xFF);
/* configure the clock for transmitter */
( z$ y* S+ t: d$ H; `McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
8 F* g( o. K$ O. E% YMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
) C! _! t4 _& q+ l5 D% mMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
4 E- R5 i2 }1 k% e0 M7 N1 v0x00, 0xFF);! h$ P' C" |) E8 r: }5 J

5 G$ M% ]; G9 D/* Enable synchronization of RX and TX sections */ / I0 @4 |( b  Q; Y6 J+ z7 R+ ?
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */4 k4 y8 {. I# W9 b$ I; Z; P
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
' B5 y% {+ s* o4 q* TMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*5 ?- u3 C" f5 M, h0 Q4 t
** Set the serializers, Currently only one serializer is set as9 ~9 q) n+ h- r2 e6 i( C
** transmitter and one serializer as receiver.
2 o$ N. J# K3 |3 W1 ]*/
+ `1 M- L" Y- r" c3 B' L  qMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
0 k3 p. a8 F8 t5 tMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
0 ]' m& i  j) i# c( D% H( Y( X8 W** Configure the McASP pins " f3 Q" S' w  {  `" ^, i
** Input - Frame Sync, Clock and Serializer Rx
; B4 Q* [# C" k& O** Output - Serializer Tx is connected to the input of the codec * I7 I" s. k. w7 m3 P/ v
*/8 }; }+ U! W  p6 O" _" J
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
8 A( {- ~1 N8 V+ A# x* K" [McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
1 t9 ~$ S6 j+ M7 P  TMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX8 P3 a+ O3 ]# c/ Z" ?& U! ^3 t
| MCASP_PIN_ACLKX
; ^* i" I' l$ R" P| MCASP_PIN_AHCLKX
, n! [( Y7 ?, X0 }& }- Z$ R| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */$ L% i$ e  \" V/ a+ y0 b
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
5 u# r3 N; ^) n: @5 r4 S# H* K| MCASP_TX_CLKFAIL 2 W' k) g, @! N) O$ m
| MCASP_TX_SYNCERROR- k; A. f8 x1 x/ W
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
0 s3 K1 A' N6 y+ h% H0 }| MCASP_RX_CLKFAIL
( }. y5 {3 n4 Y4 L| MCASP_RX_SYNCERROR
6 E3 l- w  b% ]; o% d| MCASP_RX_OVERRUN);. o7 `* D* q  P. Y1 A, A5 O2 J
}
static void I2SDataTxRxActivate(void)
2 D' b% B( b; {4 [{
5 q* W' Z0 i, F6 Y6 l0 L4 a9 k/* Start the clocks */
8 ~/ `0 P: y# ~- _' _McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);$ Y: q0 p) X' r2 m- J8 V) I
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */* Y3 q5 q  S$ X/ i0 m
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
- z" e8 S# I( m. fEDMA3_TRIG_MODE_EVENT);  V2 f3 }3 A7 g$ m( L& }7 _* M
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 1 g; v# A( }. b0 F$ {% q3 y
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */  k" N3 a2 [4 r' M- n
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);* x; F  Q$ r) X8 \5 t# u& d) u
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
# x3 u; a0 i6 E2 u: j+ m  |; bwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
5 g  V/ Y2 i! n, p  z$ zMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
# G; n+ U9 i! u- l5 TMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
/ S2 g; a3 }) L$ P" F' m  N}

6 F4 ^4 Z5 Z* r* n6 B+ J
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

! O; m7 f* R) B  @. j* J




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