嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,$ @: z1 {/ r! P8 _) Y
input mcasp_ahclkx,
! i7 }4 l8 O- C! P. @input mcasp_aclkx,
7 _7 Y! |0 v3 C8 H) h& Jinput axr0,
  t1 W* r; F7 ^
1 a, e( D5 j- e7 L$ {7 N6 Joutput mcasp_afsr,) l' K9 Z! ?+ l8 e
output mcasp_ahclkr," N# ?5 N' \' i% M
output mcasp_aclkr,
4 i1 d, ^/ J; m+ Houtput axr1,) }  N* o. _! W$ H' ~/ z
assign mcasp_afsr = mcasp_afsx;1 z6 B  p  C! y4 ^+ f( j8 C1 n
assign mcasp_aclkr = mcasp_aclkx;3 i9 w/ g, Y( P4 b6 p0 z% n. r
assign mcasp_ahclkr = mcasp_ahclkx;! H4 b( Z, B8 p
assign axr1 = axr0;
5 I/ p  a6 o2 h9 I
' ^  @1 U! r' E/ Z8 s5 p# a
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
) B( y0 p! S7 Q: j" y
static void McASPI2SConfigure(void)
/ w1 A( a. E: h0 O. S9 x{0 |% z) w- p" r/ l; z: }0 m
McASPRxReset(SOC_MCASP_0_CTRL_REGS);; v0 B3 e) P, M
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
6 }% S  }8 d# D: f) e: jMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);) v0 k5 N9 }; P  B1 k9 R# L
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */! B9 F8 Y7 J, G, {) l( ^+ T+ u
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,) X, Y+ C- z8 ^
MCASP_RX_MODE_DMA);/ v  E% A5 x, `0 h  ?$ N
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,3 r) F% m4 k3 _* g
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */- @/ T; Q2 A! O8 X' s
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 0 H3 q% ?. d9 p0 I3 a$ M5 p. l6 T( P
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);9 i: }4 b4 M( W4 W; @) D' f
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
- F( b: n* u! t4 Q& c9 r  lMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
1 c2 c, ^7 d. I6 CMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);" U2 ~$ Q- z/ |$ Y. ]5 Z8 U
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
1 L5 I. |. R  d  @4 o; sMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
8 `) _) r% K3 y( }/ f0 _/ M/ O0x00, 0xFF);
/* configure the clock for transmitter */
1 m8 g. K7 t2 i& Z, W: W+ |McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
$ \/ r. \, w, C: _" d, wMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
* m3 w5 k6 e' x( T: z7 C/ vMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,6 P& U* y2 \/ X! D; a
0x00, 0xFF);
4 R! K" ~* E* {2 _4 J" q$ r" Q4 R8 @8 w0 U! y5 b9 W% u7 ]
/* Enable synchronization of RX and TX sections */ & \2 |4 ^8 J: N$ R
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
0 E* u( c  a3 f1 ?8 u# {9 XMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);$ d* M5 T! @' H# E3 [* s
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
7 y5 g1 I* ]# [- j' P( m  O** Set the serializers, Currently only one serializer is set as
3 S, a# e5 q$ {$ \/ W: s* w** transmitter and one serializer as receiver.
7 e* A& D4 @( |: v*/
  r# \% F" G6 TMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);& I5 i3 K7 _+ {6 J6 K
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*0 a' d9 |* U3 h, P  C& R8 G' A
** Configure the McASP pins " p  m  A) B5 r" Y4 ^3 u
** Input - Frame Sync, Clock and Serializer Rx9 x5 }. v. B$ @! V
** Output - Serializer Tx is connected to the input of the codec / a& t5 U0 i( }; z2 X9 V. o& ?0 v
*/6 @6 o, b3 c, c; S! W9 |  b
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
% X' n% s* D* r( O' _7 V+ V% D% UMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));  p( X2 `3 i/ B+ f: T3 H7 x
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
: Y8 R/ ?- v% B! m' U0 M| MCASP_PIN_ACLKX
0 F+ R- O: T4 C1 E- D| MCASP_PIN_AHCLKX4 m6 A6 s* n' s1 o% A2 ]
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
1 U1 k2 ^2 w$ {McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR / k& J6 Y& [- ^* C7 ?2 G
| MCASP_TX_CLKFAIL
' Z# E( v% L  a+ M| MCASP_TX_SYNCERROR
+ H( h) K* S7 R% E! `2 n| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
0 W$ \6 m( Z8 M2 q' N8 l: E| MCASP_RX_CLKFAIL
- f) `- z, e, h( i5 U# T| MCASP_RX_SYNCERROR
! s, o$ I9 ~, B+ d- ]' }) p| MCASP_RX_OVERRUN);
& D% u9 s* P4 ^+ P( C3 \2 n7 e9 ^}
static void I2SDataTxRxActivate(void)
! `% q- p+ Y$ p$ t' z{! Z( ~. W' B: N- k/ k9 u/ J
/* Start the clocks */
' |6 O* G1 E5 G+ oMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);: I3 H% S+ A: ~1 y5 G+ r% n, w
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
% N8 c' G! J1 d0 _( lEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
! F3 H3 G- \* ?# E2 IEDMA3_TRIG_MODE_EVENT);
) ~6 r8 F/ k! i1 `0 D) @EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ) d% [% _: U4 R* c# ?
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */4 X% F! L6 f$ {
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);& F3 j; T& k3 d' [( \. D
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */7 q* C) z3 c# @; g; v
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
1 c+ r1 s- o& ^  L/ p/ O5 t1 }- dMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);$ P# G+ s5 [2 R0 v
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);  ^) _& L9 c+ |! L
}
7 m6 S. W" ]! a0 e! c& X
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
! r5 ]5 l/ e. v- ^1 n





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