嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,0 @3 E  l# u+ ^+ S5 j& f7 L# B
input mcasp_ahclkx,0 n: m. ?/ \3 [! w0 Z' ?* S4 v
input mcasp_aclkx,4 j% x8 ^, I3 k  M: G
input axr0,
0 I2 Q4 Y6 U7 t7 F' n
7 v5 j6 c2 y5 K+ M/ Q! ooutput mcasp_afsr,
3 `" ]/ p  o1 e: [output mcasp_ahclkr,
2 g+ j6 O1 k2 ]- b: Y; }3 k3 z/ Q7 Eoutput mcasp_aclkr,
" G% E6 p% K! K9 P2 joutput axr1,$ p6 Y+ `' T: `2 f
assign mcasp_afsr = mcasp_afsx;# C/ i8 n8 V& B5 X6 l' H, a- s8 X
assign mcasp_aclkr = mcasp_aclkx;7 U' p0 k- c9 j( Q5 E
assign mcasp_ahclkr = mcasp_ahclkx;
" }( Q  R1 Y7 N6 j" M) _assign axr1 = axr0;
1 G$ C+ S6 E4 j+ Y; m5 N/ h' F
6 ]  ~8 N7 ?/ v! r% B# z
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

8 d& o% [; \7 V7 r7 |1 O8 o2 l8 w
static void McASPI2SConfigure(void)0 L$ s  y: y* ~8 _- G
{% M$ {, D3 n& J( b
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
7 R8 @: H2 H5 r% K5 v2 ^' GMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
$ S  S( N7 Q+ h; KMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);0 [0 ?  o! T0 R! M
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */- M; \9 E% Z1 \* X) t4 h, }
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
0 D8 n4 _: H6 r4 o& X/ JMCASP_RX_MODE_DMA);
! i* L3 B& _$ |. e/ ?; nMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
6 z3 L/ {1 U% @: p9 Z* c4 xMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
8 u$ K) o' K$ [) OMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ; E8 x  \! {; n8 Y1 A5 {$ ~3 l0 a
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
( F9 [% I) N: _: D  r, GMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
' J* T$ p+ x! a2 n5 WMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */  t& z& j, W6 f
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);$ K8 R  U. T( I8 @2 O* R9 F8 c8 [3 C
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); , @1 {& d, f# p6 k  z
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,: Y$ f& A5 Q. ]" z, J6 u4 ]
0x00, 0xFF);
/* configure the clock for transmitter */
9 I- L) a+ _% V3 O5 WMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);3 L3 H: C7 s! K+ c$ b
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
( S& Q8 \8 H& ]; F1 l+ Z1 z) f1 T! kMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,: b" x0 [3 |' Z/ L& v" B) v( H4 l# l
0x00, 0xFF);2 }. O6 ]. {- G5 A* \7 m3 m' q
4 U: R/ e8 f9 M
/* Enable synchronization of RX and TX sections */ 0 k5 i2 L! G/ j" o% _
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */" O5 ~) K* ^3 E! _+ o' B5 Z; B- B
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
& p7 W9 H; s5 @  ~* H- ^McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*$ r/ |: B$ u6 r2 Q( v. Z
** Set the serializers, Currently only one serializer is set as
9 a# M. f# D# N  y3 o** transmitter and one serializer as receiver.
% z( A$ d" v( A' z*/
. s5 r' e9 i+ Q& F9 I) b" zMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);# i, ]6 C) p9 `& c* H
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
4 A) P! M3 j2 T) t9 _** Configure the McASP pins
3 Z9 i: I% h) u: c4 j** Input - Frame Sync, Clock and Serializer Rx# J  n1 V( _! S0 R
** Output - Serializer Tx is connected to the input of the codec
" B, u/ T/ D7 t5 H*/
" n/ _* {1 _5 d# _7 k& gMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);3 Y8 B, y  ^2 m9 \2 y6 a9 T. ~. t
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));/ q; ~: e" a- x  L  `' v6 v
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX0 I- K; ]9 s& d; m$ e# \( c
| MCASP_PIN_ACLKX
3 S* t: y) e' Z3 G| MCASP_PIN_AHCLKX# r5 G  s( V5 v1 L7 J' e1 T9 {) |
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
* W4 F: p/ [" i2 P5 @  r$ bMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
/ \% m- [* f: j' o" c( _| MCASP_TX_CLKFAIL & R/ J; F9 K0 \4 ]
| MCASP_TX_SYNCERROR# j! v& a. T2 ^- D/ n
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
, _, V* ?7 h+ l+ t: y" |9 d. K' p| MCASP_RX_CLKFAIL
6 W# z9 Q4 Y( N; Y8 T| MCASP_RX_SYNCERROR
& f4 x: a( Y4 }: _6 T' t" Y- L| MCASP_RX_OVERRUN);1 Q: c9 E/ \* W  {5 s. V% T% Z1 i
}
static void I2SDataTxRxActivate(void)- ]% t  H! n+ M9 t* L
{  I; Y2 }3 ^+ D& |/ S
/* Start the clocks */
. p& x% d. M  u9 l* P3 G& YMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
" u! o. h% T- w# C) K/ XMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
; R* P/ C2 c6 B+ l  n- S5 Z8 @EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,# P& I5 V/ `5 w7 m3 e5 }" i
EDMA3_TRIG_MODE_EVENT);
+ T  j6 k. y1 Z/ ]0 F) VEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ( m, Q" c" T3 J
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */5 n9 M. e4 R  k: V+ d+ T, K. \
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);+ Q, |* w+ X1 |- s+ V
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
. {; q. n, x: \  E( owhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */3 m0 e* }9 }/ |( B& C2 X
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
- ~% ?3 ?+ A% Y  D$ W- P9 HMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
$ {; M( U( T! D0 h4 n* `}

4 l2 D, Z; M: l4 `- ]; s
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
/ ?- |# A- R' Y1 G8 ]  ]





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