嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,6 `. z( o2 q6 v- W9 q" Z$ |
input mcasp_ahclkx,6 B  V8 e0 \2 `; J
input mcasp_aclkx,- h0 ?& J2 g0 ]- J: o& V
input axr0,# f% Y; D% s% [

' w* O- u& h' [" K( t! ^, T( Zoutput mcasp_afsr,
9 }( T* B7 P/ W8 N8 R' K8 i9 ]4 \output mcasp_ahclkr,% P5 m* I3 J% m
output mcasp_aclkr,
) }" w2 x3 l! i/ xoutput axr1,; D" X# y6 K4 |- G7 ?
assign mcasp_afsr = mcasp_afsx;; L2 n+ K0 n$ d2 y* g
assign mcasp_aclkr = mcasp_aclkx;! \# {9 z' m% [) ?, [' }
assign mcasp_ahclkr = mcasp_ahclkx;  p0 X! I$ @6 Q/ e7 x3 `
assign axr1 = axr0;
/ i( \; \# [: {# U

) w# T) L9 b3 c" u4 {) c
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

) p% l3 ~2 r- k* y# P% C. z  P
static void McASPI2SConfigure(void)" f' B5 J3 q' |4 r; ~
{
- L4 _) z: D- r! AMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
, Q4 H6 B: _7 O. V2 kMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */6 u+ P1 J4 m, F* I% t' F
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);; j: v1 M- D# z0 a$ M3 @
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
6 Z7 K) Z- T8 o8 LMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,4 [1 ?7 W* h; P! u: z4 B
MCASP_RX_MODE_DMA);5 a0 m$ W! G- A2 \1 ^
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,5 w2 u( W  u" @' e
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
' J9 z& F, @2 [. l: lMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, $ M/ [1 D3 ?  m% q. k7 y
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);; f- m/ Z9 B. {0 }
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
" T: q' \) c2 a" RMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */! i) u) T' _  j3 h
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
- M3 x; H& x! Z- q4 oMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ) Z3 }# a9 X1 R! I4 N. _  t
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,- t' u8 Q& W$ w4 t% r
0x00, 0xFF);
/* configure the clock for transmitter */) l- x; B1 ?. M8 N+ J5 ^
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
9 L2 E9 {4 G9 o+ L% X' V* M1 MMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); & v' r- S/ O  |3 C7 ?4 w
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32," F: L) W2 D+ p
0x00, 0xFF);7 }1 t- x" m3 r- F" q& x
/ |% T$ e- }. \% w$ U+ D3 \
/* Enable synchronization of RX and TX sections */ 2 u' w) g8 O7 _# n
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
3 k  _# e2 j" Y$ g" pMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
! L. i$ X* B8 @; J. ^McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*" ~: Z( Y4 n6 v2 B, E8 F' L
** Set the serializers, Currently only one serializer is set as# G. s! X! z, J7 e) N( z/ N
** transmitter and one serializer as receiver.
0 ~* f3 S0 N2 P8 n  g*/- |/ i+ c* r/ ?- V3 N4 l9 ?
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
* {+ U/ p  p; L. x) ^3 A! j/ W4 GMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
& d3 `" A6 l% }8 B( N5 J** Configure the McASP pins 6 X5 T' r4 c; W( E8 q
** Input - Frame Sync, Clock and Serializer Rx  ?' C) |% q8 ~6 V: ?) D  q9 u
** Output - Serializer Tx is connected to the input of the codec
9 `3 k. C" f0 M0 v2 j( ]* L! ?*// p8 S+ R$ n1 \
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
. Y. A; f0 y' B! |; w" g* v3 [, X: j0 a, DMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));0 ~9 W, ]: N$ W9 [0 G6 G
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX5 y' Y' ?8 {3 a. T% O
| MCASP_PIN_ACLKX
7 n$ d6 X+ n0 L, v! o$ y+ y| MCASP_PIN_AHCLKX+ J! r8 K& I5 W2 }7 @' w2 Y: j
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
  ~1 j5 C% U3 Z$ {# xMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR / y& Z2 K1 [9 m& H- k/ |! y# O
| MCASP_TX_CLKFAIL : e2 Y5 d  K  L* U/ ^. m
| MCASP_TX_SYNCERROR" l6 i. Q1 A9 J3 H: l& c. b4 I% B: c
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
" `# ^; V: Z+ S! O: _% {' M( E| MCASP_RX_CLKFAIL
" Q1 x4 J8 _" a4 _| MCASP_RX_SYNCERROR ! F$ R. q; p/ ~, k1 [8 l3 }
| MCASP_RX_OVERRUN);
/ `8 Y9 U- A7 k  }}
static void I2SDataTxRxActivate(void)
# D$ @, i, M5 R2 H$ G; i{
  _2 C$ M7 [$ m1 \+ ?/* Start the clocks */
# `, a. A4 i& |7 y' FMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
5 r% m/ z2 G4 R3 |McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
. ?) X. V9 r* A# W: Z8 M' JEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,2 d1 ~& x: _1 l7 W( w8 ^
EDMA3_TRIG_MODE_EVENT);" ]4 F) P* f9 l9 p( x3 E
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
4 t  B, w. [! @2 F! u3 t: @. OEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */( S1 H( U, ]5 C; W6 p- O
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);3 I! [& ~# a; z
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */1 ~% A+ V" c7 O
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
% A4 q6 I. v! l- e4 `" BMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);6 |8 {) R/ i# X: U$ d- @
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);7 E3 r- A% P, k7 `9 n  K
}

: U" @9 _  d. ^) E
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

  _. }5 `5 j7 @3 T




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