嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,( o5 C- C( P( t$ M, V
input mcasp_ahclkx,, I: N3 r" o+ L4 v( s4 g# S4 r9 m0 m
input mcasp_aclkx,
) S9 z, U: p8 J7 ~input axr0,
2 q: `- E+ F% S9 a9 h; ]- v& q9 u9 x; j' \1 f
output mcasp_afsr,$ _$ I* |* t+ D7 ]; K7 |
output mcasp_ahclkr,
( n6 X' c/ _8 F1 K% q/ eoutput mcasp_aclkr,
( w0 `& J+ \. K$ M! p4 D# xoutput axr1,/ V" O0 e+ o+ A. X9 Q# q
assign mcasp_afsr = mcasp_afsx;# ?+ K9 @% M4 |
assign mcasp_aclkr = mcasp_aclkx;
; s. _# |5 d6 A1 xassign mcasp_ahclkr = mcasp_ahclkx;' O2 }/ f( ?0 Z+ @; {6 E
assign axr1 = axr0;
# e  X+ ^% y  h7 L9 w

; R+ |: V9 ]. |; [' k8 ^" L* C
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

0 }) F; r' _4 [' r& P
static void McASPI2SConfigure(void)- q+ i7 D5 o) p& s& A% ~% G& T
{
6 ^$ B% V# P- uMcASPRxReset(SOC_MCASP_0_CTRL_REGS);8 {  Q9 @. C5 f- R% L! ^
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
& X7 p! \; N- v/ a" P7 @0 t# H. m, cMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);7 f* S( ]' r" S. f! }
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */8 i2 V  q5 U, x! H  g
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
  B4 Q) Q7 F% t, v) EMCASP_RX_MODE_DMA);; B  g3 ?" E/ ^" B3 L% [
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
  ]+ _* p5 }$ ^- F( aMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */- l8 Z. U2 z: B- U1 e
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, & w- v( X2 b2 j% I& F& `1 g2 K
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
" A5 I' p; m/ U2 K! u& s' gMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 1 q) C9 A+ Z: G/ z4 {2 p. T' Y
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */; C' i* g: I$ X' w9 ~0 w3 I/ E) R; {
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);2 A* s' s$ f0 W  Z" x- r- `
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
. ~' o0 ]5 ?$ \4 Z, b3 [% OMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,$ V4 ?5 d* }! r4 P$ M( P
0x00, 0xFF);
/* configure the clock for transmitter */
1 m+ k! ^$ I, G4 V0 E* h# ?McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
+ ~, I, l$ o: F' X% w- ]6 wMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
( U5 J4 u, n( i0 p) TMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,5 V/ a8 u  }4 L1 u6 L! e, @& T: y  t
0x00, 0xFF);, k( T8 C' |  B7 q  b
) k+ C: o4 z. R6 h, T! j0 y
/* Enable synchronization of RX and TX sections */ . P( ]- U: [5 ^) I
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
& ]0 `& ?: S- S1 X) fMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);- I% G" i/ l( l3 X; B3 Q9 W1 B- \. A6 |
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
* _$ |& m- g! k** Set the serializers, Currently only one serializer is set as8 b  W8 ~3 u2 @- G, u
** transmitter and one serializer as receiver.
6 [5 }# q- w- F. B/ P*/
! r/ D( w  s1 n( ~% yMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
% E2 B4 ]0 g$ a8 P; hMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
5 D. ~  B$ F% D, T** Configure the McASP pins 6 B# n0 X& x) {, Y- T1 C6 k
** Input - Frame Sync, Clock and Serializer Rx- ~1 C+ O1 F2 R* b9 ~
** Output - Serializer Tx is connected to the input of the codec # V5 P9 v3 Z9 Y+ ]( ]" h' ^
*/2 c: G* Q7 ?7 r! T) m
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
! S2 ^4 Z& X( {8 m3 M1 w/ M+ `( ?McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
0 |  c! o$ K% {2 ]7 GMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
- V$ K5 H" x9 q( v. ]& m7 `| MCASP_PIN_ACLKX8 P6 e9 n4 R& b9 F# e
| MCASP_PIN_AHCLKX
. ?4 z8 A+ L/ g$ E7 ]" M) L( t| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */  @' A: G% L: Z4 u; e* X7 |, c
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
; l/ H7 D+ Y8 G5 Z6 T0 u: u| MCASP_TX_CLKFAIL 2 i/ U. ^" M( `
| MCASP_TX_SYNCERROR; j# u1 {6 a- _; C  y7 f
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
  S; K( L4 b9 |& C6 J* [* W| MCASP_RX_CLKFAIL
8 q8 D( f; Y6 ?( `| MCASP_RX_SYNCERROR : a5 Z5 l: I0 `& {9 {7 ]
| MCASP_RX_OVERRUN);5 t( X; y0 T3 w
}
static void I2SDataTxRxActivate(void)( M+ `" z* L% }8 n
{
, ]8 |0 Y: ?7 H/* Start the clocks *// D3 L4 K( O4 G, I1 b' P
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);1 w4 e& W  i7 R0 ~$ r
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer *// K4 F% n8 X; c; a
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,$ H9 }2 Q' K! c) R# @: k. R; v  d
EDMA3_TRIG_MODE_EVENT);
9 D/ p2 Y0 v2 D( [* lEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
' E' T2 W- h: J1 ?EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
$ ]6 X  k3 m: }0 K% Q$ r. i9 hMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);7 D; Z- A7 r3 e: @
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
6 ^* f  Y* A( @+ t% ^3 twhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
9 S8 X( \! b! ?- H" GMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);0 A5 ^" E, ^' B4 e7 A
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);- I5 t# d  u0 r  D8 Z) _% X' F
}
) N3 c$ ?( k" a' W5 d3 O+ e6 c
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
2 |. t3 g7 {+ U





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