嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
& |! k: p6 S9 S: tinput mcasp_ahclkx,
5 [: W  }7 E: ]' ^  Uinput mcasp_aclkx,
& k9 U& {3 ?4 S9 _3 {/ h3 zinput axr0,
9 A0 V$ |6 I' }& S: S3 ^
# T; t: p& }) }% {* k7 H9 soutput mcasp_afsr,( c* U6 d: ^4 U" O$ Y+ h6 V- A0 r, L
output mcasp_ahclkr,
  V' C0 ~! Q; N; Voutput mcasp_aclkr,
4 p% s& t4 a# moutput axr1,
+ w6 g" V1 E7 r9 ^! y# ?
assign mcasp_afsr = mcasp_afsx;1 a* V! i! U/ c7 Z. D0 r3 m
assign mcasp_aclkr = mcasp_aclkx;
2 O( V0 u! C3 j3 M( k7 I, [assign mcasp_ahclkr = mcasp_ahclkx;& N2 S) M9 [1 i: I/ c
assign axr1 = axr0;

# I- z0 j$ S  h) u( n3 d7 C9 _7 v8 j# A4 y8 ^( O
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
! Q$ r' S9 n: p1 \7 s) m# |
static void McASPI2SConfigure(void)
5 y  A1 U, I  l! d) a{
- R5 Y% c: K. E3 ?# s  `5 \; AMcASPRxReset(SOC_MCASP_0_CTRL_REGS);$ m/ {, l8 ?9 s4 f3 ~) a7 R+ |, V4 `
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */$ g# H' ^& n9 y2 \
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);9 N+ j6 L/ k' C' W2 k
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */% g4 F6 ^) E; E4 X3 v# h
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,0 B: I+ M/ e& P
MCASP_RX_MODE_DMA);
: ]7 S* e7 l7 P) Z( iMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,, z& w: l% \: l" A6 z9 i, I6 F5 y* H
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */0 k+ a- L( a. }8 ~0 O' u7 j: ~
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
9 o7 P7 R" V& ?% D( hMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);- S8 S% ^$ e. X. z1 Z4 H. X
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, : B# b2 @& x5 Q) X. X( z
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */8 c' E/ E/ L. V8 `6 z* u
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
' T0 I7 q7 y5 SMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
) b, O& H0 H* ^McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32," j- c, b1 f% M
0x00, 0xFF);
/* configure the clock for transmitter */
+ B. K5 W7 _9 w8 Z4 i  LMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
8 p2 l+ I" ?' XMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
8 Y+ y9 Y% \5 q+ S* z7 }! dMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,5 b  T" B. B! |
0x00, 0xFF);4 a4 L' ?1 q: Q( ?! U

( e0 n7 x3 a( r8 X0 k- Y$ j8 g/* Enable synchronization of RX and TX sections */ + V1 `4 H0 K+ b# ^' K2 {2 [5 {
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */& k, U  q! k5 I. S
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);+ L" k. m) Q5 E6 l
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*- J4 X5 ]- K4 K; g3 q
** Set the serializers, Currently only one serializer is set as; y& `: T2 f; f8 V' H4 T+ X! p
** transmitter and one serializer as receiver.
* e, q: d3 P) t*/
& v) B, X+ l8 m% b! j0 ~2 pMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
  `: f  a6 A. t' QMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
+ n7 c! }8 u, ^* G( \** Configure the McASP pins
" n( I5 A2 T' G1 n" E- R( ]** Input - Frame Sync, Clock and Serializer Rx
. W' I1 o! K  t8 n' [8 m** Output - Serializer Tx is connected to the input of the codec * f( a9 k' R% E. a5 Q
*/( U; n* u$ g+ V$ H8 S" [% {
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
- P. |$ _5 S4 G: qMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));9 K" m+ M, K$ T3 a( w9 o
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX$ `% X4 O5 J$ t* }, {/ C
| MCASP_PIN_ACLKX
- ~" x- Q2 W: D4 _) w| MCASP_PIN_AHCLKX! j% m" n% ~6 I1 m/ c5 T6 r& W
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
( J2 M0 P% B: j5 g; _2 y4 ?McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ' O1 S& ~: s! G& q) h( S" V+ u
| MCASP_TX_CLKFAIL 4 S- T7 K2 M2 @2 [$ q
| MCASP_TX_SYNCERROR
  G0 j5 u" L; Y2 W% s/ Q- Y, i! y| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 3 K3 l) z" E% f2 G# n% v
| MCASP_RX_CLKFAIL$ ?$ k' @, U4 _3 k9 L3 \
| MCASP_RX_SYNCERROR
7 ]* b4 L6 m- [* _| MCASP_RX_OVERRUN);
8 K* _! }' s# k6 t. H6 ^2 D}
static void I2SDataTxRxActivate(void)
: S2 L" i5 B9 ]! c, y7 a; ^3 y{
% }+ r; b) y* o3 a1 W' i* m, j. C/* Start the clocks */4 ?. k( u& {, q: l
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
2 t3 F7 O2 Z' H6 J8 TMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */$ r3 l* a. B! b% A
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
# s7 u+ k( v' K* p* v1 x, CEDMA3_TRIG_MODE_EVENT);
% A( M: x4 M; M; YEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 6 L4 a* f7 @  v& a: b0 Y
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
% C4 D+ R8 o5 \8 uMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);, p/ X0 C' `9 A& y
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
, o. ^7 f/ \" h0 X+ D# zwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
8 R, _; L6 `: ?McASPRxEnable(SOC_MCASP_0_CTRL_REGS);" p4 h/ C( M$ V1 D
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);/ ^! M9 C7 J# P- ?# q0 G! }& i
}
4 v% Q/ N6 X' d4 i, Z. Z
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
; E; g+ ~) w: ^' d$ I: X, [





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