嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,$ ]. p# o7 u: v5 t4 f  U$ ^) J
input mcasp_ahclkx,8 ^( J+ b" E) z0 K; N
input mcasp_aclkx,! t& v; G# n9 U- t4 z
input axr0,
+ D8 u6 l, q& U% `/ g; V/ ^9 m& A8 l1 W" t0 |
output mcasp_afsr,. Q" H# `5 Z! C$ _- R6 n: F
output mcasp_ahclkr,
! a0 r; ^8 c- e6 ]" coutput mcasp_aclkr,* ~* ^1 m) x* H$ v5 m' S. _
output axr1,7 X2 D* F" d% z
assign mcasp_afsr = mcasp_afsx;% z, u: Q3 z" w/ C
assign mcasp_aclkr = mcasp_aclkx;: x6 w' ^# A9 z/ q, Q
assign mcasp_ahclkr = mcasp_ahclkx;
: h: |2 Q* `3 _$ e# a/ G# Lassign axr1 = axr0;
6 Q1 w4 l" ~% V+ t4 H8 O3 g; R

$ n3 y9 B: e  }$ F% Z* z& w4 Y
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

& w  k/ W* P7 b. C
static void McASPI2SConfigure(void)
5 r% K2 |1 S6 w3 ^{$ m$ N; E+ {& t0 n9 L0 I% v
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
) ?3 x3 Y0 s5 j( C9 PMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */( T2 F6 G4 n' j) s
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
4 B5 g3 M/ A) ]6 N% {McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
0 f8 _& A( Q* k8 q; ]) E4 z) u5 WMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,- m- \7 S, \0 x) Z. T
MCASP_RX_MODE_DMA);9 d; W- B! J$ p3 w7 R+ C
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,; E1 W+ O; @* L9 i+ h$ ~
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */* N# x8 i% F0 t& m+ t5 N
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
- [6 t7 D; Q# L. s' pMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);# C/ P9 I% Q- h2 s7 [! z' P3 w
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, - a- y% W. w# ]8 A' _5 n
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
, }& z, b/ n5 [; {) W. HMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
& }; G  t: j4 A3 Q0 O9 d5 d/ o- v" TMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); , P2 M2 _; V  z+ s1 p* r2 b
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
$ X0 Y; E: [. f" W0x00, 0xFF);
/* configure the clock for transmitter */* V+ x" c" v  T1 v5 `4 ^
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);9 G( S5 B+ [1 z$ H# F1 ]
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
2 e( J3 e  O9 e, s/ qMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
! V. [9 y7 Y1 n+ U0x00, 0xFF);
( [/ G) O- J" X4 S; T- F" ~; A3 X: S6 ~$ {7 @' K5 _
/* Enable synchronization of RX and TX sections */
& L( c. J& v6 Y! {* g7 {McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */2 s, r2 ?7 h3 E* y, U% W& W
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/ J+ y3 _. K5 b' q( rMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
$ a( W) ^/ J* ^" J% m** Set the serializers, Currently only one serializer is set as7 r/ B3 e8 T' R$ C3 s7 J, W4 ^
** transmitter and one serializer as receiver.
) D/ e& ?6 D" `6 B# F& X*/( x: Z/ U' v) O! X3 ?: l# Q" H! V
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);5 i# j: ]9 I: \$ B
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*8 r3 ?& B- p- Y2 l
** Configure the McASP pins
0 N& H' B, |  C" g** Input - Frame Sync, Clock and Serializer Rx
: m% A: J) X- K2 D1 M** Output - Serializer Tx is connected to the input of the codec
( d% ~0 ~7 I: n5 I' Y*/; L0 {7 J" ~9 I8 _* P+ `
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);/ z& y' ?$ [& i  |- X: E
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));4 z" X7 Z4 ]% x4 ]% r$ i5 B* u
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
( |5 d2 k- C6 p; v| MCASP_PIN_ACLKX
1 q5 R7 \4 n5 E3 V- j| MCASP_PIN_AHCLKX
% h  A" A8 H- {- F2 S) g* {2 R7 a| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */( [' {* l2 |. j" u" E
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
& d+ v5 q% e1 \# [+ H7 V9 L$ l- p| MCASP_TX_CLKFAIL
7 l; V' h" T1 ]" W4 e2 q* z6 {/ k| MCASP_TX_SYNCERROR8 V1 B# J$ ^, _; Q
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR & V% }8 r1 J+ L( X8 C4 k/ i
| MCASP_RX_CLKFAIL
1 Y6 G; @1 ]# v: ^- X| MCASP_RX_SYNCERROR ) D5 g* W& m. W( `
| MCASP_RX_OVERRUN);) G0 d5 w8 d" L) h2 L$ z0 o' m
}
static void I2SDataTxRxActivate(void)
& m0 V7 U! x$ ~$ K{
' Y8 U% d; e/ Q7 F! n  [( |6 U/* Start the clocks */
5 c8 V9 K, y& Q8 BMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
2 k# D9 H/ {. v% V1 TMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
& k# M/ b3 u+ }& i3 B0 F) L% c3 PEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,# D" n: w; b. Y6 j, g0 t
EDMA3_TRIG_MODE_EVENT);% p: p1 m. m# S( p
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, * [( t2 B4 w/ w9 K. F4 d( ~
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
' m0 A% i9 A5 C) r5 VMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
( {  a- q) F. ]McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
: M- @1 q/ t4 B  K: K) jwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */: q0 \8 X: H/ O# e- g. B4 d* T
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
1 g; A$ [# v$ YMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
6 l$ \1 _% h, X! Z}

  |7 L1 d* A. n1 Q2 I6 E7 ^' m
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
8 r" t/ L* i: C4 H' Y9 D# Z1 S





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