嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,1 i% X# X4 m3 }, L
input mcasp_ahclkx,' r) b# z* n4 N+ ^' t8 @  U
input mcasp_aclkx,
" [( }5 A( `* hinput axr0,9 N9 Y* _! V- E& i

; K. E6 c& u8 K6 k/ e- t3 soutput mcasp_afsr,
) d  z# J- Q  I/ V; v; }; |output mcasp_ahclkr,
& E1 n& K# q$ ]1 l9 q4 a( }output mcasp_aclkr,5 M7 E. B7 w0 V; S) T
output axr1,
" i" X$ b+ h2 `. p& |7 A
assign mcasp_afsr = mcasp_afsx;' T/ {* I: x' u( [& [; [; |& M
assign mcasp_aclkr = mcasp_aclkx;
* N9 Q1 ?+ g5 d6 z% i( H! Yassign mcasp_ahclkr = mcasp_ahclkx;
- n: V7 h1 ~$ Zassign axr1 = axr0;
. _0 M4 `6 {1 @! A' d- E1 g
1 R1 c: _9 y1 k
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
1 R# r( M: q' p7 H) e$ p3 c
static void McASPI2SConfigure(void)
/ ^* Q  h; l/ T% j% Z{
/ W$ g( V- W% y  U5 m. ]( Y3 NMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
7 d3 p, f) q; H" \$ H! nMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
: k( f  p4 [# IMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);/ m5 B  Y/ v: S/ a
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */+ Q0 q; L8 i: o6 b" p
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
: Z3 @" y  Y0 h; N* C+ C. ?9 U: @& wMCASP_RX_MODE_DMA);2 H' E+ a+ z% w& X. ]* Z4 F
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
* x* u, ?' T' Z, l# s" vMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
# o/ w# q9 H3 O2 vMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 3 x9 f+ B' f5 I8 |$ w
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);1 T$ H+ k7 O" `* {/ [8 k' |# O7 n$ Y
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
& S4 z% |* k, l6 cMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
. H' O' c- Z6 x$ M! Q/ {McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);+ w+ e$ \3 F: ?6 e, v* g- S  \
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 6 ^2 I7 Q1 v0 M+ H
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,# k* t+ J' w, `
0x00, 0xFF);
/* configure the clock for transmitter */
# U6 a& _# H8 S* H# q$ _McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);- L' H% Z: ~, L, e
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);   m8 Q5 @9 P' _- G3 V
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
3 w: ?7 f+ V7 m8 c& z9 K: e* Y0x00, 0xFF);
) e9 |: D1 I$ w& x7 R# B3 b+ M
# m1 }2 N4 Q5 R4 n/* Enable synchronization of RX and TX sections */ $ S' Q) u$ x5 V  R) q7 a" n4 _% b
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */5 O5 _& K+ E. U
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
$ r" j0 ]2 v, }0 A/ A) {McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
  [8 W2 e- o& _1 e** Set the serializers, Currently only one serializer is set as7 ], ~: Q/ ^1 C& _- u3 i4 r  q
** transmitter and one serializer as receiver.6 s" p. a+ |3 \% p8 M
*/
0 P; k6 i! U) O1 f& BMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
8 V& f: D4 E! W2 T3 v) K3 ~) ?6 J- FMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
8 n! Q0 B; Y% n( J% k% ]: u# Z** Configure the McASP pins
& L- r8 D' G, A9 b& I0 k/ H** Input - Frame Sync, Clock and Serializer Rx
; x3 x, E( _9 P8 q** Output - Serializer Tx is connected to the input of the codec 6 n  x' i* ]% `- r% X, z
*/
# ]4 i& a# H% `/ Y- ]McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);  D4 H4 y; e( C+ _- t& j# e
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
& {- w# `6 a8 D2 RMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX* C% o( s' R# E/ x7 e( q, r9 A3 c
| MCASP_PIN_ACLKX# M, U/ r" A$ {7 {7 Q8 `
| MCASP_PIN_AHCLKX8 }$ c3 {6 P# q; U$ @* A+ q3 r( g
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */' l5 i  G& c3 |/ b& O% Z" A+ L5 q
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
" z" a; L5 g7 j" n6 K! Z| MCASP_TX_CLKFAIL
# j' Q9 m+ o& X6 H# S7 f2 P| MCASP_TX_SYNCERROR
3 u+ P  x- i9 X: \! D9 L# R; N| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
% |) j0 m0 [6 ?7 f- W9 B& k| MCASP_RX_CLKFAIL- |- x' L7 W7 L) N5 O) ~
| MCASP_RX_SYNCERROR
6 ?' W6 h/ b, C3 g/ e" y. _5 Z| MCASP_RX_OVERRUN);! w* N$ v2 q2 \' a9 z: |* H. x" _
}
static void I2SDataTxRxActivate(void)
# R2 O3 u% I: `5 W{
; L5 W- Y! s  w! Y0 a  T4 F) m  v, y# J/* Start the clocks */
3 R. C5 V# p2 V6 CMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
5 E1 C3 K4 Q" I" ~McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
3 z/ f' d) G& z: L1 aEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,* I1 T' `4 m, R8 }6 r
EDMA3_TRIG_MODE_EVENT);7 P/ e. _+ c( P# c1 a# h; K
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
- g, Y* t0 U  f! y' `. FEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
0 v7 H5 w" [! D6 i/ k5 n; SMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
! x. ~3 Q# e3 d. c* e9 z$ y3 zMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
& v$ o& v+ q4 I6 q6 T9 Uwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */3 C0 ^$ z4 j' J
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);6 q% b& K* G' g, l. e' u* O
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
1 |  \* B7 \& Y/ H}

6 }% Z6 n6 I; _) ^! f  O/ m) E
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

" w& T9 j. Q4 ?* |




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