嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,0 i  j" ]+ t7 _' g, }
input mcasp_ahclkx,
: w! k3 k# Z- H. G' K; V* Uinput mcasp_aclkx,
7 R- `- S3 ~4 Y( Yinput axr0,
' O( b& Q0 Z. m! i' r! w
7 ]. X% y) O% houtput mcasp_afsr,
$ U' p( _2 o, }" E; Loutput mcasp_ahclkr,
4 C$ @9 j9 d" ~0 [1 N2 L# aoutput mcasp_aclkr,
2 M: ]: x/ _* l+ C+ }; @3 routput axr1,, S# ^! p+ b  \
assign mcasp_afsr = mcasp_afsx;
4 ]1 p& {! y" Z+ E7 @assign mcasp_aclkr = mcasp_aclkx;
9 q# \% C  x9 O/ Iassign mcasp_ahclkr = mcasp_ahclkx;5 b9 U3 r$ m& o& s4 ?; T6 N0 V+ i
assign axr1 = axr0;
' w2 ~* n$ Y2 @2 n
+ g+ x) G$ W  G- l2 ~: r
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
" I& L9 J. G' u
static void McASPI2SConfigure(void)& [' e+ S5 U& N% \% b
{* N: u$ {) ^7 T6 W, E5 \' ^# d
McASPRxReset(SOC_MCASP_0_CTRL_REGS);7 X5 T0 S$ ^7 V9 ^4 x
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */8 K/ n/ k, g$ W% j) D
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/ X0 M* Z* G0 t' b9 XMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */3 i' H4 N: e% Z* h8 Y% Q" Q0 j# N
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
0 ~1 u0 b$ z& M! z! t* S5 M7 L/ u! kMCASP_RX_MODE_DMA);
3 P3 T9 P# P$ \8 P2 EMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,& m# x0 z) t4 i" I
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */) Q# E# {! h) _* x
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 7 s* ^$ d7 O& N( g
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);1 Y/ H" j+ ]8 w2 \+ v, \: q/ Z
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,   U6 n  F; f7 c6 \
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
3 \  \* a* X' C0 R! CMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);( R$ f6 W0 @" {$ l& s" z1 I
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
) i2 \, G$ R$ r: m4 AMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,2 x4 J- v- Q7 R; O
0x00, 0xFF);
/* configure the clock for transmitter */! y  g  X; u( u# V9 H
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
: q( l- [# d* L3 U1 Z. u: hMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
5 @$ k; [! j! B$ h. {0 H. @* EMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
% O6 m7 c/ _" q8 D% ~0x00, 0xFF);4 A% k* e" u" ], p4 B

6 ^1 o) H$ O* L# B2 G/* Enable synchronization of RX and TX sections */ 2 Q0 H2 T0 f7 a. m  i3 ~
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
4 L: \- t/ v( Q$ g) RMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);/ l6 e% E' A' R/ m
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
( H! D, \  s7 f; ~/ j6 k** Set the serializers, Currently only one serializer is set as) e. H& g. h, J7 A% T
** transmitter and one serializer as receiver.8 N: T) W& _7 `/ g
*/
- @* d& T2 _( g! _0 [4 GMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);, n/ \% \) T  }# |" a
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
2 t: V8 W9 k- N& W** Configure the McASP pins ' P, L0 b3 Q/ a+ \8 i2 G% l) _
** Input - Frame Sync, Clock and Serializer Rx
2 e7 n$ H* L9 h( E** Output - Serializer Tx is connected to the input of the codec
' Z- O; o% A: S7 B2 }( n# `*/  n8 ^/ p& X5 |" p; j
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);- T& d9 ~5 D. ]9 P, E! Y
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
  q3 y  M# U  Q* N  V8 f6 s4 GMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
+ g# I9 {2 o. Z8 ~* q4 a# O| MCASP_PIN_ACLKX# J/ q( s$ g' B) E6 q
| MCASP_PIN_AHCLKX# d; q" L" m, r; ]. c3 |) r
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
2 n3 H& @- G0 _! I2 P! vMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR / I! V. G! s" \
| MCASP_TX_CLKFAIL ) d  S  ^$ q( R; l- L/ @5 U4 f
| MCASP_TX_SYNCERROR! A% l- s' v. Y- k
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR % _% t& M. B/ S: C3 U
| MCASP_RX_CLKFAIL
8 M$ I  U. E' @* K| MCASP_RX_SYNCERROR ! |2 y/ P. g7 W) s: y% |4 z
| MCASP_RX_OVERRUN);
/ f- w. w$ q+ g1 U}
static void I2SDataTxRxActivate(void)6 r6 Q" H5 y7 w5 k4 \
{
. R- Q3 Z/ E) c0 e& ^1 O' b/* Start the clocks */
& u, o3 s+ x: P# U  u; hMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
7 Z" j* @1 c* c8 gMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
: B) Y8 b6 d% uEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,2 T( L( K( S1 Z
EDMA3_TRIG_MODE_EVENT);
3 j/ J; I1 @, h2 g9 A6 j; EEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, , r6 S7 f8 n0 r2 E
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
# W% E, X! l: q  f7 a' BMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
" p+ _1 K; s6 d$ f, n- sMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
! |3 l( a# L# \while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */1 S( x, ^! u0 j2 C6 p4 D
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
; q) G7 z& e/ B# p3 J% ~McASPTxEnable(SOC_MCASP_0_CTRL_REGS);6 d, W0 E* W( c9 B) c7 L; j9 z
}
3 P% r& k, p, s) r0 O8 \2 ^2 U
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
- @6 Z8 C2 i9 h8 n5 [: j3 \0 C* n





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