嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
! d0 Q0 Q5 L: {+ Ainput mcasp_ahclkx,! O3 C. M$ I( w4 s# K# m
input mcasp_aclkx,
$ J& W. u3 |" {5 |  M% g% Zinput axr0,4 N# d! T7 v1 {$ ^* |' K0 `
* }4 L7 M4 V8 ]/ ]$ h) s. A( x) Z4 y
output mcasp_afsr,
$ y  k/ }6 S+ H' {output mcasp_ahclkr,) J: y- j  W" ?  f) K- L  C  I3 m
output mcasp_aclkr,
8 J8 J* P* n, h# O, N: ?output axr1,
8 V+ D/ o1 ~6 e1 e: k0 i; c0 j" B
assign mcasp_afsr = mcasp_afsx;
: B) [7 F) H: D3 gassign mcasp_aclkr = mcasp_aclkx;
1 M9 z/ k) J+ G6 u, O$ Qassign mcasp_ahclkr = mcasp_ahclkx;) w, U3 Q3 k- M+ u) h& N, i+ k
assign axr1 = axr0;

/ }7 L$ C/ X. V6 Z7 Z4 }) E: H5 z6 B. ]1 R1 j- F. Y* S* F$ U) r
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
4 v: J; @7 H: L! V$ P' t( ]9 c
static void McASPI2SConfigure(void)% g9 T7 ]# ]3 [
{
: L9 Q+ ]  e% ?' A( N0 V; tMcASPRxReset(SOC_MCASP_0_CTRL_REGS);$ \6 o( o& D) a+ Z* ?3 O
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
+ V/ W/ u) R& i: D3 ~2 rMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);1 X9 I+ Z9 c7 S% {5 @; X; {: l
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */6 E  q* h! E7 s* j9 ?
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,0 u$ x0 D8 j. S2 {$ s. ~4 V
MCASP_RX_MODE_DMA);
. t# n3 K$ v0 U: s6 G! L. Q/ gMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,) l' ]* ~; |) E; f
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
; S4 Z: |8 d: N' JMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
) [  ~, C: N* X! o+ FMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);  F) y/ h4 v9 ~0 t
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
3 e8 ^- _7 X* c8 w% yMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
& Z; o) P+ p( QMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
, T+ ]" H% Y$ ^. v  pMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
2 G1 w* }. \1 H6 L& I: S! nMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,- S$ d" ]4 M( X6 A
0x00, 0xFF);
/* configure the clock for transmitter */3 Q& z% }( F, k. v/ o: ?. }% @+ X5 B
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);5 Q& G* c3 e- M2 s( d+ C
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
1 E# K. l( q+ p" ^. |/ sMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,: S' {( Z5 I& h4 H3 b0 D  u3 j/ X
0x00, 0xFF);
- a" B# `, W& b
+ J- T3 U0 K8 ]  T2 b- U. f/* Enable synchronization of RX and TX sections */ & u$ Z) `: X1 U! I+ l
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
1 S; O7 u& o# j9 v% k& gMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);3 b( C  {! N0 i  _4 ]2 i
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
( {! t2 v7 i6 X% L$ @** Set the serializers, Currently only one serializer is set as
1 T  C9 J, c& f" d+ d** transmitter and one serializer as receiver.8 t9 M# M0 i7 q: R
*/& @$ v9 B3 X" n9 g5 Y
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);9 ^  `( D' ]5 X0 T
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
6 |+ z  Y( w2 e* t8 W2 k* K** Configure the McASP pins % ]& S# m( U/ _/ G: ^
** Input - Frame Sync, Clock and Serializer Rx
0 Y1 m' d% C+ W6 A1 i0 N** Output - Serializer Tx is connected to the input of the codec
, d. M2 D2 k/ D3 n*/
  v( X5 |; B1 h6 `) ^! K0 KMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);0 r) `3 z+ j: u  `" Q; w; |) Q- f
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));0 v! K/ P, k/ r5 C3 w  P
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
# Z+ {5 _& y6 E| MCASP_PIN_ACLKX+ q$ |4 A$ P7 o2 X. m, }
| MCASP_PIN_AHCLKX& i1 l4 p" T5 {+ m- Q  T
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */  J) `) `( D* M9 v3 I% H- I( _% s# I* i' j
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
/ B5 W: D$ p( q0 u4 z& E/ o| MCASP_TX_CLKFAIL $ _5 k$ Y5 W, {$ s* Y2 E0 a
| MCASP_TX_SYNCERROR; c. \; \9 ]* v) B) [5 V
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
! u: \; \" g3 C- A7 @| MCASP_RX_CLKFAIL
$ a: c% R1 S. {+ L| MCASP_RX_SYNCERROR
5 ]; D/ y" q/ U| MCASP_RX_OVERRUN);
5 O3 b: T9 _5 P. W}
static void I2SDataTxRxActivate(void)5 ]( F* A# _" D+ l; y
{
2 W& V( k2 _/ @  ^$ {- |/* Start the clocks */% b9 H3 H# W, ~% }
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
; _! `$ D% f2 B" pMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */9 A9 V0 x$ h# `. _
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,: A- r* K3 [5 g3 T: d$ G
EDMA3_TRIG_MODE_EVENT);7 D+ l. G" L& u8 O! A/ s+ ]: j
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
( o8 s3 e7 h: j1 b, n/ C  P& XEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
4 a1 S; W$ ~" I8 B& R4 l, t5 C3 HMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);+ f8 g! ^( G) G4 {5 a- l
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */8 \" r8 A: b$ x- }; }, i
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */- N! Y% u7 \1 Q7 V5 J
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
! o7 [  {- H; S+ XMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);& @# {9 w+ H9 P: n9 X2 z
}
; Y0 h" U! n5 g/ c% B4 M
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
( X# u2 i6 W+ z* y: [





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