嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
9 j  z4 H0 e9 s8 i9 rinput mcasp_ahclkx,3 y" h. ?; S2 v% {
input mcasp_aclkx,
2 R) `9 M/ x. k, Pinput axr0,
6 H. X0 J: G) x
! }7 J" _, r/ L) G' koutput mcasp_afsr,
1 L, J" j1 m- {& \& V/ [  @* q8 H, poutput mcasp_ahclkr,
4 k/ D- @5 X) J8 g0 C' Y  s& M$ q4 Soutput mcasp_aclkr,
3 D6 f, S' U  Koutput axr1,
* {8 o% Y9 H- \2 O
assign mcasp_afsr = mcasp_afsx;2 y  f$ b0 [* g' ^' b
assign mcasp_aclkr = mcasp_aclkx;/ E, y# T2 `; h6 `' V. O  d
assign mcasp_ahclkr = mcasp_ahclkx;
* v% M  S8 k2 V) F3 Q. f6 i( g! h3 }assign axr1 = axr0;
2 ~! V3 ^+ s# u2 a+ U: B9 i: j

3 {' \* D: ?0 D/ R+ C! N
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
! h- j5 l  ?4 _' A3 U" i" C6 K
static void McASPI2SConfigure(void)
/ @% T5 f- R: P  b0 j6 i{
! |3 A( s* b( a: {& W7 uMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
' F' c5 K9 |2 G2 }McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
  U! P. M. R! HMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
5 z! s1 P7 P! @* q! h3 GMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units *// Z- u: \2 }" u8 E/ ?% [  b" \
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,7 E' ]& b! G3 d
MCASP_RX_MODE_DMA);# f3 ?' T" o8 Q7 Q1 W3 B* q
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,, [+ R) b. m* }0 \3 s" z$ M1 \
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
5 N8 ]! e; f+ Y8 QMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 3 {" K. Y1 p; l8 R3 O9 n' L
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);% g0 ]9 j- N+ a3 l7 F* C
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ; [+ o/ A8 n  ], `( R% @- z* P
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */9 F) B( [; ~" N4 e: H" K
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
* D; s4 ^8 |3 p. E  j9 LMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ! {$ h0 J6 I! P" w: m: t4 K. q
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,1 w- J! \! @1 S  V2 C; R  d
0x00, 0xFF);
/* configure the clock for transmitter */1 U1 b% z$ }) E, a) N1 ]9 a+ p+ X
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);6 }4 `) k  n5 w5 [. y
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 3 C# Q& e6 I2 P$ J) P7 A5 u
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,- G& n7 m% t& F5 [+ P& Y7 f
0x00, 0xFF);
3 e; L5 h+ c* u1 M  J& P6 D4 _; v/ k5 o( k4 n
/* Enable synchronization of RX and TX sections */ # `$ m: i- S( U& c, n
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
) L: _& `" r1 D& k% |, f( c) ]McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
0 S2 T$ \  S( ~4 ZMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
& K$ r! i& F8 [$ u4 x  x; G** Set the serializers, Currently only one serializer is set as
8 `- I( ~5 U- v8 k0 p  _5 ~** transmitter and one serializer as receiver.; y7 y" J8 s7 {9 o! |+ ^. @5 {
*/
% W6 ]- ^/ `" u& a& kMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
9 Y4 T3 {  J. r$ D: MMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
' u( M# ?: ^/ z. Y% E** Configure the McASP pins
6 L* u# H+ F7 ~/ J, w% ?** Input - Frame Sync, Clock and Serializer Rx
3 u& a3 C3 u, K' V" d** Output - Serializer Tx is connected to the input of the codec   X1 `$ x; }% T% V7 Y6 B5 t
*/
5 u; n4 e5 I% X8 r0 N5 ^McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);% g! {' m( T+ {
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));3 o/ _* E4 O" s( i: S7 Z
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX5 Z; D9 b5 f1 d4 Y$ R, ?
| MCASP_PIN_ACLKX5 i# q) l" Z" v: t' {: t7 N
| MCASP_PIN_AHCLKX: F5 |  W0 t2 E: b4 u" w) p
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */( K# f( |5 G4 _+ B6 w1 V+ h- C. l
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
" G! A; F& {: f: R| MCASP_TX_CLKFAIL
9 s1 O9 }, Q# @- J7 P! v! D" ?- B| MCASP_TX_SYNCERROR
6 t- z& Y( r( a4 F% z) B| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
. `$ {& W, d6 }6 O6 z  o5 j| MCASP_RX_CLKFAIL
4 M3 }- l- V5 Z- J( i8 I| MCASP_RX_SYNCERROR 7 |9 }# I7 n5 J" M" J. g3 j! I4 {7 S
| MCASP_RX_OVERRUN);1 k1 R; d+ o/ A9 ?' h  S/ B* `
}
static void I2SDataTxRxActivate(void)3 J/ a. I, z8 b8 o; V
{9 a+ q$ H" W( ~8 k1 B5 {1 n
/* Start the clocks */
2 Y* M7 k; |. N( i: _! }7 bMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);- F$ J. F1 R& o- ?
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */* _$ n$ P- t* ~0 b9 R% i
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,! H2 P8 Y4 L4 s, F1 F( ~
EDMA3_TRIG_MODE_EVENT);. r: q" J* k0 b# h" T( h
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
- M8 h9 V5 @/ A* v9 p9 {8 TEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */% p0 C! u& @% ~4 L
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);; X* K  i3 R# I$ G& l: i3 Y3 D
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */3 I9 H" p* _, m8 e% U; E
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
  x2 e$ i& `1 Z/ f) F  B) IMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);$ N( A/ l6 Q/ M! y. C2 o# d
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
) c/ q/ ^0 V+ t}
5 r/ o) }* L0 z$ ~* n
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

) f1 f6 [' s  u. s1 l+ ?$ ~5 r$ o




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