嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
" w& \. w' |$ P2 ]input mcasp_ahclkx,% N- y  `0 a+ h* `
input mcasp_aclkx,
  J5 C) u5 t9 `$ [& G3 ginput axr0,
4 _: v& o6 v* ], f0 n8 i
! E6 w* F. g: b$ M$ U8 R. |output mcasp_afsr,
/ q  x# ]) H) A5 ^+ c" w; eoutput mcasp_ahclkr,. c2 |7 [' W" ~- l  U) o2 r0 r
output mcasp_aclkr,) n9 ^9 k7 O5 C! E( t
output axr1,  q6 S; M+ J" n. ^$ W
assign mcasp_afsr = mcasp_afsx;6 N# q$ I$ q+ _9 u" C. ]  [1 e
assign mcasp_aclkr = mcasp_aclkx;2 A7 {/ N, s: x0 U, e
assign mcasp_ahclkr = mcasp_ahclkx;
) I# q5 p4 `5 e7 z! J) |assign axr1 = axr0;
; h9 r7 C0 D0 k1 H0 c
/ E+ r8 O7 F  t
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

7 {" Q% n) u1 k" ]  n5 h
static void McASPI2SConfigure(void)
9 C' W3 o( U+ A3 u) \1 v; _6 p- h{' x8 B- @  i8 O! P7 U& Y% o
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
# K% R/ ?1 ?( g1 j, m+ _McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
8 t- @* Z' ~7 z+ Q8 H. `) NMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);3 X( U& r5 W3 q" K- D; I# U3 G/ p
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
. p! `/ |7 k3 FMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
/ Q6 k! S: j$ Y. SMCASP_RX_MODE_DMA);
4 K3 g: X& }+ ?4 d8 Z1 U. _/ {McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,8 W( j4 S3 A! d5 g2 d' _7 ]( x; R
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */# P2 S5 h+ l4 [8 P6 F0 z
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
* m* y/ ~  V! |6 ?  s2 ]7 i: R( yMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);: i# P/ ]% d" K1 \+ b/ X: w
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
9 X4 q" |% S' R, M, tMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */7 D8 \& ^2 x" [% Y6 Z6 i
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);' I0 K0 l& Q0 {  ]/ |8 d
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ; o* \1 O) b+ x$ Z4 Y, j$ @
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
0 T6 o% `+ C" S0x00, 0xFF);
/* configure the clock for transmitter */) J. n% q. Y( f* P, M5 I- U
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
/ v  P- D9 ]  k, b* KMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
+ c/ ?2 p. |  ~, G% ?McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
2 \5 {% I; v/ |/ w0 W# ?# b! k- i0x00, 0xFF);4 m1 R9 h: y; M

8 c9 {7 q# i2 D5 b$ j' c/* Enable synchronization of RX and TX sections */
; l* G5 e9 E( I9 Z. @8 u1 a) NMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */8 R+ E& w5 t' A- _9 w
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);) `! F! ~; G* j* l7 X! f( z
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
2 B: V- ]$ K0 }1 x& P$ ?" g** Set the serializers, Currently only one serializer is set as$ `& s2 a! ^# T8 S+ c9 ~5 F# f
** transmitter and one serializer as receiver.+ e' u8 X! M4 Q4 ~
*/
) ^# N3 G" t3 C( }# g3 O, q, c% `0 zMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
: P) P4 c+ u& OMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*1 Z8 D. M) e0 ~$ f3 L3 {9 L( S8 w
** Configure the McASP pins * m* S3 v2 Q, z
** Input - Frame Sync, Clock and Serializer Rx* @" G, f0 |: H7 h3 \. }  f
** Output - Serializer Tx is connected to the input of the codec 7 t# L2 e- U; p6 l: N
*/# A$ u# w( A5 H9 n% w! L0 @, m/ t0 Q
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
/ n$ V* {: B) BMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
. ~6 K; G. @' I  Y6 B9 hMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX  q1 |% F4 C& q$ N% w
| MCASP_PIN_ACLKX
9 }  u$ R& |0 c- X/ ~| MCASP_PIN_AHCLKX0 {2 U  I! O: Z6 r# s* Z
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
' u* W) I4 `9 C+ lMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR + E3 v9 i/ O' b5 Q1 K
| MCASP_TX_CLKFAIL , F4 A: d0 v" e  O7 ~0 x
| MCASP_TX_SYNCERROR2 u4 N" V: ?. N8 _( T9 _
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 4 ~; e7 S8 G1 ^% |' ]
| MCASP_RX_CLKFAIL) y) T) S* Z) k1 k
| MCASP_RX_SYNCERROR
3 m1 c! t; K4 _4 B" || MCASP_RX_OVERRUN);9 Z2 d# d( n, \5 ~- r/ g2 V
}
static void I2SDataTxRxActivate(void)  b: m- N5 c) i4 j" _8 z; p! u
{
" x% D5 w" R1 O) I! c( N% E/* Start the clocks */
" t8 N2 F  `& g7 PMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
! Q3 b- u: N& F! r- U: D+ [McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */2 d* J% V9 p- V( J
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,1 M% R4 S$ s7 ~& C' m  x2 l
EDMA3_TRIG_MODE_EVENT);
% Q! |3 f- O* _; J; `" [: u: h' FEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ) L8 j1 D* Q$ A
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
7 v" {2 R. ^, g& _' `# ?; HMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);4 Q$ ~0 ~+ _0 L: i& `
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */8 Q. H7 v. Y: \1 e( Y8 A
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
# u) z8 Z0 |; U7 O; z; S& iMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
7 u( W: f; g, I7 BMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);( v% V4 f8 Q/ @6 N0 H# e0 Y
}
/ {6 P" X: ]' L8 W9 e0 @; l
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
5 c- R' B1 `& n6 V& c4 S





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