嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,6 X( N+ p/ g: p
input mcasp_ahclkx,; {0 V9 A& M5 ?
input mcasp_aclkx,
: K4 `+ J0 z$ W8 Oinput axr0,
, s5 c( ~) r$ M" K% P
/ p! M1 m9 ~7 M% N2 V# @: K5 f! Goutput mcasp_afsr,2 w$ Q! H- \+ Y: a$ _  s1 Q' Z
output mcasp_ahclkr,: w. w2 G0 K. Z( }3 f' g
output mcasp_aclkr,
: s2 i5 H% k2 D5 Y# D. @output axr1,
( s( i3 Z6 R5 Y+ a9 v% G! z3 E$ j) M8 V
assign mcasp_afsr = mcasp_afsx;
7 b$ C- f) w8 c  Z# Oassign mcasp_aclkr = mcasp_aclkx;
& x6 i: q. ~6 yassign mcasp_ahclkr = mcasp_ahclkx;
5 D' d! u3 x( z# O; c4 R' a/ a9 jassign axr1 = axr0;
% n% D3 ?( M( ~6 Z9 O+ I

! m5 |: m8 u- O2 Y
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
, i1 @) F) Q% B! I  P& J
static void McASPI2SConfigure(void)) R1 H+ v, J. d& N2 N3 ?  F
{6 z# o9 p9 q1 _/ t  O
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
3 A( y3 n' T: s/ tMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
- u. G# d9 P1 D) {* W( YMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);: I- @) E- |, L% Q- \: H
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
! p7 M4 Z0 x6 F* g/ WMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,. c0 ]% X/ G6 t6 Z! f9 o! Y% Y
MCASP_RX_MODE_DMA);
& x$ `4 W! t* ?: KMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,3 a/ S, e5 ~7 Z# e
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */8 _- I$ w  {( v8 M
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 1 s. Q% |! w# c4 @0 I7 j& x
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
# |$ k6 K$ r* r( T( H+ `McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, . o- \" a# C1 X& ^8 r
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */7 c/ z" u# H! P9 p& ~
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
) `8 K8 L0 r- b* a' XMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
1 V0 N  c+ j) e; W' u; G! H+ IMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,0 A4 Y1 I: q, _& x  S( o' s4 r) Z
0x00, 0xFF);
/* configure the clock for transmitter */0 d! D7 M7 |8 P, [; o" |
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
0 L5 h$ a4 ~6 g, Z/ cMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 5 `. E! p* Q9 S: Z. U% ~
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,  \# \; q5 M+ ]! }$ V8 f. }
0x00, 0xFF);7 m: T8 p; M8 T0 s/ C/ V% P
  x, R1 x/ N9 R8 F; B3 ?! M6 b2 c
/* Enable synchronization of RX and TX sections */ 0 d$ v# w* `4 `. ]% j- S7 c
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */+ e9 \$ h* P/ d- c6 ?& e3 S
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);. U% ?: X- n5 ]) k: d) d4 a
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*' G3 w) {5 |2 b
** Set the serializers, Currently only one serializer is set as( }# A3 l/ s/ B- e
** transmitter and one serializer as receiver.$ k' p# M! \/ c/ i7 ^" Q
*/4 J* b& d: q" i) T! e2 B
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
0 M6 G+ t% L: F9 bMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*! P6 u/ `5 p- h3 G: X) M$ b5 o" j
** Configure the McASP pins ' E5 @- J4 ^; a
** Input - Frame Sync, Clock and Serializer Rx
- _! Q8 y% i) m% J3 r( g** Output - Serializer Tx is connected to the input of the codec 5 C7 y  v9 ~/ f1 G2 G
*/
( J" f5 O$ \+ X3 o. X5 eMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
/ A, s! |* X6 a' W2 e0 k9 SMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));/ c0 h, G0 J- [9 d, N" }# H6 _7 K
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
9 C4 ^/ c% A" r% ]2 Z, |- p| MCASP_PIN_ACLKX
. h, A; V7 p( |0 t| MCASP_PIN_AHCLKX7 p) U: N( x2 `! a$ S6 _4 p- r
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP *// i! V  I0 l: q( c: Z+ i( d; Q( {+ B; {
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 9 ^1 e$ m. K% b# {% f; C
| MCASP_TX_CLKFAIL ( Q- z3 m+ O5 V0 t% g* G7 Q# s
| MCASP_TX_SYNCERROR$ w  B0 k( A5 k" w
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
7 a! T, d+ P3 M" W| MCASP_RX_CLKFAIL' L7 \4 f, T2 @2 X$ f# w2 _. z' x
| MCASP_RX_SYNCERROR
/ i+ t) V" V' [# p* B| MCASP_RX_OVERRUN);# ]' E8 Y5 p0 H' C
}
static void I2SDataTxRxActivate(void)
0 J/ N& j8 k# D0 ^{/ B" E5 B- N0 l$ F0 R
/* Start the clocks */
1 F& u1 I( W% H2 y5 W4 A  B4 U: d5 rMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
, R$ \  e3 m* l# L/ N; H3 F$ f. F8 s, wMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */* I3 e4 ?/ }7 k& [7 B/ \
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
/ }8 ~6 F* ~6 w0 D0 j1 ~% \# ?EDMA3_TRIG_MODE_EVENT);' v" l9 I' W9 h9 `7 B* }! w
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 1 }" r  N4 ^5 k0 d
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
8 O! m/ N& X, i4 wMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);! \9 Q! l* A! ^- y
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
4 V. K6 E' E$ n/ J( k% _6 {while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */; U  Y8 r8 l9 O3 E
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
8 z. E3 N* q, z% u7 V" bMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
9 Y# J0 g- u0 }9 \2 ^+ l}
, e# N& j' m3 b5 V8 I; Z
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
0 V6 m; M" M: F8 m8 f7 V





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