嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
& j; M+ y( m+ r) X, A' Finput mcasp_ahclkx,
% Y, n, \% C: C5 P+ O$ V* e5 binput mcasp_aclkx,
* }/ I9 x$ G0 z) k! M. q& Minput axr0,
. F6 R  m4 [7 K4 `! a# Y
3 n* c! B9 i9 U) ^output mcasp_afsr,# f3 ~7 P) x/ ]7 S7 |
output mcasp_ahclkr,# y4 G9 ?: K5 @' t4 W/ j
output mcasp_aclkr,/ o+ \( f, Z3 N$ R& y" [- W
output axr1,
1 }6 f4 n( U5 c/ l1 A, o8 c* y
assign mcasp_afsr = mcasp_afsx;
( x9 G  G- u8 K2 W( h6 t* J- D: Sassign mcasp_aclkr = mcasp_aclkx;* @0 a0 U# D- U, Y) {. p; M& G  \
assign mcasp_ahclkr = mcasp_ahclkx;
( H, V) k5 X2 a" ?3 M& S$ U! V, S' w5 oassign axr1 = axr0;
" |0 p2 u1 C, L: C4 D/ G# z
6 a$ z0 \9 W5 q. ~
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

1 A+ `7 Q6 P' Q4 n( `0 `
static void McASPI2SConfigure(void)
/ W! X$ l" H$ n5 N+ [{4 S* J7 O6 L- O! m  a
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
3 g' F- r' Q' a; ]: C' {McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */. g- X5 I# x8 B7 q4 n! N0 @" d
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
. ?8 m: K& b# g6 QMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */+ L/ K1 o4 E: _) J
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
- {7 c, w- B& Y$ nMCASP_RX_MODE_DMA);; ?! _& X6 M: L6 o8 m5 i; V* Z
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,+ u" F6 N' y+ v* p9 U3 i
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
0 f/ x# E+ _: e9 R+ ZMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
3 W: i) i' r' s5 YMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);- f  ?# w$ N% ]' q/ `
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ( V# h- h4 J6 b5 Y! ]- _
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */3 a  M% {2 ^/ F; ?' C
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);1 \3 Q0 O+ N( W& A
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
0 E" M1 u. R- VMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,$ ^" P# t1 n. \6 m4 t& }
0x00, 0xFF);
/* configure the clock for transmitter */, U" T' i6 F7 B- L) L5 V+ v
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);+ j# l6 s, q; Z6 {! N2 o
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); * {8 o5 z8 N; v5 ?5 R
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
" _' @9 S7 J$ _# k* S0x00, 0xFF);
* Z; w, G8 u+ c$ a( E1 K" d
6 E" r$ G6 W: z/ }$ ?) [/* Enable synchronization of RX and TX sections */ + r- {0 ?0 [- I1 \& j
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
( A( S6 O5 k  u/ ]" p2 @1 OMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
9 U9 r& [/ Y4 t' OMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
1 x3 b6 V, @/ S' J** Set the serializers, Currently only one serializer is set as* [- w: C% g7 Z. I0 k0 A3 W
** transmitter and one serializer as receiver.
! q7 o4 |  g# j9 Q0 ^* K*/8 n; X: l& }- g9 L+ V$ K+ j
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);) [, ~. h( x5 H9 |
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*9 }: R; N5 p: G) s1 c3 L9 c
** Configure the McASP pins * a8 V1 c- ^" ~: ^( z& a5 S3 ]
** Input - Frame Sync, Clock and Serializer Rx
; d: R7 e1 D2 x  l/ v** Output - Serializer Tx is connected to the input of the codec
% t1 \: e6 ^6 n, S4 p% H$ ~" ~*/
3 |( Y+ p3 f, ?) U+ Y$ j! r7 d6 bMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
2 t5 v' G  r* ~0 C1 Z4 Q& RMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));5 K# Q+ r1 Z- [+ R2 z
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX. j- N: w9 J# ?# V% N
| MCASP_PIN_ACLKX
) ^/ I# _! I, ~( e9 f| MCASP_PIN_AHCLKX/ ^& M& I( ]9 d$ ?; S2 M
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */( k' ~( g9 |# ^: m' C9 h( u. q
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR % U6 }0 L. L+ G& s" p) p$ x/ A
| MCASP_TX_CLKFAIL & Y0 |9 g7 e4 _' @9 ~/ x
| MCASP_TX_SYNCERROR; L3 H9 U1 q2 b! P3 U
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
) r" c* c( w' y6 I| MCASP_RX_CLKFAIL' q! t8 m/ Z0 I8 p
| MCASP_RX_SYNCERROR 1 }# D7 ?& a, T$ r$ X9 T
| MCASP_RX_OVERRUN);
3 g# ~: J' K8 P! {}
static void I2SDataTxRxActivate(void)# ^9 W1 I" q- i$ l$ H, S
{7 Q3 H0 p0 O2 T. X: J) y+ e2 k# x
/* Start the clocks */# V. J  y7 P* A. y4 ^
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
0 o* j$ N9 C; T' z) A' v1 hMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */! D) Y5 B" {' I' o0 X+ T/ y
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
( r$ F4 O- B+ ?* u7 U. [EDMA3_TRIG_MODE_EVENT);5 @- j  r' W6 O. a
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ' @4 ^8 O9 Q" k2 ^! Y9 F% k* X
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */& c5 Y* F/ t6 w  v- i' M5 s+ ^
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);! @0 {7 v+ \% P' ]7 @$ T
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */+ [) N! D9 R. H  N7 F
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */( L. P* h1 ^1 x. L" f7 k
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);, Z. E' P" G7 w, k
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);) L/ C$ ]1 e8 d  w# U) `7 Y& b
}

( \" F: v! |. {9 H
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
. `2 \# d* h( Z! U





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