嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
4 j. [: P! ]5 J+ R; K' p( oinput mcasp_ahclkx,5 ^3 I$ i+ g/ e" h! H/ j7 k
input mcasp_aclkx,9 r! ]" Z) s* ~5 Y
input axr0,5 p8 p, V7 d/ {* [3 k* M+ ?

/ ^; @2 W* J2 a  _" B  v$ e5 Soutput mcasp_afsr,' c: K( t. G( k6 D
output mcasp_ahclkr,; R2 S$ |' s, c8 z4 c& \6 ]) ~% w
output mcasp_aclkr,; U. O, I$ A" S7 S
output axr1,0 F% I% {$ U* i% X$ u$ R
assign mcasp_afsr = mcasp_afsx;
3 Q( Q/ h0 B+ Passign mcasp_aclkr = mcasp_aclkx;
. X4 Z% P" b& E! s3 G' V+ A1 kassign mcasp_ahclkr = mcasp_ahclkx;% K: e' M' y2 u/ L% s& N) |
assign axr1 = axr0;
2 A; x; ^/ C' l6 U- n6 X* d9 r

; f- T- P1 x$ Q7 |  ?8 x8 I. n' [( U
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
9 |, ^: l9 o- K6 @
static void McASPI2SConfigure(void)
3 I/ o- v; {6 p/ U5 X{
4 W. ^4 @4 P/ Y5 b1 R" S8 a( ZMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
0 V* H: v! E/ L1 x' NMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
/ ~' K6 |* X6 Z- vMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
' r2 ]3 J1 L* v# J. k5 ]McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
; C& \. W" G2 {  T" F3 tMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,6 Z$ \$ f* i/ y" R
MCASP_RX_MODE_DMA);
6 }& ^+ ]% t# H3 C% r6 H3 g8 jMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,6 I( J* J/ j/ H
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */0 u7 C: V+ v4 [5 z! g# W
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
9 f! o* m  i) A# c. `$ oMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);# ^7 A3 Z& J" j+ P* v% ]/ Y
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 8 y: x$ M; _+ M1 j+ h" P- _
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
" L# t7 G; D6 s4 Y4 t' UMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
5 O1 M1 s: T1 b$ x: PMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
" b; V  l7 O- F, r: jMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,* b2 Q4 b  `: u* [# a
0x00, 0xFF);
/* configure the clock for transmitter */9 n# a! t3 E7 }% F0 W5 Z
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
# ~& o$ ]) r5 f8 uMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 8 r& j' H- Q1 a/ Q6 I
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
" j2 m$ t" H  \8 j0x00, 0xFF);7 i* A% \* j+ @

- {# l) ]7 |) c5 E4 W/* Enable synchronization of RX and TX sections */ / ^' c% Y% p2 _6 M
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
7 h: R# o! Q8 I! r' \' i, w  J8 ~McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
6 n- R  R4 V+ HMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*5 _9 k) `, n- a9 G  _
** Set the serializers, Currently only one serializer is set as
: Q( ?; @  Y8 B! K9 F** transmitter and one serializer as receiver.
- D* u* m0 ^( v" l# p0 r*/! ?5 X4 y4 S& T7 y5 {
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);- M& z/ T7 N" {- c# w4 J
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
% o* v7 l! ^7 K# Z** Configure the McASP pins
( q3 ~0 f' q( o( ]5 S** Input - Frame Sync, Clock and Serializer Rx1 E% k" g. s6 Q: X! F. y3 v. t
** Output - Serializer Tx is connected to the input of the codec
8 u3 L8 K2 k  g' f/ \% H5 N  j*/& g5 s& }0 ~; c
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);$ [# B- Y9 g& v+ r" ~6 \
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));" R# ^& b5 a6 d4 E/ V0 X$ H
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX: Q& q) v4 ?: H
| MCASP_PIN_ACLKX( o1 g' F# }- l7 f5 t$ N
| MCASP_PIN_AHCLKX
6 e7 J0 q7 o, W| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */- i- }8 M1 c4 `3 M2 b% p
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
, K0 X( Z; y1 J( {| MCASP_TX_CLKFAIL ! a& x- Q- b4 `) u
| MCASP_TX_SYNCERROR
- n0 Y; R5 s# i& y0 ^" f+ A9 a| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
/ e) _- y6 s0 P  z6 V$ z) l: J| MCASP_RX_CLKFAIL( y9 L- v' r( \+ v+ h7 u$ {) O
| MCASP_RX_SYNCERROR
3 {& u3 b) o7 n4 h| MCASP_RX_OVERRUN);  V: U$ A; I9 w/ X4 \0 ]7 G
}
static void I2SDataTxRxActivate(void)
( M3 {3 F; m: Y1 X; }{
3 n6 q' s$ R- O& D( e) K% o. x/* Start the clocks */3 b. [8 }# G: Y# Z# q
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
" b: h; J8 \7 T8 g' y  }3 G! `McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
, z6 C$ A% S0 ]( X, `EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,0 j; q& i2 z- ~! X0 Q7 g) s
EDMA3_TRIG_MODE_EVENT);
% r2 _5 k) D' J- S% w5 `) tEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, + `' G9 C" ]6 @( I% F2 s: S5 e
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
2 ^# g; A: k! u/ I5 }! x8 a  qMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
5 c( v2 e. V5 BMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
2 Q' @# V3 R* }while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */$ k: D# }7 U) ]/ ]" \! s4 R% ~
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);" J& ^8 a4 ]% l* L0 m
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);, y. r1 J5 @, m4 u5 _2 a0 Y( [
}

2 L1 m( ~7 v- f' O# a
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
; ^& W0 E  b6 T3 v) \





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