嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,' z) _2 D  p( O& B8 M! g
input mcasp_ahclkx,
3 ^5 [8 U* w) c! l8 @, Tinput mcasp_aclkx,
6 i( O$ B9 ^8 @$ Y3 E8 q2 Iinput axr0,
' C9 s$ C4 Z; I) \4 C  _. Z' }6 S* I' |8 H
output mcasp_afsr,6 v4 @- D; L9 |5 r3 u& d6 s
output mcasp_ahclkr,1 M) |+ j% p! f+ ~* l
output mcasp_aclkr,; i0 Y4 D! N  @; y! r( j" _
output axr1,9 x8 P+ E7 t) a0 l/ ]4 Z! ~( S
assign mcasp_afsr = mcasp_afsx;- X# b8 v. s2 I: f5 |
assign mcasp_aclkr = mcasp_aclkx;
1 ^% J% _/ G* R- I9 |: B0 bassign mcasp_ahclkr = mcasp_ahclkx;; n& S! n$ S+ _2 q! ]9 q; o
assign axr1 = axr0;
& ]; O( v- {7 u/ Z3 H. h

, M! w* d( L% G, I
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

! q% G1 `0 C! n6 v+ z
static void McASPI2SConfigure(void)
, a& v" f" E* D" u( K{
; ^+ V! y' L; g% I! R9 L7 v6 nMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
* K' j5 E/ b4 G. T3 `* g' N( VMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */# ?/ h9 F: [/ n3 S& S4 [
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
8 u: Q) E4 I- ]/ j! MMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */! ^& Y1 M! D5 }+ g
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,+ @$ v5 P" j3 o9 C5 g5 I: b  y
MCASP_RX_MODE_DMA);
8 Z+ ^7 ~/ y7 d9 H- P! |/ k6 ?McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,  W9 u% Q- w. A: t" u+ j
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */; t2 ^' _& T& ]5 u9 N
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
/ y' T5 T0 `  U4 X  GMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
9 H# ^, l/ M; H( E7 g8 J( vMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
  m' O- g% _4 w2 IMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */: q4 u% z( _" V" I* y
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);4 ]5 c( l$ M- ?- k! A
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
. i# g# h% ~0 C2 G0 a! d9 XMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,! a8 H5 c$ ^5 {7 y. [
0x00, 0xFF);
/* configure the clock for transmitter */+ z  F/ i; M4 i9 C- ~* T* c& \
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
! m; u' z3 @7 `6 S4 d4 E) [McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
1 F5 W6 C. h$ ~3 y, u2 {McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,- ]: C" ~( ?7 N# u. }
0x00, 0xFF);
8 V  N& k( F( }4 O0 h6 o* x$ E0 {
0 ]% ^- c  b$ m/* Enable synchronization of RX and TX sections */   ~. r  n& c" u/ I& r
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
5 u3 I, F5 W9 DMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);  f+ Q; r8 S4 @0 ?) A$ S* N' `
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
* P6 N6 Q+ J" a# x7 o) t' K! q** Set the serializers, Currently only one serializer is set as8 t# H# ]) R# c. i) G
** transmitter and one serializer as receiver.
  X0 b' p0 k6 Z( X7 E*/  O3 G$ v" x  w3 i  I0 A. K
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
( t) a' Z/ H. i/ v8 C! _McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*# K5 _+ G" }% @$ ]/ G/ p3 I
** Configure the McASP pins 1 N, i# {' _4 J6 y. t. X
** Input - Frame Sync, Clock and Serializer Rx3 U6 `0 c2 P+ M, o
** Output - Serializer Tx is connected to the input of the codec
6 p8 Q6 Q/ {4 c* T3 _/ y5 y! Y*/
% F  `% O  K4 _6 }1 OMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);2 n! u+ H5 I5 k2 U, z0 `2 z4 E
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));0 s( J% O+ H) r
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
6 T/ A  }8 D& ?. S4 {3 ?| MCASP_PIN_ACLKX. d8 z6 E. S# Z
| MCASP_PIN_AHCLKX
, s) L1 i, J. {4 y6 T! Q- |; O$ _| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
* x* g  o% ~& U2 a1 X% O& ?( [McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
& A6 K/ a& A- Z! F' G3 L5 {" K| MCASP_TX_CLKFAIL
- r2 g* }( B# x3 }& [3 I$ ?" c+ O| MCASP_TX_SYNCERROR; m* ^. k- B# `3 M" G$ I1 H
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
9 `4 K7 ~; W0 l& X/ a2 N! h/ c# ^| MCASP_RX_CLKFAIL+ x2 Q) S- P. @4 W
| MCASP_RX_SYNCERROR + c$ o) p- c4 ?6 [/ h/ ~+ w: [! T
| MCASP_RX_OVERRUN);5 ~  r0 Z; P1 n5 \0 t2 T
}
static void I2SDataTxRxActivate(void)- r) W* L$ r" W" M8 j0 C3 e
{$ f6 \6 D5 M0 a, r' h
/* Start the clocks */- _) c1 z% Y2 D" b. S6 _
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
! r# f" Q( J4 u6 N/ uMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
8 A. u; z" I; x) q, pEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,* q  }6 H1 p9 n$ S% K: W
EDMA3_TRIG_MODE_EVENT);& @1 [0 s$ u' X- b8 F/ F8 ]0 G
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 1 L# I% g% F/ E8 {  e" X! Z  X7 |
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */2 A# x5 n" e# f3 Z+ X5 u- o+ v1 h
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);- F- H# O/ L/ q
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
) \6 T: W2 Q- d5 a# D/ Ywhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */. w: i  `& }  N+ G9 b% W
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);, _% E# ^$ B& F  V0 U; {& D, m  H
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
2 ?. W- s$ m' [0 O! p5 S& ?2 _}

* z% @1 C( Y7 |0 J  E
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

. e( k! M- i* S7 D3 L6 Z% Z6 C9 C. @




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