嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,' z; d# S% }  k" W' ?1 h6 u
input mcasp_ahclkx,
  N/ B6 f6 h- R! f1 H/ c' linput mcasp_aclkx,
4 Z* b- P( D" w  _* {; y: Iinput axr0,2 F9 F+ H5 e: [

3 S; @8 V" ?1 W  F/ uoutput mcasp_afsr,! U+ R2 P) M6 |
output mcasp_ahclkr,
2 A: @9 S' K8 b8 youtput mcasp_aclkr,# ^( @0 p7 ^& g
output axr1,
1 d% R$ K* i/ c* z( X4 W  a
assign mcasp_afsr = mcasp_afsx;
* u* ^2 k" ^( L# X7 S6 |assign mcasp_aclkr = mcasp_aclkx;
5 v. ?7 E+ |8 u, G  z* x: Aassign mcasp_ahclkr = mcasp_ahclkx;. l8 M- s5 z5 I/ g: x( L) e
assign axr1 = axr0;

/ ]5 ]5 Y: g( i# I% O4 a8 L, n2 Q6 Q* z( V
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

3 T! Y: Y' {% N) B2 b% E1 _$ l
static void McASPI2SConfigure(void)
4 O- b0 y# _$ ^9 ~; s, v- H{+ z$ K! U% D2 h* [% _+ }
McASPRxReset(SOC_MCASP_0_CTRL_REGS);9 }0 O' Y& g) G6 ?
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
/ N/ [! E3 k! JMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
6 |" F5 l3 }" n. h- A7 i' pMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */: s4 {4 M4 \$ E+ Y% D* H2 L
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,4 ^  t5 S( S/ G! L1 ]
MCASP_RX_MODE_DMA);7 N& r5 W6 L' _" [3 o. k: _* F: `
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
/ o+ M4 J$ e4 p* p; e2 QMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */6 O* |! l4 ~+ o2 |7 G2 k4 s' M
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ) y9 z; r7 W/ V4 b" Q! {
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
9 b7 ^" o+ h6 n# l( AMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
4 V/ ^: U7 A- Y. z( rMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
) I9 X. O/ R3 {& [1 A* V) e$ lMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);1 t, k0 z: s4 L& L2 \
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 4 M) G$ ?/ A  y: R* s# d3 X
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
+ \% Z8 f, n' f; U0x00, 0xFF);
/* configure the clock for transmitter */
8 f6 C( Q9 m9 I. d! fMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);. H3 a# D4 y6 a  f
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
% m: P0 S1 u7 K4 rMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,' [! u5 Z! c1 P  t
0x00, 0xFF);
$ \: y' U) M" U5 T
& u" M# \: X* t2 q/* Enable synchronization of RX and TX sections */
8 R7 a1 E2 b% d, F! _+ q: ]McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
' P7 e- ^( N  Y! E1 O7 RMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
" r2 E8 Q+ y1 s8 ], w# yMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*2 t: D9 Q8 _2 u7 s, l, }  y
** Set the serializers, Currently only one serializer is set as3 `: @- D3 ~3 R3 E7 W  N# E
** transmitter and one serializer as receiver.5 k! S) @) X5 j& ?  r8 [$ `
*/
( S* d, U2 e) E8 G% D# u8 K! L  y0 gMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
* k2 Z( u6 D+ c7 a" _McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
5 ?3 e9 ?- H: A** Configure the McASP pins 0 k# e/ m: i5 F# R8 L- I
** Input - Frame Sync, Clock and Serializer Rx1 b! j/ n, T! E: b
** Output - Serializer Tx is connected to the input of the codec 1 E, K) f/ N. G) h% s& o5 U) Q
*/. ^9 L" z& u1 `) j$ U% K
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
; v( z2 i6 Y- N, e: `McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));/ j7 V" Y. J! E  g
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX# y, @. z, g4 \$ ^4 }# \7 G( G
| MCASP_PIN_ACLKX
3 \; R& q5 Q$ t0 l0 t" T| MCASP_PIN_AHCLKX5 l; n. X5 x! k9 I$ E9 _
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */' U8 F5 w8 h% R+ Z$ H3 O
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
* h4 _7 J2 A' t2 @8 B| MCASP_TX_CLKFAIL $ @5 w3 _/ A4 g3 O# F
| MCASP_TX_SYNCERROR
. k" x6 A- M+ q& N$ w8 k* i0 K| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 4 B; }* _% F( u
| MCASP_RX_CLKFAIL1 K, j: X/ t* f8 O6 X! Q
| MCASP_RX_SYNCERROR 9 M8 ?, p: H1 G$ P9 c- F' ]
| MCASP_RX_OVERRUN);
( R6 |8 W8 q# V+ |5 W# s}
static void I2SDataTxRxActivate(void)
2 }9 U1 ~# a$ q* I( g4 \% G# p1 G{
1 x* K- I: E3 L2 q/* Start the clocks */
: }& `5 b; t! a) W8 p' @% `  h, [McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
( r0 T+ H& i# PMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */. E4 @8 W, e1 c! h
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
9 A' I" `5 X1 C/ o* VEDMA3_TRIG_MODE_EVENT);) y3 i0 z7 `+ I
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
9 H" V) m) ^9 dEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
: x; D- R7 I4 {$ fMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);! k8 V7 ~1 Q) V  {' c
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
! D3 v  `! U3 _, jwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */: @1 g; O& B  o7 w  S+ A
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
4 ?, _) p* L# ^McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
% M, w2 r/ g( J4 a& O8 `}
1 T2 l9 q: B4 f3 m: y. H9 m7 L
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
  L3 }6 q$ y( y" v9 ]5 r





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