嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,- E$ b0 j4 k& \0 q" y$ E6 G2 f
input mcasp_ahclkx,
" {% ~* ]* [5 {/ ]$ Q% A7 Linput mcasp_aclkx,
( b7 ?7 T* t* V8 s5 Einput axr0,1 |' ?  s4 }/ m, K( P6 `

; N2 w' Q+ ^; k( Woutput mcasp_afsr,
  j( d, J" B- V; k* g& Routput mcasp_ahclkr,
! A& S# y4 q; k/ ]7 e/ Doutput mcasp_aclkr,) y7 E7 k3 u+ K9 c, H- c+ T
output axr1,9 e3 G7 h/ c8 B: t0 z
assign mcasp_afsr = mcasp_afsx;0 Z  Z1 b/ _8 l7 ?0 E% i: c7 k
assign mcasp_aclkr = mcasp_aclkx;
$ j  O  T- i3 f  m, Massign mcasp_ahclkr = mcasp_ahclkx;
9 S/ i& s: p* _( u4 @assign axr1 = axr0;
) n0 \- W0 L4 y' T( x& U# g, L4 d
4 l& X' T: S( }" J
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
: K8 U, Y3 m2 p
static void McASPI2SConfigure(void)
" L* B$ D/ Q! E0 Z, T. U9 [' I: t{
" D1 \: O% C: P9 Q: S( mMcASPRxReset(SOC_MCASP_0_CTRL_REGS);; d" k9 P# `$ @4 k! c- u( T
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */+ q9 C1 R' S; L: T" w  L
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);* Y# i, Y4 ]- a$ y' ~# g
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
9 D6 x4 Q7 r4 e6 m2 y6 ^( G' [7 rMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
4 l0 L3 J1 e8 l5 {- E) L% K7 |MCASP_RX_MODE_DMA);
: D) I3 j1 i5 n# O1 ]/ q9 p7 j, Z- `McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
! C( C  t7 F8 O$ {0 N/ fMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
9 U- Y9 w( a: XMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ; m$ ]$ W: v4 Q  k
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);9 I) H1 j& L' Y( ~/ ]% |0 f, W5 f
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, . O  b; E. o8 f; ?
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */( r4 g9 `) N: ^6 v6 g0 ~2 r: E, _
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
# p9 f, Y6 v/ ^7 m9 ]& ?McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
* P, m' T. X) f: pMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,5 A4 X! m3 S8 ~4 g3 j
0x00, 0xFF);
/* configure the clock for transmitter */& D( o1 t7 G; `  i
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
' G6 K9 B# [9 t$ g' _6 S7 H3 v4 iMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ' z7 r# a0 c; \+ e( N3 q
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
' Q+ y, _5 e- f( ~! s5 H0x00, 0xFF);
" E  Y" t' [3 c$ ?  `
+ d+ |# T" E/ L2 V5 ~/* Enable synchronization of RX and TX sections */ $ ]1 L7 J- Z- `* X  D: M3 o: j* w( w
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */; F) [6 F+ z( B6 f+ D
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);5 p) ^7 f8 {+ W4 @: D( |0 D3 b3 c) K& ^
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*1 H3 {& T: I6 a' X3 ^
** Set the serializers, Currently only one serializer is set as
2 H6 J0 l$ \) x) K** transmitter and one serializer as receiver.' s4 u7 N5 [& U! I* H
*/4 M4 [7 d: G% T" Y  f
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);! `- N1 X- A8 u6 d
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*3 W* f0 H' X  _( H
** Configure the McASP pins 1 s3 N5 N9 ~) i
** Input - Frame Sync, Clock and Serializer Rx
! c7 L* v; @( p" }$ e1 G6 C, Q** Output - Serializer Tx is connected to the input of the codec $ x- n) F1 S+ q" i
*/1 ^2 A3 E( a( m7 y/ v
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);2 }" V: t& h4 e& [9 _( H. c
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));* Z, ]+ }. w' c* l$ t& ~$ K
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
8 I1 V7 Y5 m2 R& h| MCASP_PIN_ACLKX# ]* U! A9 I8 J8 j- ?. A
| MCASP_PIN_AHCLKX
8 F* r/ i) O6 a| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
' `8 D0 p  D% d, M$ ^& j7 }McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
3 f* y6 T4 Z% |/ y0 @3 H| MCASP_TX_CLKFAIL : \; p2 r6 b, k
| MCASP_TX_SYNCERROR8 C$ Q% D; K3 _7 s7 S
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
' a/ F# u% S+ ]5 I: x( z) X| MCASP_RX_CLKFAIL7 P- u( q2 x8 S* Z+ U) l: u
| MCASP_RX_SYNCERROR
0 }% s- M4 e3 Q$ R! i| MCASP_RX_OVERRUN);
0 s* k( ^" a' O}
static void I2SDataTxRxActivate(void)
, g4 z. b; d) G7 X$ l. v( X{
; l1 s: W9 L. Y/* Start the clocks */
& H) E# w  d/ C9 T% n: CMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);2 O' S2 }  `1 D/ Q5 M
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
0 A1 v' w' h6 y" s1 T% [EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,; p* B: v! J5 ?' Q. T# a
EDMA3_TRIG_MODE_EVENT);
/ p0 O! P2 R# U5 G- N5 ~& _2 YEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
' q- l! Y' r) N7 _, {. J; JEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */" w" d4 e6 L. ]  c1 q8 h
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
6 j% m4 R) Z. r/ c3 nMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */) m0 C& h" z9 |5 j3 d% @8 a
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */- C  C( _4 ]( U1 d
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
6 Z3 Z3 A9 u5 G5 R9 BMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);  z; [. r( {# D- H+ Q7 U
}
5 e2 h' b& S# \7 v, n( ?( n$ |( H; L
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
* h: ?# H: t9 P) f6 J9 c: e. v





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