嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
, f7 H. [, R& g' R, A) C! Pinput mcasp_ahclkx,% p' ^0 }0 H6 Y* A, N& N1 W% q% s
input mcasp_aclkx,* J1 Y  T, z8 a6 T
input axr0,- T# ?9 b" B5 A. y
& C5 i, r/ m% X' P4 t, M9 O! y
output mcasp_afsr,4 F% u8 M" a7 O, |* B2 w/ i
output mcasp_ahclkr,6 z5 y, `, ]# d7 V1 k  S. N  e
output mcasp_aclkr,$ R/ {( E, i# _: A! O; a* r
output axr1,
2 l  P0 {. ^. \) g
assign mcasp_afsr = mcasp_afsx;# h% @$ p) ?% y: e% y. Y* t
assign mcasp_aclkr = mcasp_aclkx;
! E  p, s# s( f$ C! z7 Zassign mcasp_ahclkr = mcasp_ahclkx;
9 }; u# x1 B% i+ @: Oassign axr1 = axr0;
  n7 H; p: G7 h' u9 f

, q1 W  Y2 ]! ?
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

' {% \# q! I; _6 ]/ m/ x* l9 J
static void McASPI2SConfigure(void)# N1 L! t3 ]: w  m7 s9 ]3 g0 G0 A
{
; L/ D: V6 e/ aMcASPRxReset(SOC_MCASP_0_CTRL_REGS);0 K( t+ \/ l; b
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
$ }0 m# U+ ~; ~* X6 FMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);* j" c# k7 ]9 A* |1 j' W
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */, ~5 i+ y: \7 p, J" Y0 R5 V
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
: j5 r. v3 e0 C; ^0 vMCASP_RX_MODE_DMA);
$ u4 `6 t# l+ E+ l/ P5 TMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
# U- S0 ~) m4 m5 d6 VMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
- z2 q( I5 l& t. ~# a9 q8 p8 b7 @% mMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ; L- U* e* C8 T# _
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);: H0 g' \0 Y  q
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
4 a# I( e0 Q- V# vMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
* a0 o0 |, `2 u. p5 M& u# SMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);( O0 y' G8 m4 n5 Q) P/ ^
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
2 a9 B6 S0 i, a! W; LMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
. V7 P* p& G6 q* ?) ^0x00, 0xFF);
/* configure the clock for transmitter */
4 ?; ^9 Q: s3 R8 x) KMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
; X8 [' T! S& w5 ~4 h$ e" lMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); - m! T- d3 {" T
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
# Z9 [: ]+ }9 `! d% H: y  ]4 D0x00, 0xFF);
; E) L& r6 N. u. M9 |* T
3 S$ m: M, Q9 R' N/* Enable synchronization of RX and TX sections */ : t, {2 [2 f- m  @' Z$ @5 }
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */9 \' G# m4 a3 I
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);) y% L& W% z- M" Y* l2 u
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*. }$ x  {" E0 E1 X, R% b+ o
** Set the serializers, Currently only one serializer is set as
) H& Q$ s, }; P** transmitter and one serializer as receiver.0 f3 v  U9 |6 m- G
*/7 a8 e9 M* a( [+ i6 {4 ?  i( ~
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
7 a0 D6 D3 J+ b7 j) ^* _McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*5 b! D1 B3 p1 c  k  X7 \
** Configure the McASP pins
0 f! B4 N1 J- c: q2 a4 M** Input - Frame Sync, Clock and Serializer Rx& |$ k: S. ~- u3 I' `" w6 Z
** Output - Serializer Tx is connected to the input of the codec - g  G0 |, z9 D7 V
*// l7 |/ l6 Q% r# L9 H
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);6 d: Z  a5 i) h& v( q; w
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
: B* D  I& z7 I' m7 K7 zMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
& r9 h3 r5 }. t' {- L' \| MCASP_PIN_ACLKX3 {/ B/ Q2 H/ U+ m  m5 O
| MCASP_PIN_AHCLKX: D* N; T3 A, {2 M! K* a
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */' b; p, y/ `! o0 a9 L, u9 M9 W1 @
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
9 d8 O! \5 A6 m' m0 f| MCASP_TX_CLKFAIL
: w* g% }9 U, {4 L9 u0 R3 ~5 V- B| MCASP_TX_SYNCERROR
) x! T& Y/ {" Y5 i| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
9 Y' {! A' w" k/ B4 |4 ~| MCASP_RX_CLKFAIL0 s* {3 W7 M+ {5 t
| MCASP_RX_SYNCERROR
) l+ H/ q$ p* t- a, x| MCASP_RX_OVERRUN);, L4 K& @3 z, W  T
}
static void I2SDataTxRxActivate(void)" w# B0 M- o, ]! b) S
{( X9 c' B1 ]$ R* o8 Q: g
/* Start the clocks */
# h3 n- i1 D& }2 J% I, \! w  RMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);6 P7 e+ t6 O. @" ?
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */+ E4 n4 W" B5 B) P+ p4 M3 O
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,* v# e- L$ Y+ B" v( f& H! t/ T
EDMA3_TRIG_MODE_EVENT);
% J. a& H& Y# a5 W, x% y) FEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
; g$ T4 r) S, X1 }& C; \4 FEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers *// c8 ]* A4 E1 m7 `2 Y
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);# K1 X) B. i7 Z0 f
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */: K% J0 W4 M8 F+ q! Y8 V& O* q
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */, V2 l5 [1 l" C- g- c4 J- J
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
- _1 \0 h0 w8 O0 `+ dMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);' P, j( L. _3 D4 E- b5 U1 f
}

7 @! B- U0 ?$ Q0 E
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

+ o5 W" X( A" X( ^5 @% X




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