嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,! N8 ~3 x; C/ W
input mcasp_ahclkx,8 t/ d8 k& j. H; M
input mcasp_aclkx,
4 v& l- _. _  P$ U) B, a2 Ginput axr0,$ v3 v0 x" g2 t2 v+ W) ?' t

5 ^' S7 \! N2 F! D  o2 B$ ~output mcasp_afsr,) Z8 N+ X. B9 k7 d, |
output mcasp_ahclkr,
, p) ^% I) l' C# ~0 Uoutput mcasp_aclkr,3 p. \: n! ^8 ]
output axr1,3 B: I1 M. U1 \3 B
assign mcasp_afsr = mcasp_afsx;
* o7 {/ `4 c& r7 t$ b# }" jassign mcasp_aclkr = mcasp_aclkx;
6 @9 |/ [8 J$ R+ r2 i. _3 F1 V% Xassign mcasp_ahclkr = mcasp_ahclkx;# M5 P* y) Y) l* D
assign axr1 = axr0;

) D: l) X6 @% n- x* J6 z
1 r/ y1 v* H* m; w1 e4 j5 @3 v
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

3 T3 P2 O4 D. P% i% M! r" q, D! s
static void McASPI2SConfigure(void)9 ^- J3 `$ q5 m' ?- v
{  s- ]+ \2 Y' }+ w
McASPRxReset(SOC_MCASP_0_CTRL_REGS);  W: |  D8 E: Y# C
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
4 {- c( M0 T6 |- ^McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);' v. ?+ ^' q2 b2 ^1 `. y% G0 l8 P
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
# ^8 H8 ?: n7 p! G' YMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
  j- ?9 N$ c  p! @2 Z. M4 [7 fMCASP_RX_MODE_DMA);  m0 @7 m5 m& `
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
: Y& H% ?* p8 K, z# Z# CMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */' P  J4 C: C5 R& I, ?
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
5 d. R8 q2 Y) @$ ]3 \7 r+ _6 B2 D* RMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
$ O+ d+ f6 k4 K* dMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,   j- O" m! i; u5 K6 \' s* R" J
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
' ?& E/ h2 H" M3 s$ i& {McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
) |7 u! R! q0 O' ~) TMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
4 m& q; p! _; {7 _* xMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
3 r3 O) w  n, V( J* W% L" I0x00, 0xFF);
/* configure the clock for transmitter */
% L$ i1 m6 y( m" QMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);; C/ U8 P& n' S( E) z7 w
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
1 s* J$ h: r; Y0 R3 FMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
4 ?4 K: h2 K) J/ a0x00, 0xFF);" @, c/ I3 D2 G& W- f7 Q) d
$ a  ^8 X  t" P/ B
/* Enable synchronization of RX and TX sections */ 6 F% \8 d7 E7 t
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
4 T! j' A  N  o5 _1 f: x# |1 vMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);! E+ e5 r) l9 f3 q5 A- ~- I
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
3 z/ l+ X% e; ]; q** Set the serializers, Currently only one serializer is set as
' B- q+ x' s; J- U** transmitter and one serializer as receiver.
6 K0 A" |1 N4 M0 c# d" U*/) U- C" G& d- B; q0 x0 Y
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);+ ?5 w$ T! p, z7 Y- v3 M
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*$ G: j. h% _" Q. ?
** Configure the McASP pins
) a" @: z+ x  P5 c9 ~3 d! Q0 q** Input - Frame Sync, Clock and Serializer Rx
5 N, |' m" J! G2 Y1 X, @** Output - Serializer Tx is connected to the input of the codec , K  Z% B$ x( n% u
*/
; K( ]4 r( C) l9 r9 d, O* ?, ~McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
3 }9 V) z) J/ i# \6 X2 bMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));  a/ j8 V; |1 J) U" W( J: Z
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
. t4 j# m( ~$ f9 P2 I; p4 n| MCASP_PIN_ACLKX
( t* V0 ~$ D9 [| MCASP_PIN_AHCLKX
4 M8 [+ j: J- r$ k/ y- o. `) V9 \| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
  q% h7 C4 C4 S; r( NMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR " Y. p7 [: y, R6 H6 Q/ J( E) z
| MCASP_TX_CLKFAIL
" B8 w; P# A: w$ c5 E/ b| MCASP_TX_SYNCERROR
: G3 C$ E( b6 o, \/ _9 u- d* r| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 7 G* l1 z: D' ^  y8 [
| MCASP_RX_CLKFAIL" t- B* [8 }4 F5 {
| MCASP_RX_SYNCERROR   e( @8 E1 y- E6 _, W* ^+ r3 ^8 \0 I
| MCASP_RX_OVERRUN);3 `8 }- e1 K* g3 {7 X* s2 m% z1 q; ^
}
static void I2SDataTxRxActivate(void)
8 f- i* z( e0 e2 D1 K{
! Q3 @8 A1 G, e6 t/* Start the clocks */. q5 @9 \. O% m0 f4 x  q5 |4 Y
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);) _& N/ ^/ F- W" I8 A; d
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */1 w: I. z8 U' {" k# I' \* ^0 w
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,8 j* u0 L( }* A1 t
EDMA3_TRIG_MODE_EVENT);; u# v% A3 U$ |( R1 @
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
8 n& c. l- H* g6 v: l/ r) E! Z- N. r3 gEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */2 ~# z9 K. k# x7 M# p& C9 b! o( y7 W
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);& h8 J. I# j" _$ }4 ~0 Q! x, [" u$ c
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
% [* ]8 F& J3 B; J1 ~, s6 X" swhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */% Y3 F$ `$ @; \+ U8 }) d
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);: u1 h* r( ?2 O$ d# e# W
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);, J4 n9 W; p7 ?; X- N% s  I' X; s
}
5 ?& I5 p0 }8 h' _% t5 ^
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
# D; z" q* m7 i: x6 I/ n





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