嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,  `+ {- J* v) U$ q" f6 v6 R
input mcasp_ahclkx,
; J; I) P- x& ], _2 j$ _* [input mcasp_aclkx,0 c  A0 G& j1 L8 h3 ~" g; P# B
input axr0,
0 f2 Y- L5 B, i" O0 P
( s0 L: c) d) x# y- j7 Koutput mcasp_afsr,
$ N+ X& E6 Y4 [# _0 _3 j* ioutput mcasp_ahclkr,6 s& X- X/ d  T% M* F4 {
output mcasp_aclkr,+ L; n# |* R4 u1 w3 m
output axr1,
, i( I6 i- ~% t+ V6 ~! m: ^
assign mcasp_afsr = mcasp_afsx;
7 o% j& W/ S5 X1 ~assign mcasp_aclkr = mcasp_aclkx;9 l1 P$ {0 Q( [9 ~# ?
assign mcasp_ahclkr = mcasp_ahclkx;
/ b1 K3 e3 C& V* bassign axr1 = axr0;
) O- d9 M' X2 A2 U' U; _1 u
7 t! U& a7 X2 U4 J  g
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
' e# R) G, E3 U, e
static void McASPI2SConfigure(void)
; E% B, D* x0 D{) N+ f& }& ~7 [" j* A- A
McASPRxReset(SOC_MCASP_0_CTRL_REGS);) p& i! R, U- p4 G' d5 h! A/ c
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
4 L9 N- ?, _' R+ d- z: g. x* V3 RMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
: S9 k9 Z1 {$ x, I" i" }McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */4 x2 O5 J4 u" w0 z9 \! Q
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,2 B% a3 W/ m$ z0 Y2 |
MCASP_RX_MODE_DMA);5 _9 f3 K, X% C) \" F
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
  n/ w7 L+ s  o& n6 Y' oMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
, J  h7 h0 ]; ~- t0 YMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
0 O0 D2 ], N: x' u: x, l9 vMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);; x, F4 f2 h9 O$ v
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 7 @# h" C3 c2 o& P1 i7 Y# I' S7 A6 W
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */2 {# c/ `& B' \, \6 ?% W
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
2 X" k! u" a. Y6 U. Y6 K! PMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 1 m* j) ~4 Y/ O% x0 a: w
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,! S/ z) ?$ i' [
0x00, 0xFF);
/* configure the clock for transmitter */
1 Y: Z' j& n. uMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
  }! M( D0 d: ?McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
, u, J+ q) A+ U; LMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
% D: s7 ]' @7 B$ G: `" J4 E0x00, 0xFF);2 B% X7 z( G. u3 S7 f& S
8 D5 }- }9 X4 S, E; W1 t
/* Enable synchronization of RX and TX sections */ , U6 @; e. v, y+ [
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
. `) o3 F) j# qMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);! t2 G5 p. Q; |
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
2 C1 w0 f* g# Z** Set the serializers, Currently only one serializer is set as
+ ~7 U, b& S& U9 h& t** transmitter and one serializer as receiver.
, [9 t5 }' p! A! K*/
, z. f) t, M1 |: q: s3 CMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);/ t1 F; u" y4 e3 X
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
1 x: ]; H& v" P) e- p& j' E** Configure the McASP pins 1 L2 x! c( O; b) e+ i$ f" B
** Input - Frame Sync, Clock and Serializer Rx. I4 s8 h0 j  n- a* c+ w
** Output - Serializer Tx is connected to the input of the codec 5 J' ^. \+ o" Z/ n) i: m
*// _& v$ O" k. j+ C
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);2 r/ w8 J2 ~+ m4 V
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
1 c3 v1 J2 Q8 QMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX; L* t2 G; F/ b  h
| MCASP_PIN_ACLKX& `- q/ Y0 b3 k$ e' O+ @
| MCASP_PIN_AHCLKX
6 [, ~$ F! o& f# L, Y6 K# j% j| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */9 E7 l/ D- u+ [* Y
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR / B0 i4 E3 f7 k- _5 n
| MCASP_TX_CLKFAIL
2 M2 D' F% h, V8 C# Y9 N& K/ u| MCASP_TX_SYNCERROR
6 h2 |; Q, W. z1 h| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 4 T. h2 u9 l3 C$ y
| MCASP_RX_CLKFAIL% B/ z. `: Y8 i& ~  Z: o
| MCASP_RX_SYNCERROR + [6 b7 C3 b! }! V* S8 }
| MCASP_RX_OVERRUN);
5 R7 u! T4 H9 A: w4 p5 S" X# U}
static void I2SDataTxRxActivate(void)  ~0 R3 ^1 m0 C& ~! z- o) G* O5 T, g
{
& p' J3 p- }8 ?2 h/ ^4 ?/* Start the clocks *// O/ ~* g# d  f6 Q$ K
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);, T+ A8 c! T+ f4 x7 n- _3 H* w
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
+ H2 \: O/ p2 V( @EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,3 O4 L+ q% E: P+ ^0 o+ ]5 R- c" _" p
EDMA3_TRIG_MODE_EVENT);
+ v% P8 n+ U$ m2 _  f! {7 YEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
$ x$ l4 \' B% @6 jEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
' o% |* C8 o: @' q( ^8 mMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
8 Q! I( y0 @  gMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero *// W0 P' c) P8 ^+ g8 W7 [/ P1 W
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
6 M& }4 {! ]( |) QMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
3 D; p3 t0 {* U4 a$ u! VMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);# i- F: G% q( X) c7 t
}

3 G' D+ B$ [# ?- U
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

: x4 [- x" S) Z4 F/ t- w  V




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