嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
# M0 ^+ T" v# Z" a. j. y& |input mcasp_ahclkx,
0 A2 I% m/ V, m  [& ^. O" uinput mcasp_aclkx,
" T4 y9 H7 x. \! oinput axr0,/ q& S0 Y& C2 O( e
' ~$ r# s+ W% |  Q% f
output mcasp_afsr,
( t3 d7 v5 F* Coutput mcasp_ahclkr,
9 H) H' F( {. h1 c7 [output mcasp_aclkr," M  T$ z! x3 u" m: b
output axr1,# N8 _/ a, ?& C$ f" o
assign mcasp_afsr = mcasp_afsx;' w, T, ~! \- k. Z/ m# M, L% I
assign mcasp_aclkr = mcasp_aclkx;
' {' _% j3 p3 _( V3 j2 @assign mcasp_ahclkr = mcasp_ahclkx;
9 `2 N: f& L) j3 v; F* @assign axr1 = axr0;
/ N3 }) }) p/ _& A# _9 Z6 q, ?) G, `4 Q
+ J* v5 W1 q4 ]3 m. D* ~
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
' o/ Z/ q& f: N, G- c
static void McASPI2SConfigure(void)) e- n7 F" B. N- A- f' T
{
: c; C% f9 b' F; B* G! kMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
' }- s8 O7 {1 U) MMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */2 {1 j& B) j- ~8 c8 i
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);! _; X; F! t. [5 [) z
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */% ^$ s1 Y6 Z1 l/ _4 e
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
& ]* r/ h- Y3 j/ ]9 C$ LMCASP_RX_MODE_DMA);6 k- r8 b: @3 z0 x
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
, W2 v% X  z, [# N9 _! k/ vMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
! d# n* T1 H3 B4 a1 V/ f. Q, vMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, % ]9 c! r6 e+ ]  j+ M
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);2 R8 b& X( f3 F# \. w/ O1 l
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
/ g$ G! P3 ?5 r" T8 i% _MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */& t; n5 @. Z- P9 q  @+ _
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);, W/ @, i& D0 S& M. ?0 W
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); - A* |6 T6 E/ b% o' j7 E  W9 ~7 P
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,2 t' j; Z6 h/ M8 G1 f& f
0x00, 0xFF);
/* configure the clock for transmitter */: k5 t1 `+ k* u, n" c% {
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);+ W# T8 v. `$ Z1 Y& x
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
3 W$ ]9 V: T) U, [0 |6 H, ZMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
' c  ]8 v- J8 m( f% T+ C$ v/ Z  p# u0x00, 0xFF);$ ^: X- r9 c, G+ E
7 |& \  s" P1 e# s, i+ _
/* Enable synchronization of RX and TX sections */
7 [! m8 @# h+ H  ~: ZMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */8 P' Q: E( {6 N8 z4 e6 j$ d
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
- E5 V- t" \4 J8 fMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*. f3 `5 r& X0 G4 r& x& V
** Set the serializers, Currently only one serializer is set as; K" c3 k$ R3 ?& g" P
** transmitter and one serializer as receiver.! s/ N5 d% w0 x' V' ^, ~
*/
2 c2 A& o* T/ ?, Q) Q9 ^McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);' q# R8 m# @" `. I0 j7 Y$ ~
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
; H' _* m, y4 w0 Q; D** Configure the McASP pins + q* H& C& A5 a5 b1 H
** Input - Frame Sync, Clock and Serializer Rx; }5 M) L/ c5 V
** Output - Serializer Tx is connected to the input of the codec 3 o4 W( _* j5 F, Q) K$ f
*/
3 K0 ^8 b. s8 O% nMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);2 O$ D* H# V1 j% a9 H2 k
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
3 o- W  A3 c  H+ Q9 nMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX( Q2 z2 L3 R, j0 s( f
| MCASP_PIN_ACLKX
3 v9 g" P" p- n| MCASP_PIN_AHCLKX* i  `5 z1 e: E" D1 r
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */, U: X, B! _: P* |' P3 W
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR - V4 q- W8 G: g8 h6 I5 O
| MCASP_TX_CLKFAIL
" `! h) u9 \) r& }" u" O| MCASP_TX_SYNCERROR
) r) B. r! [/ P3 ^" T1 ~, ]| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR + B3 G& w" l) D3 F, v- |
| MCASP_RX_CLKFAIL' t% S5 W5 Y: T9 R7 W+ ?* E
| MCASP_RX_SYNCERROR
# ?! M% v0 j7 t; k, p/ a! S| MCASP_RX_OVERRUN);
# S% S( w( b2 J% U}
static void I2SDataTxRxActivate(void)5 S9 M5 i7 r# _4 h8 k
{
8 I9 U+ d5 `6 h/* Start the clocks */
/ i& Y) y0 c! X9 _McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
6 ]3 ?9 Y) d; L3 J6 d2 p% ZMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
2 m# s# R  u. _' Z5 m- p6 a# BEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,& V. D7 e; ~" h' ^8 a
EDMA3_TRIG_MODE_EVENT);$ j  E; u& V, `0 ~' \. b. d
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
* j# Q! p0 r$ |# @EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
- |3 G' J) Y6 j/ V# ~6 T! v/ QMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);7 `4 _! y0 F" |$ s; Y
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
5 h  c" i  G/ @( V/ F# `1 Zwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */6 N) g- m( P/ S9 P3 H8 P, B' ^7 q
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);& B' M( C: i  l5 p+ m
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
/ w7 S  L: l" E8 d}
/ n0 t5 }; P& y+ p- G
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

$ `3 ~* l' j) [




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