嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,  A2 x5 _) d& ^) E+ H
input mcasp_ahclkx,
+ \& S# X% H5 J! Y# x( n3 w- pinput mcasp_aclkx,
6 z( E$ H6 d4 b. a8 x& Uinput axr0,
* d6 ]7 v4 w' Y3 ]. z5 M% [
# ^, X8 W5 K# l& J. s- o2 k: ?8 [; youtput mcasp_afsr,
3 k2 R; c% G+ t8 T7 m0 H) Y+ U5 f% }% Toutput mcasp_ahclkr,; A8 \% w" I9 C
output mcasp_aclkr,, i2 Y% F. B( z2 r/ E0 X
output axr1,+ D8 X4 U. J; D
assign mcasp_afsr = mcasp_afsx;
1 z% Q6 T  J. }) Fassign mcasp_aclkr = mcasp_aclkx;
3 X. Q  [0 d. Iassign mcasp_ahclkr = mcasp_ahclkx;4 f* L) Q& j; T; Z
assign axr1 = axr0;

- \* U* v& ]8 J# [' w, ]2 {4 w9 b' N5 D! e) T7 E& h" ?
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

0 K, m# X: a0 z. I
static void McASPI2SConfigure(void)
" L/ m- |# K" s5 B$ s+ T' b4 u7 T8 L- @- @{
( G0 Q5 q/ |5 P' Y# YMcASPRxReset(SOC_MCASP_0_CTRL_REGS);9 N, S+ F6 c3 s1 v$ g+ S
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */6 s+ K) a" b$ T# L
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);( Q  J# A2 c9 p% y) j
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
4 u5 o0 Z8 A5 e  Y& ^, X9 hMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
" |, M8 c+ n5 B0 \5 AMCASP_RX_MODE_DMA);7 ]0 X/ P+ V  M! V
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,  `0 j0 r9 s8 P* H$ C, r
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
; a! ?% P% O0 @; f! uMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
3 Q3 h8 x+ B5 `2 e2 R" dMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
% K: R3 Z; E: ?, HMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, * P; d7 w' X! g& Y7 W& J7 b
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */3 [1 k* k3 H9 P( I8 W
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);/ a3 d  l: n! h! x
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); + W! w9 H  M; P
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
  m7 \3 `* `% W5 x. e9 N8 U- J7 u( e0x00, 0xFF);
/* configure the clock for transmitter */
6 E' s( u( {' a* `2 N! CMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);9 O" @* k. Q! N& Z- g% y/ I8 w
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
4 t9 Z! l5 }3 A$ ?McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
- Y* W/ ~* f0 M% I9 E& y0x00, 0xFF);
- t( {& q' D+ g: c$ o6 T2 w% x
( `1 w; m6 J0 {9 q- y/* Enable synchronization of RX and TX sections */   d' ]' W1 M! u5 E0 q; x
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
. f7 c1 n# I; S2 _4 yMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
% b7 r0 _, R' AMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*5 B* l0 }0 y: ]
** Set the serializers, Currently only one serializer is set as
0 |: R1 @: ~- _6 a** transmitter and one serializer as receiver.2 ^7 [5 Q" k' f7 e- B
*/& i8 \% _5 {. ?+ U8 K" f
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
, _6 I2 W6 Q5 E3 k9 YMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*# D3 Q2 K1 n* M2 J* G
** Configure the McASP pins
0 K. ]- E! a; [** Input - Frame Sync, Clock and Serializer Rx$ ?7 {% @+ i- @4 q# K2 _
** Output - Serializer Tx is connected to the input of the codec / H/ m0 w$ I9 @1 @
*/' k0 T% }& \$ @% k* E
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);; m; d, ]9 n' A' t
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));6 Y; D( R8 S9 `3 |, u
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
  ]( y' i, h$ \9 I| MCASP_PIN_ACLKX
. H3 Z' ?2 w5 h4 o# Y$ A+ q2 O2 ]| MCASP_PIN_AHCLKX! O, e' e4 C) |
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */0 |8 ~7 S% g! {5 G* j/ T
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
( F- P# v* Q) t4 j( T% }| MCASP_TX_CLKFAIL " P" k4 h4 \: m  y
| MCASP_TX_SYNCERROR
2 N- U* n  f6 R1 r| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
+ Z. ?& V# L9 b1 k0 _) S| MCASP_RX_CLKFAIL
. N. i. E* f; s' g| MCASP_RX_SYNCERROR
0 \0 u4 m& I, T- ?  A/ a8 X. l: || MCASP_RX_OVERRUN);4 y# x4 |! {, u
}
static void I2SDataTxRxActivate(void)
$ V2 T: s5 [& T) H4 F{
8 f) u) t$ [# }3 L1 h/ C; J/* Start the clocks */
8 T# \5 |& [) H1 I- ^McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
" F- z" K" m) g5 bMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
% G1 G( E1 Q$ u& y8 DEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,3 o3 B0 m  l" K' W$ M
EDMA3_TRIG_MODE_EVENT);
1 u/ h* x' g7 CEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
* J- ]- l* F# B+ K  c) }/ U: UEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
. [) w: `7 f- w, |- OMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);$ ]! n5 H6 b, I/ W6 o
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero *// Y3 F" d$ Y! E
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */7 D% Z  ~- P" a; x. T* s+ N5 d
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
8 d* x. {9 T. |% Y3 cMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);8 t) c9 C+ e" `: C6 P! }" W, A1 R
}

4 p. L% t& b6 k, ]$ E( y1 n% _0 z' a  L
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
5 e% E& Q: {# M' n3 O# B





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