嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
7 r; v$ e" J( A- b' Oinput mcasp_ahclkx,
7 y' S+ Y3 E  h  _4 t9 i. }input mcasp_aclkx,
1 C) S/ g+ J: V( k1 W; ginput axr0,, K: t, }4 X# a$ q

' a; r% N. h0 l4 l. ?* Foutput mcasp_afsr,
  d& D* p: @1 E; R& m5 Toutput mcasp_ahclkr,. H/ @' L$ C$ H5 w" G1 }
output mcasp_aclkr,
4 s7 F& ~" z" G; g- l1 x+ _output axr1,
: B  O# W! ?& w4 {7 k0 d4 J
assign mcasp_afsr = mcasp_afsx;
, P' q* j1 r+ I+ }assign mcasp_aclkr = mcasp_aclkx;
$ M8 P# R% A- s1 j1 g7 \; cassign mcasp_ahclkr = mcasp_ahclkx;# U2 w! k, }. W2 K
assign axr1 = axr0;

2 m+ t1 \/ T  |/ N' y, w% H
6 m5 l/ R8 a! k% d9 v& a) |9 V
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
& }$ v$ a9 s& E- h
static void McASPI2SConfigure(void)6 T( z+ y. R1 ~2 K3 E; J- \% i
{
" q- G6 L4 |8 F1 t: E( ~7 R: B3 fMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
& q- M' [& t" M+ Y, U6 RMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */. ^: M5 k9 s% @9 D0 E0 w
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
- x& A. S: q% u# IMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */" J- z( @# A% d, V& q' {  e
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
, k) R+ S/ s& SMCASP_RX_MODE_DMA);# _* ]$ o. D- H6 I: u" P8 o4 F
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,' \% u1 q# m1 j% f; o1 J
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
' a+ N* Z4 c1 U: o8 JMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ( P: P- {9 \& r8 S7 i! t. G
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);% Q- Z; l: \( U% M& \9 \
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
+ `; T+ e6 U6 Q* jMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */! `5 c7 z  @5 N1 o; Y9 h( X
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
( A9 T- ~, N6 f( B+ @1 d5 jMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
  d- }: c) |, y  S7 }# t1 h8 V5 wMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
* b& K; A9 f/ Y0x00, 0xFF);
/* configure the clock for transmitter */
6 R2 s$ P1 w' e9 J3 A) |McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);$ w1 m7 Y" d6 C5 G8 M; A
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); " z2 f! h1 t2 [* g& x! Y
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
( \# I, m1 O9 k0x00, 0xFF);8 e& S: i7 d0 \) M% C/ d
$ w' U* F' {6 T: P% h* E& Z' [% C! \
/* Enable synchronization of RX and TX sections */ $ [3 S) J, Y3 D% g& ?
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
' c3 w3 @* L+ }# L6 f8 }McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);: X3 l' u1 g* |* l
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
0 G. F" B, H, F# G9 d6 D. X% d** Set the serializers, Currently only one serializer is set as! [$ m3 C0 `6 W, P
** transmitter and one serializer as receiver.9 {8 `5 [# y; O7 {; v
*/" ~7 ^1 v+ A1 T# q# S; M/ O
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
# ]# k# v1 y: h* `* \- i0 g4 Y' _McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
# `. ^$ U; N6 M. Z+ v- t** Configure the McASP pins 5 V# c# ^, [, w: x5 [9 T
** Input - Frame Sync, Clock and Serializer Rx; E9 U# |6 @, G% u
** Output - Serializer Tx is connected to the input of the codec
( t* Y5 q7 h- k% V* q. A*/
7 I! k8 _- B/ ]6 S& x( \9 M# T2 ~McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);7 n- e+ b3 A+ C
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
+ X3 d- U; r7 X# f0 vMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX2 Y  f, K3 x; s$ R3 b) l
| MCASP_PIN_ACLKX
7 X; w0 e9 P7 U! m6 M; a9 p| MCASP_PIN_AHCLKX
! \+ ^" m% ]# c" S* t3 B5 L| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */; i. u- a2 {) A8 {+ e% h3 K
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR % a" G; R$ l" e; i: s
| MCASP_TX_CLKFAIL
2 n9 o) S4 @5 h5 x; m" c: r| MCASP_TX_SYNCERROR
, c5 O. @: K9 |6 E7 s. k| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR - L1 `( U) V# O' N6 t
| MCASP_RX_CLKFAIL
8 B' ]' x( I  J: J/ n/ s8 Z3 X/ {| MCASP_RX_SYNCERROR . A: S$ [/ N6 ^( W. r" M
| MCASP_RX_OVERRUN);
- E# h8 O  {/ [: J7 y. }6 `; o}
static void I2SDataTxRxActivate(void). ^2 ~2 `7 T3 l, ^
{
1 d# |$ C3 p# ^" V4 h/* Start the clocks */
9 o- l6 X% r8 JMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
  m- |0 j; a8 mMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */6 H; W5 M. T9 w
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,$ X! v) a5 Y. l0 F1 u$ t
EDMA3_TRIG_MODE_EVENT);
. l. z8 o( T) v! e: GEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
8 v% |  k( F4 Q3 T$ t% Q; wEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */8 O+ ?' p) K/ w0 b* ~( g0 ]. X
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
  F9 c/ J8 z) G2 @  [3 e) Y/ qMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */5 W! M, n7 ^; L$ `( @" l# D, Y. v
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */7 U7 f# V4 ]  h0 I: D
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
' p! a3 F0 m6 r9 B7 V- ^7 m, G; ZMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);5 j4 Z4 t! z& Q( G3 e2 b( o
}

/ |* B3 F: p0 R- a: ~
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

6 ^3 {* o7 m; d/ v6 f/ [  `




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