嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
4 G3 r3 _' E. `' A$ |7 r) Kinput mcasp_ahclkx,  F) V4 `9 q3 h
input mcasp_aclkx,
8 q* j! S/ c% C2 ?8 V; i0 |0 Jinput axr0,% p: |- {+ _! B- q) e9 E

% i7 [# O1 h: D$ i: _( P: ?9 A& xoutput mcasp_afsr,' I/ B! y% x" N& T1 `9 ?3 i# ^
output mcasp_ahclkr,. @# ^: }% V5 c' [) v9 ?
output mcasp_aclkr,7 l+ H3 R7 C9 X+ q6 e  U
output axr1,
1 E$ a& u/ H* n/ X* ~. O
assign mcasp_afsr = mcasp_afsx;- Z6 \# G0 w6 z7 ?- I( W
assign mcasp_aclkr = mcasp_aclkx;
7 O% C  \/ o9 dassign mcasp_ahclkr = mcasp_ahclkx;1 e/ S/ t  \4 b' l8 ]4 ?& t
assign axr1 = axr0;

: |7 M( X: z9 a- b  @! D( ^6 \3 [. K- T! Y5 \" O9 p6 n9 L
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

0 O. ?& K# _; W7 w# h
static void McASPI2SConfigure(void)
: q8 S) j8 R: s{* ?! t+ c5 C% f5 l  A
McASPRxReset(SOC_MCASP_0_CTRL_REGS);0 X! t' i5 W& _% s& T+ N5 c
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */  _$ T& D) O0 V9 Y* k
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);. G, A: }, X( t1 t# ~% _: G
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */* [& w; X* B% ]* U$ a6 G0 e
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
. g( i$ _2 e, S) j0 q8 ^& k% OMCASP_RX_MODE_DMA);
5 J. k2 F- `  ~+ ?* d5 r  {McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
8 V( p% n% B/ {MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */: W/ h1 b6 D" C# k) N: j  Y
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
2 D$ O' Z# f; C' V3 n  y; P0 x4 [( XMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);7 R8 i. B8 p" i1 d1 J1 E  g& c5 Y
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ' _4 Z- Q" o7 f$ o, l  G
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver *// @* O3 G2 C5 p% ]/ S( ~  A
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);# K  E. s6 t( C( I7 u: F1 Z1 j
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
$ g/ T6 `. H% Y6 @$ H8 eMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
. p- S5 i+ \9 k- k0 Y0x00, 0xFF);
/* configure the clock for transmitter */
6 a" i" N: ?8 ?# D% QMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);" J  |1 M* I7 o' f# M. M4 O) l
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 2 |; c8 F* I0 N
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
9 U0 ?$ `$ N+ \; E4 ~2 }5 o0x00, 0xFF);7 M. `  X6 |/ g) I8 `0 ~5 ~

3 Y4 J  Z; k  w% ^9 h+ J% c3 t& y; E/* Enable synchronization of RX and TX sections */
) S7 l# |0 i6 KMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
3 i$ ?4 u" w5 J8 ]/ ZMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
5 B* ]3 a% A/ l3 m' d# T  R5 g2 ?McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
5 G9 N$ q) o5 q; n& L6 ~" x+ D** Set the serializers, Currently only one serializer is set as8 \0 S; [7 X7 Y/ D9 q5 Z6 r
** transmitter and one serializer as receiver.
0 c2 V5 j. m6 ^# g2 f- z$ k*/: E% r7 |& t- y& {- D6 N
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
, g5 X' F& ?+ z1 g" f$ FMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
8 u! b+ G& f3 W) o6 u% ^, L& m2 @** Configure the McASP pins
" x1 M, V( b5 @** Input - Frame Sync, Clock and Serializer Rx; m4 _- ?/ P5 g& T; a+ t5 v8 ?
** Output - Serializer Tx is connected to the input of the codec
9 n4 T/ s" _3 q9 S8 `( j*/
8 k+ T. X5 s0 J( c1 yMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
* m$ g7 ~+ s) t4 lMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
9 n: t# d# |1 {) U" nMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
1 {% h0 l: F+ z| MCASP_PIN_ACLKX
5 N, L, p- G% c  T2 w+ \| MCASP_PIN_AHCLKX
1 f1 E% X1 A; ^. n4 P| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */& O! Z$ K6 S- t; P
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
+ `* t( c: \& r' w, Z, w3 J| MCASP_TX_CLKFAIL
, C+ r% k/ ]  @# [3 s( _% C| MCASP_TX_SYNCERROR
! R4 F2 Z% t% t| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR % P' f6 Z* N9 E! x
| MCASP_RX_CLKFAIL# x# s9 L5 U* f% d" O" t
| MCASP_RX_SYNCERROR
. P3 E" Y9 c2 b; Z  B4 r| MCASP_RX_OVERRUN);; ^" C8 K. X$ i5 O9 h" V
}
static void I2SDataTxRxActivate(void)
' z( K+ a" k7 ^{
5 p8 b" W7 U' B. f/* Start the clocks */2 N4 a$ b4 W/ r* H
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
  i- w/ F4 j+ f0 Y/ _McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */; {: V6 c4 z; s/ O+ `
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,5 g5 B$ A0 e8 e( q4 U
EDMA3_TRIG_MODE_EVENT);& m5 A7 p2 Q9 i3 Y1 t, V4 R
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 7 H) ]9 g, Q+ c; m/ t
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */% G* t' D5 ?2 h" U, m7 l& N
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
1 b6 c* T/ ^; |$ k& AMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
3 D0 {0 K8 G! ~# }4 A  Bwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
4 @3 b; x: x" Q) ~9 t; i) Z" W( n( ZMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);2 R- x9 C/ e+ f; B) Y' u
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);6 C' F3 A% p- {5 D" P1 j& j
}
7 s: V! |7 f9 k0 T* }% e4 z( ?  Z
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
) g+ G4 ]9 P3 v4 n8 l





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