嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
( b; x, I' a: V) }. w7 Vinput mcasp_ahclkx,
1 ^3 m; f2 T, K' k. w" Pinput mcasp_aclkx,
: q' u7 D2 K: kinput axr0,3 ^* M8 n/ f* _$ D8 h

2 o: l% q' R+ \# v0 @3 N" voutput mcasp_afsr,
8 M* f# e8 J% F# [output mcasp_ahclkr,/ M5 C" u, k% M' [5 r' h
output mcasp_aclkr,: V& e3 ?- N% @9 v5 g7 r
output axr1,
; F) z# M3 R. `4 u& Y( I
assign mcasp_afsr = mcasp_afsx;+ w' a# D4 J9 ]5 B- S0 A
assign mcasp_aclkr = mcasp_aclkx;# _) y% E# n& C# Y
assign mcasp_ahclkr = mcasp_ahclkx;4 S1 ]& v8 A# _
assign axr1 = axr0;
: x. F& d/ x) o' v, S5 h
5 Z) ?# h/ N# y
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
9 [, a- w9 k3 ?5 s
static void McASPI2SConfigure(void)
5 p: P7 x0 d9 V& R# |. Q{7 O5 t: p$ j8 M; p" u. k
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
1 T( N7 o. W4 s2 x' z7 S  [+ ]9 [McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
: d1 J5 Z( M; O! K& v" \6 k! O/ GMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
% G& \, A# l- f+ gMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */' X2 G8 q, y- h3 @( M
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
: r. [& W7 Z) a% s8 aMCASP_RX_MODE_DMA);
  Q3 d$ T2 E! {5 G  x" C6 ^% lMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
8 F- f2 G1 |# ~! ^$ l, ?: sMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */9 J  H  j7 x, }3 a
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, . D3 e( R/ T1 o3 u0 t
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);1 D* `1 v1 s7 W; I
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
4 u' c) o$ ]# _  m# gMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
: M0 z7 [. a; jMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
( @, }$ G% `" S6 uMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ! y* k9 h8 {' `' s4 `
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
8 ]. @6 N) d3 ^; `$ m% }0x00, 0xFF);
/* configure the clock for transmitter */
! E9 S2 n5 Z- U, F2 ^9 dMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);* G. c7 h8 _* ~1 d/ Z
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ) m4 ?/ i5 m* F, w* v2 T2 C; P
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
' L7 L' h4 F; y0x00, 0xFF);# S+ a/ v# o1 n4 ]8 ~
  |. U! [' p* v/ [
/* Enable synchronization of RX and TX sections */
7 S1 W) A) c& o) Q" L6 eMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */* ]+ m* a! K4 l
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
+ Y: P4 t  f$ T9 v( G" ~McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
3 ^- b0 [2 d" {, O  I6 c** Set the serializers, Currently only one serializer is set as: L0 y# y4 a- v$ N4 l9 |2 g% i# D
** transmitter and one serializer as receiver.( o+ Y" U: a" n+ A  D2 J# E
*/
7 _' n" I8 S% s3 {McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
0 g3 n6 t& Q: E, r" |, MMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*+ N5 L( B* B3 M5 D3 O- i4 [1 L
** Configure the McASP pins
( B" C7 _. ?" _** Input - Frame Sync, Clock and Serializer Rx
# U' Z9 ^1 x* }, K+ l** Output - Serializer Tx is connected to the input of the codec 1 n4 b/ m! Z- e3 p- G
*/
7 q* j) S1 c$ _5 gMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
: \1 t/ e. M$ P3 H. ~7 E, I4 D+ YMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));9 Z- v) u1 L2 o0 p+ y8 O2 }
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX# W/ d( ?" ?* w7 X9 g& I8 f
| MCASP_PIN_ACLKX& I! |5 f  S8 z; W! b
| MCASP_PIN_AHCLKX
, c$ e! Z4 ?. X: k( l4 `| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */( i9 Y, Q8 f# g; E9 G) e7 a
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
! V* X- i( \& P9 M) C/ ]| MCASP_TX_CLKFAIL   \3 K) W) ?% X% i; l4 t% h; W
| MCASP_TX_SYNCERROR: S* V9 p  J- Q4 C; [4 f5 f0 _& h
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
3 P. q/ h6 f$ u5 R* R8 S| MCASP_RX_CLKFAIL( W6 t3 |5 W9 g6 m4 K# p
| MCASP_RX_SYNCERROR
' A1 l; Q7 u+ K6 Z, u| MCASP_RX_OVERRUN);
6 b" G% W7 Y0 W}
static void I2SDataTxRxActivate(void)
2 r) e9 T# w- W4 m4 T9 f5 s, S6 F{: Y2 K# E4 d5 s
/* Start the clocks */
- Z3 g" j3 @* o0 XMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);) x9 Z- `* O# Q: W
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
# ^2 I# Q. T1 c2 ]5 EEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
( T$ K- R3 w% [) T" f8 S, l. O9 eEDMA3_TRIG_MODE_EVENT);- K. F$ d& L2 @$ {; B$ `9 D! n
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
  A& \! u# n- p  V+ y! o0 J  l3 W8 dEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */8 P; H3 O* i% m$ j
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);, c; z  ]$ p2 H
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */4 j  {% G& D5 i0 L8 `
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */+ z& b4 I8 f* F( z0 G, b
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
# \8 |7 `8 U2 \4 w5 p& tMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
6 f# x5 G' t  C! i1 K" S}

5 c$ ?3 O5 r% r. C' i
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

( |4 ~# g  }9 f0 x" K8 d7 L9 p3 J. I, v




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