嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,1 x  H( e+ ~7 w, a1 M7 [
input mcasp_ahclkx,# t( C4 z- J1 \- r0 j' X9 e# q9 s0 o
input mcasp_aclkx,
# t) {, Q  f; C  X3 v1 Q& rinput axr0,, C4 A& R- w; ~7 m  Z  f: b5 C
0 \" c8 l/ X6 p/ q1 v+ Y% x
output mcasp_afsr,
/ ]% N. ?' }- H7 e8 Zoutput mcasp_ahclkr,4 h7 U& h% P$ d; E9 ^9 l
output mcasp_aclkr,
2 y( ]6 w$ t8 n% l# Z+ routput axr1,
- m5 C9 b& a8 E; b' {- z) t- w0 _  W
assign mcasp_afsr = mcasp_afsx;
( z, a/ S: d5 G/ Q( Passign mcasp_aclkr = mcasp_aclkx;8 u7 n/ |2 F' J# t0 C, U
assign mcasp_ahclkr = mcasp_ahclkx;/ g9 h) e( b; u, m9 H  R7 b# G' o/ v
assign axr1 = axr0;

/ v9 R: b4 O" o  |  P& H- e+ |) F- L) c9 R; u; {
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
5 @9 p* B3 F% r4 ~4 ~# O' h
static void McASPI2SConfigure(void)6 ?  Q4 }+ l2 i# h  h
{
% X5 Q! n# c& N# J9 I" \" PMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
$ I$ I  e9 e9 z  p- `* H+ fMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
6 D" b6 X/ u, D' a( ]/ C) ]McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
& W% s) T) A* I) Y6 d0 m$ MMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */( H5 |' ~, _( \, h9 v: k
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
7 Q# X( Y' j! [- s" ~0 I- c9 r! T' SMCASP_RX_MODE_DMA);
  j, z) ^. w/ E. ~# }8 |6 yMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
, l0 s, a4 w0 @. Q: R% ^MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
( u) q* o9 Q, i9 R! w; b4 d5 d. iMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,   W0 ~/ J. |( _4 [
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);3 C0 s# d) i5 s$ r
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
8 v( t# q5 @- H0 aMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
. W4 s% ]: ^: x4 a9 gMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
5 D+ G: _$ u6 \) q' j5 F! ?McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
, y( [1 R( g1 H7 Z# r2 T; {McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,; J& y( Y) k0 B$ d! E. G& H
0x00, 0xFF);
/* configure the clock for transmitter */8 m4 C9 m+ o' b1 X: _* Z3 ^
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
. @& m( L. j2 u8 }8 ]* \: [8 c' ?! pMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); " x+ C, ~. a2 ~' }
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,+ P% Z( x& {$ }) z6 M
0x00, 0xFF);
5 F, K/ _% w& H
) q5 a4 n4 j$ u/* Enable synchronization of RX and TX sections */
- m( u* V1 Y  J0 q* p0 LMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
, |& E1 ?( G. e6 ~+ XMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);( j! a) T. J4 A! c$ M5 z/ ?- G( t8 s
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*/ L) q* q7 \) j7 f5 U; f, O! }, t
** Set the serializers, Currently only one serializer is set as
4 _! U/ [1 N  i% `1 f  E** transmitter and one serializer as receiver.' [- \" m, B$ a$ j+ i- o
*/
, o% l# n8 _% k, s+ qMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
( ]5 h/ J% o/ n! W$ T' e/ v6 C; iMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
# \  U  y! `1 U- D+ U3 M' [** Configure the McASP pins
" g9 g0 ]) E/ k** Input - Frame Sync, Clock and Serializer Rx/ {( ]- {& ?2 H3 o6 A9 e! B
** Output - Serializer Tx is connected to the input of the codec
( p. u' P% w! X* s! l: Q% m*/, V4 j7 M6 G* l5 E. H
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
6 _8 A0 W6 ?  PMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
: b# ]+ Y7 }6 U. J$ w8 pMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
" F* N  S  O! Q7 E| MCASP_PIN_ACLKX% N/ `& e4 T2 n. D+ U9 G5 d
| MCASP_PIN_AHCLKX! `- C& O  U2 J8 w- ~4 |0 r
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */. ^$ `. X6 p' b* ~% M3 d
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
) W: R# L/ b" Z! P| MCASP_TX_CLKFAIL
  j* O9 ]! Q( Z' n* M1 t( a/ h| MCASP_TX_SYNCERROR$ z) v. U8 G0 e3 \. [5 g: g  d! O/ @
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
) x( [$ |9 ]/ a- j0 o5 f& |% O3 a| MCASP_RX_CLKFAIL
/ w1 K' C6 Z4 `. ?: d| MCASP_RX_SYNCERROR
$ x2 K' Z* s  f/ E| MCASP_RX_OVERRUN);
/ E: i$ g  {! L% T! m1 @}
static void I2SDataTxRxActivate(void)$ ]+ S" m& u6 o* g; \* K
{
2 O  V% O$ Z. d0 `1 i/* Start the clocks */* R! [$ B0 }! R2 f
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
0 B1 U* p' c4 l' gMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */; X% t3 o, w+ }( g# B( k$ e
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,/ Y% G) f( ]. E5 b  P+ I$ E7 F) k2 g
EDMA3_TRIG_MODE_EVENT);5 p; i2 d9 m  `0 b7 w6 r
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, : `, m1 J6 O  a3 a: F7 {0 E0 J
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers *// r/ c. r5 w& N% U/ G8 d9 V4 ~
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
' }4 ^* t" t! s% W! ?9 ?- g6 mMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
; Y  G" @4 e' I( V( x0 h( q5 Z. Y6 nwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */* Z: g' \$ v) F9 Z$ H+ t
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);8 p! j! G: G2 }1 y
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);* ], b4 Z4 o% o" n/ W
}
( `' T0 }9 N# Z* I  @1 N  n
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
8 T/ T& O0 b2 K6 o# l





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