嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,2 Y/ F$ c' p: M6 l0 ]% D
input mcasp_ahclkx,
( {2 G, @" e4 @1 |. S; hinput mcasp_aclkx,
& Z% t5 x  f; Qinput axr0,
' |" O; T; A3 \: m
3 p3 m) e0 Q$ c" r: j$ Joutput mcasp_afsr,( l' }" k) y/ ?4 b9 B( |
output mcasp_ahclkr,
0 h& C2 R& Z! k5 ioutput mcasp_aclkr,
9 Y. v( V( a4 x0 P1 r) {output axr1,9 u3 N/ A+ B5 {, Q% N0 Y
assign mcasp_afsr = mcasp_afsx;4 o1 @9 }1 `. {$ J
assign mcasp_aclkr = mcasp_aclkx;
2 t$ V7 b1 C- \& V3 S! eassign mcasp_ahclkr = mcasp_ahclkx;
, h1 ^1 f' U" [0 |assign axr1 = axr0;
! M; n1 s8 Z9 J7 I; h& W
0 K! R3 Q; s) ?% V- {1 O% q
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
' V5 ^, U- ~: ?- c6 I
static void McASPI2SConfigure(void)1 D# C2 J4 x& o  x! `: d+ C( _2 `1 h" L
{6 q( y# I" P+ G( }6 n# i
McASPRxReset(SOC_MCASP_0_CTRL_REGS);8 [: r* C0 I& v9 s
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */; e' _& R3 M) S, E5 z0 e  Y0 J
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
9 P, v. e/ F( {- j7 F4 AMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */+ k5 Z$ X1 s& e  Z) @* |5 k
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
1 m! b: N8 I' Z3 K4 b' v& O( M2 fMCASP_RX_MODE_DMA);% l+ g2 g/ {' T, |
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,& e% m+ G$ u6 T4 D% W
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */% N2 k; c$ x3 l" Z" ^5 @4 ?. b; S
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, & K5 m* V) q- `( B
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);6 e0 C% p+ D7 U' b( s/ n, S
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
, I; t8 L. \$ j* t" g9 t0 GMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */! R9 u, _7 J% u# ~. g( {2 r% ~
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);2 ?9 b. T& ~& z0 M5 |6 n5 X, \
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ; b) a9 N% T. C9 Z$ P
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,0 Z; l% Y' Q# k- }* b
0x00, 0xFF);
/* configure the clock for transmitter */
. P+ ^5 k3 c9 K+ H, F( G- u$ j8 I# uMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);5 ~& Q% |; x. m) \7 Q% l4 W
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); # F; \8 A" }3 T% z& u9 [( I
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
; ?6 C: `# X' d& _9 h" a7 H* G0 H0x00, 0xFF);
" j7 o/ v! \- q) m, {( Z+ k% y4 I3 ^' c0 P5 H
/* Enable synchronization of RX and TX sections */ 2 H7 m. {" B5 N; Z
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */, P2 l' ~8 e, _, R3 b1 p9 E# r
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);7 ^  [: e6 A! u% ^/ d
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
( i% w9 _* \' e, d* u. k- [** Set the serializers, Currently only one serializer is set as+ `- [$ T6 F* L% `- c$ a7 k$ ^
** transmitter and one serializer as receiver.
0 y; y! J* e* ]7 E/ t, H*/
. \4 C- _" @$ L7 h7 HMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);0 M/ n) s& P: H, W# }& |2 G
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
; V$ y9 S& i: M5 @( K** Configure the McASP pins # {. e  p" O- U* |9 o
** Input - Frame Sync, Clock and Serializer Rx* h2 G, l8 \! G: n! h# M
** Output - Serializer Tx is connected to the input of the codec
( m2 `* ~, ]3 L+ O; ?) V4 ~4 E*/9 |1 T- r$ K( T" _7 E
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);& p% Y' O. U* S6 B3 S  U% ^7 Q
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
, n8 r# d; h0 q' WMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX! {; ^# `; C# u; ?' b7 Y
| MCASP_PIN_ACLKX
' q/ u) T5 }( h2 ?% S' W4 G& Z' D| MCASP_PIN_AHCLKX2 w2 M# f+ s: m* b$ L
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
  M- g0 \- \- b* `McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR , T5 x) J) Z7 [$ M- X/ i$ p
| MCASP_TX_CLKFAIL
$ l6 w/ b( I# c| MCASP_TX_SYNCERROR
6 D7 T0 R' x( v, F0 g" t5 q| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 2 n4 f& j& X  Y( K+ Y0 D
| MCASP_RX_CLKFAIL' m6 u3 q) `4 E- u( H( ^1 `$ Z; x
| MCASP_RX_SYNCERROR . f/ \. q  z! W8 [' z# o( p% R; T
| MCASP_RX_OVERRUN);
" o; H# Q4 V3 E: P$ M: H1 ^: l9 v' W7 F}
static void I2SDataTxRxActivate(void)
9 K$ v2 o7 N3 ]0 H# G& a) y{# n# k/ X7 ^4 M1 ^
/* Start the clocks */# @5 t/ Q6 ]$ j5 w
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
5 |  s8 `( M5 [7 YMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */: ]1 L) G. H* Q$ f. ~9 W
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
: i+ b( z3 @6 K$ [+ n9 p% mEDMA3_TRIG_MODE_EVENT);/ Q9 t% D0 g4 E( R+ f3 r
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 2 H# E/ _7 }! Q: d6 k, {7 D- l. N
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers *// e$ V0 p2 h; v" c8 ?0 a+ s5 k
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);( ~/ ]8 T# B2 M
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */7 A( f- q4 `4 R, @$ ]9 f' U, T
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
) ]- {' E! o, w# ]' }McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
3 A; s9 s) ~  j4 Z; d  CMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);: o3 k3 z3 E9 i1 y
}
: W4 e/ L( a* f& O$ \, U
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

1 R1 y; D, P1 q6 G2 p  Z




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