嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
. z* ^/ N2 H2 z. J2 I1 H: Tinput mcasp_ahclkx,
x& Z2 v2 T* ~; Finput mcasp_aclkx,: o! S: J0 ]$ n' O
input axr0,' s- ^4 n0 d* p) f$ j! T
6 D# h( i0 I' a2 b$ j
output mcasp_afsr,
: p; Z) L# u7 z* Poutput mcasp_ahclkr,
; u5 g, {, A7 doutput mcasp_aclkr,+ ^* I$ p6 X& F& N
output axr1,
6 @' A8 E6 ^" \; N* p4 `2 B1 @% V$ W
assign mcasp_afsr = mcasp_afsx;
2 ?, J2 [' y: ^( j7 v- H) ^assign mcasp_aclkr = mcasp_aclkx;' @- c. ?# D5 x3 P c3 L* N
assign mcasp_ahclkr = mcasp_ahclkx;* _! {" R# `& x2 c
assign axr1 = axr0;
' X: P& d$ O C. d$ ? A% _
! o9 {: T- g2 J: P" u- s在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
6 K6 W1 N7 {2 W. N
static void McASPI2SConfigure(void)4 [: ]7 |9 A3 v" T8 N: E
{
$ L! a) ~ ?, X3 y/ jMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
: d$ h( s4 r2 V2 e$ [( wMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */# D. v. E7 U" h ^& n$ V
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
4 E8 @; |) z7 jMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */. T; B$ P3 x1 K: q9 f( ]6 ?
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,& s& D$ o% S' f, h2 K/ a
MCASP_RX_MODE_DMA);
: \/ [9 T# |' I6 W8 xMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,# H+ F, q5 f2 N
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
/ b) v1 Q/ h. @0 O# Q: l. M" |6 `McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 9 I/ f% m4 f- G# l9 b
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);' H/ V! n: d! F
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 9 T6 a7 B/ C- z# C
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */+ m; v" _+ l( A0 r8 }5 @ V
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);; b5 i% h( L4 d/ n
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 0 X6 o& \! v) j! m9 v
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,! K8 Y: r- ?0 ?+ L' b+ B
0x00, 0xFF);
/* configure the clock for transmitter */; I* E$ x: L( I
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
$ Q' h2 o& A2 q/ a, p$ h6 w: LMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); % t5 a1 j o8 W5 C7 O
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,- K) A# B( A; D3 y: M. ]
0x00, 0xFF);3 m+ t' m/ | P: l1 @4 {
& H/ A; m+ U# R- @ A2 b4 F M
/* Enable synchronization of RX and TX sections */
! N4 p3 {8 e: s+ A& s5 _; ~McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
% s: \$ j; o3 Q7 h8 O( o: D9 ]McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
& G8 y* }! b! }* G. EMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
9 a- |9 t& t6 T) M# @** Set the serializers, Currently only one serializer is set as7 f3 d E# e- y/ H
** transmitter and one serializer as receiver.
6 l7 v6 v1 }. h*/
6 B/ R1 D! |' J8 yMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
; I0 j; x) @8 RMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*. g! i8 z; o+ R% ~" _# I& I$ U/ x$ H$ m
** Configure the McASP pins P5 r# b2 [2 m1 O# P
** Input - Frame Sync, Clock and Serializer Rx& N- ^+ R8 N$ I q s% \: t1 d
** Output - Serializer Tx is connected to the input of the codec
( _6 w- v ?2 V4 T8 e8 u& |+ j*/! L2 ?+ x: l7 `
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);# Z0 x5 X& m; B9 b. {( {' P
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));0 W* V: A; \4 K+ K8 K
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
6 G: a0 ^7 |0 @| MCASP_PIN_ACLKX
+ h2 U/ E( @/ @| MCASP_PIN_AHCLKX' Q( H' }; z/ D7 _. t; ]
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */$ u- I+ D x$ P* v- T- p9 T
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
. x2 A( p5 U* D9 S| MCASP_TX_CLKFAIL ; A" W0 w3 U: n
| MCASP_TX_SYNCERROR
; h: E. D+ T' ^- b F| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 5 ~$ {$ `5 Y h* ?# p
| MCASP_RX_CLKFAIL
% C0 a/ E( m* x& P+ h" A! \* i2 k| MCASP_RX_SYNCERROR 0 j% ^3 }% T H3 y% j
| MCASP_RX_OVERRUN);4 u2 a( m/ o' ?0 n! r4 c% N9 G7 a* P
}
static void I2SDataTxRxActivate(void)0 |1 d- p" H6 k, |% `; r1 i
{. I" J* Z$ W/ |; \; k# R3 n
/* Start the clocks */# V# R) `' ^$ g5 O( @8 R w, c
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
* l1 `2 m+ Z7 Q. o+ {( T# Z8 [McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */) | P1 U$ ^$ ^% ^6 @
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,5 b. T) h! L7 H& O
EDMA3_TRIG_MODE_EVENT);
; B! a( s* j4 m+ G- P% @EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
+ c/ ?% ]( U/ j/ l& F1 _EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */$ r3 [' ]. {1 n. H& S( ~: w5 G1 A
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);. j& T- f* I# k l# y; Q& j4 f( Q) |4 q! D
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */& M0 A# P# L5 @ u
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
: d5 Q; s6 n/ M" B: M6 p& QMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);$ j5 b M+ q& |% I$ B4 F4 ?0 O, ?
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);) t2 y5 h7 p% { O
}
5 y* ? ~% H# L9 I O
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
& O/ W1 ?. ~' \
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |