嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,( q/ ]& C+ q5 f7 v9 M
input mcasp_ahclkx,
7 i+ ?. [; L9 ninput mcasp_aclkx,
# }5 e7 `+ W4 e& K8 E7 v0 xinput axr0,
" h% D5 l) \2 L! Q" O/ s  r3 r0 t: F% U& C! U1 l4 v5 S
output mcasp_afsr,; j6 e8 b" Q, a4 U- c$ d, l
output mcasp_ahclkr,9 l4 w- {( w7 n& o5 x; ]5 G
output mcasp_aclkr,
, m: ~# `$ q# W, _! ~3 d- v2 Goutput axr1,
+ D& H; K* s) e; y1 t9 N
assign mcasp_afsr = mcasp_afsx;
8 q6 I# L7 J' Y' eassign mcasp_aclkr = mcasp_aclkx;
8 u5 A3 o6 r  q# B4 H9 qassign mcasp_ahclkr = mcasp_ahclkx;
; h, n5 A8 z1 j, bassign axr1 = axr0;
1 V) Q5 O7 F  n4 `4 ~+ w

! g, {0 m( V5 b6 [* U8 @
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
/ p4 D, B( c# h+ J) G' C: m
static void McASPI2SConfigure(void)& M% s; q2 q1 d# e1 @- M3 |
{$ ?+ D) E; O' W  Y
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
0 z/ _2 J# }" M$ X* w+ A, P* gMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */  }6 W3 p, k: O$ \+ @5 R$ `
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);* C  G2 t6 ]& q# `& y
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */8 _& X8 ~  q% s( w
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
( Y- \' k* G8 L" c0 LMCASP_RX_MODE_DMA);0 M1 w: A  w6 R( m" ?
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,' m& q1 G; M: i5 l) i
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
) R' J7 }: U" M6 qMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
- ~; k4 ~7 L0 f3 }' T& rMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);9 ~3 p' Y' J- a' w6 F8 b  M
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
' Q' \( J- |* E' v! i" qMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */' M* D5 d2 |) L) ], a$ d1 B, n
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);9 ?# m) z9 T0 D5 p* r8 C6 h
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); , J# b3 P/ G- U1 v( k
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
# q6 M5 {0 Y, {' {) d  p0x00, 0xFF);
/* configure the clock for transmitter */
3 q/ j2 O4 u0 v( O$ UMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
* z( C2 `+ ?0 x8 b! SMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 7 f( [+ J* {* o0 P. o+ A
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,, h  f+ s/ n4 Z' d
0x00, 0xFF);
6 {* W# j9 ^* y
- W1 _. }9 \4 Z9 F0 v/ i/* Enable synchronization of RX and TX sections */ / F; L$ H& r9 z; k. f
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
' X& F: l7 k& R- i/ p7 f; A& V0 I0 qMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);. R  n0 w3 g6 y% p) E$ _6 O8 N. ]
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
% Z6 v6 d# R; }** Set the serializers, Currently only one serializer is set as2 F+ l6 M' J. n! u2 G# S% a( {! P' g
** transmitter and one serializer as receiver.: Q2 y! L) R; n
*/0 a& R* Q7 |7 |# s( P
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
* i+ h2 ?  W* e$ a- }McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*0 _  o& ~, K" ~
** Configure the McASP pins + [9 k$ |+ y3 K& u5 a
** Input - Frame Sync, Clock and Serializer Rx7 L. F1 ~0 B% p1 x
** Output - Serializer Tx is connected to the input of the codec 1 }8 L6 e. r4 \
*/: i7 O' h6 a/ w
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);. c2 _: b. _* t9 L2 R9 z0 e( }
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
( v; x+ k: @; I$ C3 ~- l- h1 ~1 q7 p8 JMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
( D  N: G- [) y6 x  @$ B| MCASP_PIN_ACLKX
6 p: A4 S6 o* V2 Z1 l| MCASP_PIN_AHCLKX, S" ^" J* y, B- l- |& E9 W: N
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
. ~; Q) a, g# n$ z4 X* g8 R5 NMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 2 ]/ w. L- A! R& ]4 _
| MCASP_TX_CLKFAIL
* y' g1 ~/ B# M  t| MCASP_TX_SYNCERROR/ z) n' h; x( r  t5 d) H' i
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
/ e; p8 p4 Q& a3 G0 @8 b2 N| MCASP_RX_CLKFAIL
, d) X! z% H5 G. L) Z5 G+ u- W4 G# G| MCASP_RX_SYNCERROR . B3 p) K8 S2 f: |
| MCASP_RX_OVERRUN);, j! d# y! Y" p% _" \1 w$ C/ ]- y
}
static void I2SDataTxRxActivate(void)
$ F9 a: h/ p2 g, _1 g9 ~- `6 h{
' \: O* N" d" B! P# ?. ?4 ~: W/* Start the clocks */3 e7 g( z0 p: V4 p
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
: O" P; h6 o9 `8 d6 CMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */' J$ \( |3 s" `3 Y. y2 \
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,' d1 E1 z8 [: C8 C" i: m$ N. O) P
EDMA3_TRIG_MODE_EVENT);
6 a0 X1 g) o! O; Q  sEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ) k7 I' ?7 T- U7 a
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */) t8 b( N) a+ B# V# r
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
7 c8 O% b) b# Y/ YMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
* r7 j6 D1 }0 U+ fwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
" u0 r0 R; r3 e+ l3 F* BMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
5 v8 I& L& ~  D: A. G; TMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
; `: U. ]( L% O- A0 [& }  q7 m}
' p& p2 a/ ~5 s, ?1 r
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
1 X0 z- P0 n( J8 g) j" J) }& n





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