嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,! k5 i; @5 @- V, J9 L6 v+ U
input mcasp_ahclkx,
" s9 z6 u5 O+ H6 g* f. i7 ainput mcasp_aclkx,& C6 j9 z9 S5 `- O# r% |
input axr0,
) J/ ]" V% @& S+ r5 m9 H, ?" M( v7 R4 q: y- K. l- E( m" G" C
output mcasp_afsr,
" r' K( D# L9 q( Z: {output mcasp_ahclkr,
8 N) f1 w0 I& z, T- D! ~output mcasp_aclkr,, X5 ~& V& f: A, @  c
output axr1,4 w* j) a" W. `( w) F+ I4 ]
assign mcasp_afsr = mcasp_afsx;% p& M8 `- i8 a+ U/ U
assign mcasp_aclkr = mcasp_aclkx;
# Z4 y2 L: x( lassign mcasp_ahclkr = mcasp_ahclkx;, U# C: ~& w* {& H" j
assign axr1 = axr0;

0 a& M3 I; v% [5 G! N- u
! r" Q! v) [9 u: l8 [
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
; K' x$ G; i" c3 s7 H$ B4 E% o
static void McASPI2SConfigure(void)
9 j5 l$ {' R, V3 @. k& r" h6 j: M{0 T" ]* H6 @1 e9 Z2 k5 ]( C) {3 H
McASPRxReset(SOC_MCASP_0_CTRL_REGS);! W/ A: G, ~9 k3 r
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
, J( d- i7 U% y5 |McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);  J5 h( |/ K! V* R6 K1 O5 F1 l3 @/ X  @  b
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
1 t( @7 o7 M) A$ s3 [McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
" y. D: }5 R# {1 y, cMCASP_RX_MODE_DMA);
  a1 T8 W4 S: {( C( Q# f6 wMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,( k- y) R4 R7 Z: |. k  Q9 F
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
* i; A. N2 W* n: s  i4 }( F# YMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, . g% |) K" v' V+ a9 E) s$ Z* m
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
& J: b8 [0 v. sMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, . z$ h* y7 `" j) ]
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */- S7 K+ U" A) p8 g6 ~
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
/ x# `: W8 h& W1 c  K6 i. pMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 7 ~  g. Z4 v# W; W  J) T" U2 P* K. t
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,, N$ V  Z, _; z/ D, F6 ?) V
0x00, 0xFF);
/* configure the clock for transmitter */, Z" G; `( `& E
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
$ p9 j2 L8 J7 BMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
& \! y/ K4 ~7 s. }% ]* ^' I2 PMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,( @& F$ `* @/ _, b
0x00, 0xFF);
/ r  ~5 G% i9 O5 X# X- l# F+ V& j& R, H5 G  Y: X, C
/* Enable synchronization of RX and TX sections */
  u4 D/ W9 W- |McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
  p3 b: r0 p3 M6 \2 V) z9 h% BMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
0 o+ l4 J# S0 ?McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
. v! H# ]9 J0 h** Set the serializers, Currently only one serializer is set as( ^' N  d0 {7 Y2 f. J
** transmitter and one serializer as receiver.1 y) i0 m. ?* |
*/+ ^% X9 {" s4 C% L
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);5 ?3 a! Z4 J7 ~+ r
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*7 P1 N# c8 n% r6 Y9 _/ |& K' r
** Configure the McASP pins
2 l2 W% S  P- m, ]9 W  `+ c** Input - Frame Sync, Clock and Serializer Rx; t1 @: @/ I1 k. d, ?  d. n
** Output - Serializer Tx is connected to the input of the codec
0 G8 o2 u7 X# v* M/ `4 Z. d$ o% q*/  n. i! l3 K" a- k3 [
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
. [* E; O2 o' K$ H$ k! P+ ]McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
# L7 S. u8 O' @' R4 Z7 B6 XMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX5 q, x1 v6 R! d# d. w/ y$ ~/ y" C
| MCASP_PIN_ACLKX9 v  f. A% G$ ?* ]* B  Y" L% W! }6 W  }
| MCASP_PIN_AHCLKX! D" `5 P2 Q" i" v1 Y  v$ `
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
6 Q9 }( n9 p% S" ]McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 1 s7 B2 o* T) _# w5 C" n
| MCASP_TX_CLKFAIL
0 a% m1 k& ~- n9 N7 R7 \- ~6 q4 \| MCASP_TX_SYNCERROR* Z1 A+ x& q6 ^( x- h$ f. n
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 3 m- F/ H/ I# Q: t. L2 Q
| MCASP_RX_CLKFAIL
$ \& m  D) V7 z/ M| MCASP_RX_SYNCERROR 4 b. O. i. e9 c- L. b
| MCASP_RX_OVERRUN);
) X1 V1 P+ M& p- k}
static void I2SDataTxRxActivate(void)
6 U+ \4 {* i/ r- ?1 \/ Z+ m{
* ~; p- g  z/ B. Y  \& p6 L1 d/* Start the clocks */
# }8 U9 b( k6 f& e7 H0 N, z* cMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
3 u" w3 A* ~. u) u! V( ~McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
- k2 g# o9 H6 X  H4 a: d/ IEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
: u- V/ A" N; kEDMA3_TRIG_MODE_EVENT);+ u  I! S( o! r  U
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
4 B' c6 b  P: J; EEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */7 [$ u; F7 E6 T) t
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);% \: d; A8 u0 Z6 V" l" A
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */) _( j# A. r' b) i) {7 ?* B- I* ?
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
; }' ^; r; R% x% b. _McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
. P, ~. i# C8 X" H( C9 y1 lMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);( l+ M% Y1 ~& n5 l5 N( X: Z
}

, {: v7 n0 p5 n2 J6 B
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

. ?6 [6 P: b% K: m




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