嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,5 f+ G0 Q! \. \0 j4 z
input mcasp_ahclkx,
$ Q% Y  k. a! @/ Z/ I9 Iinput mcasp_aclkx,
' J+ w2 v+ G  L- H1 z& |input axr0,
  |/ ^3 W8 E6 F3 p/ |9 Q$ a; M+ j5 b5 a3 F3 i0 i
output mcasp_afsr,
4 c3 v4 W9 ~+ c. Xoutput mcasp_ahclkr,( j2 {6 s: p8 `6 S1 `
output mcasp_aclkr,
: N, I; Y2 N/ D$ v; Routput axr1,, _) A, O. @* Z
assign mcasp_afsr = mcasp_afsx;
& d9 ~, b/ A2 a+ Yassign mcasp_aclkr = mcasp_aclkx;' X( }+ z% }7 o
assign mcasp_ahclkr = mcasp_ahclkx;5 M0 S: C" K* L6 F8 c. ^" Q- W
assign axr1 = axr0;

# f6 A" ^9 Z( }( K" T1 }# C; @  F: B* T4 v9 T  P" j
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

* s2 z, s# z' G. g! b% |
static void McASPI2SConfigure(void)$ o+ s5 [# ]7 W# N. j8 y% ^
{6 W1 p& o  e% Q5 L
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
2 m* l, R  G: r+ WMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
) j  {+ b& y! [! a, MMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
3 q% p) i' w* ~; yMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
, [8 B- I) K! F/ eMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
/ I3 g" N5 r* T. f; hMCASP_RX_MODE_DMA);: O; X* x! `$ b: m
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,% F( g) p6 A& g9 w4 v1 K* C
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
( Y8 W) u5 b; [* Q4 @7 wMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, & O. w9 b& V( @6 H/ X- r
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
6 A! z# l, C1 `7 aMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
+ T2 D7 T; p# [) g) D4 ~MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */5 _0 Q5 u& r- _) m9 K
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
  j* B2 x1 T, RMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); - Y& ~' b; D& G6 Z' G
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,( u/ J& }5 `  t  S
0x00, 0xFF);
/* configure the clock for transmitter */
7 G' \% ^' J/ z* v2 wMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);; I9 U2 G; F7 @2 O$ `! K, H; c
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 7 b6 q: j1 S8 h9 x5 K0 R+ {
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
  ?6 `! k5 P& }8 b0x00, 0xFF);
9 ]5 ?1 }6 L+ \( z4 k. b7 \/ n0 C* H# }5 b, u  b
/* Enable synchronization of RX and TX sections */ 0 {9 B% T2 p' V: @
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */2 r4 h1 P7 ~& I$ f. ^
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);9 |/ U; Z/ K! c1 u2 J# p5 `! z
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
) B7 E( w. n: K# r) w** Set the serializers, Currently only one serializer is set as) E  J* a2 e9 O7 M2 z  T
** transmitter and one serializer as receiver.+ X6 x+ h/ e5 E, Z! b8 H
*/
6 J& T8 ~% ]. {; A; Q  [# Q. _McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
% K5 Y9 o+ ]6 |$ D8 k( Y) mMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*3 ?. ^* n9 V" X7 \2 w5 }
** Configure the McASP pins   i  p0 {) b  ?( W3 |3 {
** Input - Frame Sync, Clock and Serializer Rx
" S, X" Z# Q6 n( ?4 }2 u' _** Output - Serializer Tx is connected to the input of the codec
$ A4 M; x0 D: w*/
; Y+ W5 f7 }# [McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
4 A8 u" I0 Y2 N' z5 k4 Q) IMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
3 Q+ }3 O% B# e6 `; J% HMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX: u2 ~2 l0 T% O  ^5 S
| MCASP_PIN_ACLKX. n4 [$ L/ S; p$ k4 b
| MCASP_PIN_AHCLKX% L5 i# x2 N* c. q$ x3 ]8 m
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */0 k4 {$ J1 o9 R3 ~+ R
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
6 T0 c: Z* P8 m) z' E8 Z5 h+ k  q| MCASP_TX_CLKFAIL 9 S. i4 A) T- \/ |: `. O; A; D
| MCASP_TX_SYNCERROR
5 J5 n# o9 k, b( d5 R0 L/ `6 X| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
8 s' @) v8 q5 |, ^( ]| MCASP_RX_CLKFAIL
1 _) d0 j9 \- G% J| MCASP_RX_SYNCERROR 7 J" x0 H2 A& D
| MCASP_RX_OVERRUN);' f$ H& [+ p6 p! Q$ F- a4 k+ A" J
}
static void I2SDataTxRxActivate(void)
5 x8 y# K! z7 ~4 y( D/ X* Y{7 G2 H! J4 w, X1 {
/* Start the clocks */
! G; _. n! N0 d% O- ~2 H8 I" a6 k7 HMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
7 l$ j$ U7 ^) b+ fMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */# Z2 a5 y; |+ q1 B) D/ n8 w- e, l
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
9 N+ T/ j$ F: z; ^4 |  \0 NEDMA3_TRIG_MODE_EVENT);0 M9 G+ g# M! c$ ?/ U7 T2 n
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
' R7 ?% Z8 U4 FEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
6 F7 c: S! @- ~) yMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);4 m1 p8 a. p5 `
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
1 N8 t) x  V0 f/ v# Y# pwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
" I' P9 U2 s6 |9 {7 U/ DMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);+ i2 r  d2 j; m+ v; p) E
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
3 J6 H* w9 |, S, I5 n& M}

- L6 O7 U1 p, h# [
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
4 i, E5 ?' C3 H$ i+ Z7 V. a





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