嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
/ T; f3 |1 q- N  i1 ^2 x9 J* h8 @input mcasp_ahclkx,
7 R6 v. Q, D; l. Z+ O# G3 P$ K2 \input mcasp_aclkx,$ L! [7 I& f# ~. w+ Z" V# ?
input axr0,
$ h' ~! C! w" U0 u2 l, [
0 A) e# u" M6 K" |$ F% X4 g( |/ Joutput mcasp_afsr,
( D6 w& T: C- G3 |" eoutput mcasp_ahclkr,
# t7 M' h5 g: E. ~1 W: n. ~output mcasp_aclkr,
% ~& k9 l% O/ Voutput axr1,$ W6 W* I1 Y2 L# A
assign mcasp_afsr = mcasp_afsx;
2 ~# ^0 {  |( Z7 G( ?assign mcasp_aclkr = mcasp_aclkx;
& M  F8 Q6 a8 ^& Y5 T% G& gassign mcasp_ahclkr = mcasp_ahclkx;% L$ r! O4 H) X
assign axr1 = axr0;
7 Z3 V; z( U6 ?: M& b% j" x

! D" ^; p, ^$ X1 h$ j; k
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
- }" z1 F7 |3 _3 @' C9 i  B
static void McASPI2SConfigure(void)3 r# t( ^" G9 A8 k7 V# S
{' a4 C0 i+ N" `1 N
McASPRxReset(SOC_MCASP_0_CTRL_REGS);# \8 W5 l4 W, u, t) a! J: |0 A. j
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
6 \: K4 C( }, K  ~9 ]McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);2 R# u3 D: @2 o3 }& {1 u
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
& q0 ?/ K* k$ v# {% K/ kMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
& L2 K4 k6 B2 z' Q* k  ^MCASP_RX_MODE_DMA);  Z/ f2 [8 z8 i' s; B0 J% Q
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,) k7 U1 c8 M$ P) i3 i. G
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
! C( x, t, w, H6 yMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
$ ^. l1 {! M& I$ sMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
2 Q" i: w5 ^+ e6 u! Z0 I, LMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, # b4 N& P1 V7 `) ~( i1 K
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
' o" I, A  l2 R5 Y' \McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);  R1 T5 E' K  ^& I
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
" {' ]! D* ^* c: h9 z. k" `McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,. ]# D5 A" W3 l* J& N; Y7 x# N4 Z
0x00, 0xFF);
/* configure the clock for transmitter */4 R& `9 E1 j# |3 S
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);+ @: b) `4 T5 h- N0 b7 k1 ?8 Y
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
7 @5 r& n; P: {) |' r8 DMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,9 }! y$ W+ w; ~6 j+ @" I! [
0x00, 0xFF);
, ~1 q* ?8 N; _& c" I& C/ X0 V9 r  R
/* Enable synchronization of RX and TX sections */ 7 |8 h6 `8 P7 b
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */; O7 \' ^. u1 H3 K! Q
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
( g1 k( q4 q) f" gMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
9 i& B) g. k0 p6 Q% I9 M** Set the serializers, Currently only one serializer is set as0 A; {2 \) t7 n$ t" Q& H) e8 m
** transmitter and one serializer as receiver." q/ e. `& a* ?
*/& b% ]% A' k, i' Q3 G$ k8 y
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);+ d% b8 Z4 S! I
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
9 \, j) W" G% ]  ?' M** Configure the McASP pins ( o; x" d% |9 d
** Input - Frame Sync, Clock and Serializer Rx' P* x  H+ r2 e0 S
** Output - Serializer Tx is connected to the input of the codec ) F) n( W; Y. n3 e
*/, I" v3 O2 F# E* t/ m$ ^
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);. q! d  g" v7 r  L0 X- K! Z
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
. `- a! ^. H: o. NMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
( S. M! C- m8 d3 e; {0 ]* S| MCASP_PIN_ACLKX
9 x+ B! Z8 V# ~. k& ]' f| MCASP_PIN_AHCLKX% a) `5 Q# ]( p# ^# }- {! r3 o9 D& o
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */* T/ ?9 E+ k0 `7 R
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
: g! e6 ^( j/ l3 p4 I- I4 G5 N| MCASP_TX_CLKFAIL ! R1 r: C6 N' V0 M: U. r
| MCASP_TX_SYNCERROR
9 {  O$ \+ _! W4 c. [| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR . z( P9 \& o1 D, f3 N7 C1 @$ d
| MCASP_RX_CLKFAIL* _& Y0 W' `- ]! J1 ]0 x
| MCASP_RX_SYNCERROR
0 k0 f& R- v+ `9 `| MCASP_RX_OVERRUN);
) H1 v- @1 h/ _5 D( o6 t7 O" V}
static void I2SDataTxRxActivate(void)
; t; k" ~" f6 E) J6 v2 ]" K- P3 o{# ?  w9 K6 K* H, D9 M
/* Start the clocks */
( M: v- ^7 \( x6 iMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
- G* w" j# j# r5 L  o) WMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
' A' y2 z+ @# M# h* `. d6 XEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
2 U( u( o5 B$ @6 T& z5 L! g+ Y$ hEDMA3_TRIG_MODE_EVENT);
2 j+ n; C' L8 Z# {+ x6 cEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
1 X+ T7 U9 e. F& M' BEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
# F0 A! r/ \( x& @: L. \9 YMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
9 h4 O9 `6 y! ?( k! P% CMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */. z( g( \+ E- q
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
2 \; Y1 s9 n3 F! U8 @' N$ w; N4 PMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);8 ?2 Y! v  B% _9 J( ~
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);' ^; q4 J/ e# L8 q, I8 R( O
}

: [1 p# Y" \3 R  [$ }2 q( k$ `$ Q: ^! ]5 O
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

% P: `# {  Z# E$ M




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