嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
  }* B: b0 h4 ?5 }! qinput mcasp_ahclkx,/ J5 F6 R5 b4 S9 L. v. t) {- \  x
input mcasp_aclkx,; I' h- i- G& ]" S' G+ ?- Q2 p3 Z, `
input axr0,' P: J- C2 h) i) z: t4 G

/ B9 i) k, z, p" w. Moutput mcasp_afsr,5 `( }4 E* A) ]
output mcasp_ahclkr,
5 g3 X0 F. G. C) i8 S: Routput mcasp_aclkr,. Y4 P* q( V' u+ F3 {+ ]% W
output axr1,
3 A# Y! F+ C# x8 ~
assign mcasp_afsr = mcasp_afsx;* }- z$ `; s6 G( }* |) y* D
assign mcasp_aclkr = mcasp_aclkx;
& o$ a( J5 Y5 ^# J& |assign mcasp_ahclkr = mcasp_ahclkx;
. {1 @, j& ~" c& F( q' aassign axr1 = axr0;

0 }" C& H4 a+ e: L$ [7 w) P
3 V: i3 d7 b+ A, S# n# I  p& x
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
: ]; ~6 p2 n& E- J! d* g
static void McASPI2SConfigure(void)( W* F- n0 E2 m) N! N9 K$ @% c
{
( ?% Y) q0 c) A: a$ D" fMcASPRxReset(SOC_MCASP_0_CTRL_REGS);& [" }) K9 T/ N9 [; }
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */: i" G! N; F/ e1 E; T! U
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
% `8 Y/ d; C. m0 O* VMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */% X% F; {7 `' T
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
9 j3 V9 [. w* ]9 |MCASP_RX_MODE_DMA);
7 q! B" d  K, F8 N$ H5 aMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,6 o2 d5 Z  Q+ j! Q6 R% B9 S
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
- }, C. T" d6 c! cMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, , {: r- {2 }) g. Z/ Y0 ~4 C: F6 Z
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
/ ~+ K- X! w+ H& UMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
, Q+ [# f; ?. b6 m& i" |, UMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */2 t; @+ D: t9 `' @
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
; V* [9 w. |# e+ t- }McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ) r- m- c# Q( X% X
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,1 b3 X+ Q, h, J( O. B
0x00, 0xFF);
/* configure the clock for transmitter */
0 E8 Q1 m# U( c" M% K) ]McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
$ W7 E* n5 g; d0 {" @1 \# aMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
1 P% S4 f, G; r& GMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
, o+ O6 D# b/ R: _* s% h& z. M( U0x00, 0xFF);
/ H- D) S* R4 H3 H# Q  p2 v+ m- A! x5 b0 S5 H2 s
/* Enable synchronization of RX and TX sections */ / f, y4 s5 H$ P/ X- h3 J. r
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
" V% C4 `+ E: x: GMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
5 p7 C+ _  q7 T! m0 g1 @McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*7 W2 T3 ?' I' O& u
** Set the serializers, Currently only one serializer is set as
0 L9 z. L, V; n& O& ^! k: w& s** transmitter and one serializer as receiver.
: x: u; f3 |8 y% H*/* t& E2 N! i/ E+ B% H2 \: k
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
' f( d4 k1 f, O# n7 M( }McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/** u1 t/ T% c* p9 h, \
** Configure the McASP pins
8 P% F/ ?2 d0 d  W$ m** Input - Frame Sync, Clock and Serializer Rx
$ q# L% Y- c' f** Output - Serializer Tx is connected to the input of the codec ; v( \1 W6 L. r" l! Q; m' M" K: I* D
*/- [7 |3 Z& _1 T7 }9 x$ I4 ]* _
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);% B& ]+ ]5 _, J; _7 \( i2 u
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
* g' [' E$ u& C1 ?+ J* r) H( NMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX8 [* G( Z" v* F0 v: o+ a; v
| MCASP_PIN_ACLKX' {5 ^) L" a3 T! y
| MCASP_PIN_AHCLKX4 `9 R) ^  p5 K: [! _5 F0 ]
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
, c) R; c: m6 t5 y5 H, L( V5 L/ `McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 2 l9 G+ k: `7 p4 N! ]' j+ F6 J
| MCASP_TX_CLKFAIL
8 v1 ?( P, Y( ]2 ~& ~| MCASP_TX_SYNCERROR
# z; C. K# l5 \2 c  y| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR   X, g; L: _) y7 k" ?0 z5 X
| MCASP_RX_CLKFAIL
+ o& r/ f3 ~* B, D2 r( I) K5 |9 g1 S4 o| MCASP_RX_SYNCERROR ! `: _  z3 g  l3 R
| MCASP_RX_OVERRUN);) n9 H) N  {" E! s; c
}
static void I2SDataTxRxActivate(void)  z5 M5 y: u! J: t) R% O
{3 g' U9 S2 Y, z& |% C3 i( y# `2 I9 P( d
/* Start the clocks */
! c7 f' ~% k& a, B) L: K/ iMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);* S# G) {  a! q7 F0 g% E
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
4 F5 o7 q1 H, ~; JEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,3 ~1 S: Q5 R/ A1 M1 g4 _
EDMA3_TRIG_MODE_EVENT);
* t- X( X- S# TEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
4 y) b: s' L1 oEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
) Y3 }( d/ r" c& s9 CMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
& X* U" s1 J# I' dMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
- L* j' o) [1 i( a; u( Mwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */3 z% L& o3 ]; l4 Z
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
, l/ v, n( L- V8 e' I0 D% J0 l* gMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);5 f; j6 B! n" b1 d9 ~) [
}

7 E/ C; U" ^. b
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
  }' h# R4 h9 g# E  C





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