嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,/ @6 F# o/ `  s; G
input mcasp_ahclkx,# e9 T8 o9 I4 z
input mcasp_aclkx,( t' d. H. N$ |, l3 r! e
input axr0,
- r1 G# d7 u( f0 t2 O% D% h; N! V- _+ D
output mcasp_afsr,# ^8 w) }" v1 |5 t: V" o5 g- X
output mcasp_ahclkr,
6 l' L  l0 D5 Q1 a7 ^' routput mcasp_aclkr,' Q- w5 ?+ a( A1 B) R% Z
output axr1,- g2 B# O4 g1 \: W2 W
assign mcasp_afsr = mcasp_afsx;
" `. @/ j/ {: Uassign mcasp_aclkr = mcasp_aclkx;6 s$ u( n4 b; q3 T' B
assign mcasp_ahclkr = mcasp_ahclkx;
' F+ @5 \% k# j. I) w% ], l+ `# @assign axr1 = axr0;

0 R5 ], _7 W( [! e9 h" ~
( k5 v: o1 b1 d, u. F
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
/ P# B5 [6 |" C/ w
static void McASPI2SConfigure(void)2 A4 x! l5 [  Z+ m& O/ u
{
5 J* Z) D* a  l: E" GMcASPRxReset(SOC_MCASP_0_CTRL_REGS);) Y! a; ^2 Y' @5 U# N
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */7 P* h3 j/ F$ p, R
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);2 s4 B, P9 Z* {4 A* M
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */" O, Z" Y) M" z
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
1 a' [* c1 \& F$ V9 ]MCASP_RX_MODE_DMA);& A; l: U8 ]; P- K1 A- M
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
5 T& V- R. X- i* i8 lMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
/ R  J4 ^! l0 |- G2 g8 E0 z7 |/ ?McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ( k0 b+ p- [7 t' a
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);1 F$ Z: b7 E; b# g
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 3 J+ O3 b: G( W( D0 p3 n
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
* V3 Q3 E2 w/ N  ?1 t- vMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);2 v& a, b) L) g% s% A4 x- X: N
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
- k0 H) P& s5 WMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,: n: @$ a# @8 [) m
0x00, 0xFF);
/* configure the clock for transmitter */. D& j% O5 _( G! \2 _5 N
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);4 b3 @: N" f. x% G; h1 W, R
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); / b$ p* O! n  [+ S
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
7 A, X5 U! b" D( q7 c. o( ]0x00, 0xFF);1 C0 S" D; }; C" z( ?, H0 t
  A* d4 |" z/ {; l8 U$ g
/* Enable synchronization of RX and TX sections */
: ]7 @5 R6 |6 ~+ @( |McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
" w$ [9 a7 ~" A* A4 y( b% f* hMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);8 W2 ^' }3 o$ F* M; b
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*2 E/ H3 \# j$ f, h6 T8 x
** Set the serializers, Currently only one serializer is set as; Z* `5 d; w3 P# Q9 k3 r: l
** transmitter and one serializer as receiver.3 t' \/ j' q2 h( n7 q5 r
*/- i/ k3 S! l$ V& s2 \8 g
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
7 a5 L4 z5 j; d- C4 t" _McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
* i$ H& w5 z. W0 h** Configure the McASP pins
8 g% u& `2 @! O' r0 Q** Input - Frame Sync, Clock and Serializer Rx( G6 O8 P" A0 a7 X
** Output - Serializer Tx is connected to the input of the codec
+ n6 e# x7 i2 }*/
' K% h. c: ~+ q4 {- |McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);" i9 C* e6 q) x2 ~% @+ X
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));! y9 y& c3 w; q4 N1 V
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
2 E# a" o9 U* k, t/ C7 N| MCASP_PIN_ACLKX5 ?  ?+ V1 |8 ?# g" J$ ^2 j
| MCASP_PIN_AHCLKX1 ]0 `# g4 ~' x2 a! T4 \. |5 r( J
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */* k0 \9 D: d" j5 E2 u6 G
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ( h6 Q1 T* H, |* c7 r
| MCASP_TX_CLKFAIL 0 K, L5 F/ S; `% i, b6 ]8 m" I
| MCASP_TX_SYNCERROR. M- @1 R2 M2 j
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR # G0 l% n/ |1 H
| MCASP_RX_CLKFAIL, w  j1 W/ T( g. r
| MCASP_RX_SYNCERROR 4 W, u$ `$ ~$ P7 F  }
| MCASP_RX_OVERRUN);/ u* ~$ Z8 C  I. @0 i- l# ~
}
static void I2SDataTxRxActivate(void)- Y) n1 Q* O& V
{
' c2 M  e4 d# ~# T/* Start the clocks */
: K5 N0 i3 ^  v. D' wMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
4 z5 H# i- B: _- o- Z! NMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
0 s1 w& X1 y  \9 p$ T) o  kEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX," E$ B' d6 R5 ~
EDMA3_TRIG_MODE_EVENT);
; w& k8 z' P! x6 d6 A, H3 O$ NEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, # c4 a5 V+ N$ |$ u
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
/ f6 l( K6 v& B& yMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
( R5 ]+ ^9 W% l, E. y3 c, h  B2 a. QMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
' p* D( Z5 i" q& W# e( xwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
, D, ^3 A* I8 D  b  @* J* g* N- TMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);8 f# H) B+ n1 ~4 Y
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);$ d; C8 c) `2 Y6 s' K: X
}
7 x1 m4 z2 V' p
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
& l; J6 G! F8 {$ K





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