嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
. ^9 ~( [. D# x0 e$ C, sinput mcasp_ahclkx,5 i4 z+ K. [4 }3 c4 G
input mcasp_aclkx,7 g6 t$ k+ N" c' {
input axr0,. O8 _" T- ~6 _  N1 ]" i
) ^- b0 p& T2 J: |
output mcasp_afsr,
% g. V+ c" p9 {( T2 c) ~output mcasp_ahclkr,
% t6 T1 g) C' N: x6 ?. i( moutput mcasp_aclkr,
/ {2 l" k4 k# k2 P  ^) J$ aoutput axr1,
* |- W8 \3 E! _4 s+ q, r
assign mcasp_afsr = mcasp_afsx;
4 j3 ]% V- [) U* Yassign mcasp_aclkr = mcasp_aclkx;' M( R$ Z9 }6 m. u* }& v
assign mcasp_ahclkr = mcasp_ahclkx;# R6 |2 |# q" E
assign axr1 = axr0;

0 K. L  K$ E# n& x# V
9 O$ v: j3 r% r9 g
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
- u  g. U0 Z) U: o7 b% U2 X$ Z
static void McASPI2SConfigure(void)) T# p4 E& k; y
{
' Y; w& ]) c. n7 ]# z0 l$ nMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
1 F' J. ]( ^4 Z+ A$ qMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
9 ^# M! p( ^1 Z6 cMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
* v) x# L' N3 s; j2 [/ D0 mMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
, M: W% [/ x, r5 O8 XMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,& Q; \& p, r! B  `" t& N
MCASP_RX_MODE_DMA);  o, z2 A/ [9 j9 x8 B2 L: a
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,; Q2 I; Q, E" S$ ]- P3 p6 J& J
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */* v+ A3 d6 P% Y) B6 }
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
- l- s+ ?: A4 o- l6 P. ?' N" gMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);. |' ], G" W0 y0 c; @- |3 x
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, & h- k0 p$ r# w8 i* ?4 Y/ ^
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */! @( B0 M' }' X; Y
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
0 D% ~0 z% y$ GMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 4 X+ ]7 j) r5 J. I+ v
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,2 w+ R2 K5 m  V( B6 y1 ^4 w2 c, K
0x00, 0xFF);
/* configure the clock for transmitter */- o% g$ L4 G  o( I' C
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
& {) M- l2 g4 ]5 b& G: G; g" jMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
8 f/ ~* j* {4 l( z, i1 z4 iMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,. I9 c0 f6 F; }
0x00, 0xFF);
) H# o4 k  P% U  S2 Q9 W% l9 A4 ]
/* Enable synchronization of RX and TX sections */ ) u! b7 S% W2 z8 b1 s% Y7 I
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */  A$ D* X5 z0 T1 {2 T5 m# Q
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
& l+ ^% G8 Q2 b* w8 z' KMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*! u. Q4 {2 Q5 }1 }
** Set the serializers, Currently only one serializer is set as* U0 w% p2 y6 j' m( T; W
** transmitter and one serializer as receiver.
# [+ Y3 U% Q' a*/
) y6 e7 ^. e. _3 U' tMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
0 R- X. a6 n, o, C4 tMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
! [4 Y) Z1 y* B** Configure the McASP pins
: w8 X9 a; |* D& k/ W& }7 j( N3 v** Input - Frame Sync, Clock and Serializer Rx. `, I9 q$ [. _% y$ P
** Output - Serializer Tx is connected to the input of the codec 3 {# n0 k/ c0 v
*/
& A- {' A% y- n; L" C" p5 VMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);6 l  a2 h0 K; R# S4 C
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));% f$ }" q- C" c9 a
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX1 e$ K7 _( B/ r6 X+ q: X
| MCASP_PIN_ACLKX# L+ x& D- l4 O0 b
| MCASP_PIN_AHCLKX  [1 s; I$ T, T7 b
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */3 ^) `/ x) W4 ^! v- m
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR # D  _  B. j: R( W3 t" o+ y& T
| MCASP_TX_CLKFAIL
, ?  x1 c" H+ n/ |5 m+ j| MCASP_TX_SYNCERROR" j; o" b5 Z. F1 w9 B. j
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR $ @1 |8 d! k- T( O/ n( ~& N9 ~
| MCASP_RX_CLKFAIL) ^4 t" q4 l( g: l7 C
| MCASP_RX_SYNCERROR
& v' o' B: q" d9 @$ p' a& J| MCASP_RX_OVERRUN);
, t8 Q4 E+ R' \: C  v}
static void I2SDataTxRxActivate(void)) l; s: m  j9 P: o+ w0 s6 N
{0 q; v" V0 w$ ~7 O
/* Start the clocks */( w" V! x; i" _( _# r
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
8 m6 ]: T$ f! YMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
$ ?1 r1 U' ~/ t: t7 N' P; DEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,6 B5 O9 U. \1 k% ^: U3 `/ N+ e( j
EDMA3_TRIG_MODE_EVENT);
7 P1 H$ o* o, o! }3 c+ }2 ]8 ~EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, * z' \1 U- S8 b  |! v
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */9 x7 m7 a/ O2 y
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
0 ^# o. J1 O  |) MMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
8 C/ _& o! a8 q% _' Qwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */7 C3 g6 B3 c% l: d3 y$ j+ f
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
3 c3 r+ M7 S4 ?( w' Q& M  G; Q8 AMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);& U/ J- \8 x3 H& o% ]
}
4 h7 d1 J( S7 y, F( ]: v% F
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
6 F9 j% ~- j. \, y$ P. ^





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