嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,8 W: v, R: N3 y) i5 h
input mcasp_ahclkx,
$ {) x! U7 E( r# q: ~9 W4 ninput mcasp_aclkx,+ J) U% }0 z' [. U* }8 ?
input axr0,1 `! G, d1 i5 `9 x/ @
. [* R$ l9 ]( Z; e. v' _- |
output mcasp_afsr,
! C% W' e5 w4 qoutput mcasp_ahclkr,# D( w- S% m" |2 \; m2 g
output mcasp_aclkr,
( F) j1 r$ G* q9 Noutput axr1,
3 g9 \9 |8 ~3 P; e
assign mcasp_afsr = mcasp_afsx;
& a: }3 Q6 E! {( o7 V4 M* wassign mcasp_aclkr = mcasp_aclkx;- b$ }# l; H1 d
assign mcasp_ahclkr = mcasp_ahclkx;& `/ p! i/ Z& ~* S  |: p
assign axr1 = axr0;
: B: H$ {$ A  a8 [6 X

- O  h- w1 k& i* ~7 K! G: V/ M6 B# Q
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
! H/ |: s2 D/ u
static void McASPI2SConfigure(void)
  _0 Y6 A8 H- r, M{2 P( _, l4 }* S1 y$ ^) n+ Z& _1 |
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
' ?" n* ^% L" Z4 eMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
, e- [6 }) @2 ~" X. _, T' TMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);1 a- B0 M1 `# y( x4 i( A/ A
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
% w' ?# D8 n5 RMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
1 f* \; w" h! |: c( q6 nMCASP_RX_MODE_DMA);
' [  K9 L2 `: Y! S+ oMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
: a3 l) c6 w1 f' N5 pMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */6 I: K" Z; `" n& X
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
: V9 E0 H& g3 d6 w. P$ eMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);0 K  z9 t2 X: Q
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
& Q7 l6 N7 n9 F5 FMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */, E7 f" ?6 t. Y5 K
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
. y- `5 M- o/ jMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
3 v- e" |! k3 U) ^/ ]# G/ P. QMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
0 E$ W3 ?6 O1 I3 s2 G0x00, 0xFF);
/* configure the clock for transmitter */7 p% k" M* z& [# L6 \, J( ~  g
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);2 x8 J  m3 ], p
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 0 Q4 d% k  _- k7 ~1 B  _' F
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,2 T# T/ x% h. f
0x00, 0xFF);- F, i# M# `, ]  U3 W; S3 L1 x8 J2 m

6 Z2 g( o9 C! D3 }/* Enable synchronization of RX and TX sections */
, D3 r; X/ c! ?$ {& |0 L: T3 D' BMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */+ b, w+ |) b8 J4 ^) P' \
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);* X; V; v& g5 t8 u( {1 N* D
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
! i+ |- C: I  o( C0 l0 `/ z+ o8 P** Set the serializers, Currently only one serializer is set as/ t# w+ h: v  x$ }" g' k
** transmitter and one serializer as receiver.
  B/ s/ t1 V  A3 |( p. {*/
! s  M7 _. d6 |" I) z" _% SMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);5 B# k" N# ?  w+ Q/ G) k$ U5 @
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*3 R* o# S% b& z7 F( q/ V
** Configure the McASP pins
  {& Z2 p: @5 \( T** Input - Frame Sync, Clock and Serializer Rx( k' }" D2 g" A* e& t- i
** Output - Serializer Tx is connected to the input of the codec % O0 J5 W, t2 i( g2 o- T
*/; R2 ~4 X- r- a0 y1 T
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);9 ]  E9 A5 X( C7 U) ]
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
0 B, _; F2 {6 w* z5 B; YMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
# c* i/ a$ N$ J, p6 E7 u0 P| MCASP_PIN_ACLKX5 `5 J: X: W; a8 C: I) r% U1 B
| MCASP_PIN_AHCLKX
* Z: V# K2 t( m+ q| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
+ v0 b/ x  X3 ]1 ]7 ~0 |: ]$ BMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 8 a* ]" D$ v& q
| MCASP_TX_CLKFAIL
2 N! B: g' {" E" e3 D* w: ]+ Y' \| MCASP_TX_SYNCERROR
4 u! J9 n# E8 _8 d| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 2 f' Y6 z* G) g4 [2 v
| MCASP_RX_CLKFAIL8 h  V) c2 A' x8 S! f
| MCASP_RX_SYNCERROR ' }8 K9 C4 Q8 @$ o" J
| MCASP_RX_OVERRUN);, w; _6 z' r$ c, `% M' ^% q) {" r
}
static void I2SDataTxRxActivate(void)
4 g$ g' G4 B2 L6 A0 q5 Y5 M{
) i/ B& L6 n. a6 j; A& x7 z6 i) E, p3 p/* Start the clocks */
3 i' Q# B( W4 y- r  M( D1 \McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);! ^7 C2 Q0 }- J( y! j9 L8 l
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */, D5 N% Y; ~; S- \- T% ~
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,( {; k  U* N! F9 S  V; E4 z
EDMA3_TRIG_MODE_EVENT);
$ V9 @7 t) ?0 @$ q! X/ i. I- H5 nEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
; H7 U' s( l9 mEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
# T9 T% X5 \& H. ^( F# NMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);  w5 t- K" `1 i6 k3 g3 P. E
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
8 O: M$ Q* X8 owhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */  b3 s0 d8 B$ D% y8 `+ x7 O
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
' O( @  O% J$ G$ L" j2 [2 K0 hMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);9 B4 l/ ]( ?8 f( A2 l3 U% |
}
. H! |# h% Q3 R
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
8 C! g0 x8 y3 H0 }. ]! f* f8 q1 l





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