嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
5 @2 ]& Q' s5 Qinput mcasp_ahclkx,
9 u  r/ h1 U' E: ?input mcasp_aclkx," a3 ~  h+ g: B3 M/ F7 X
input axr0,0 D* R0 J6 h( P; o4 }3 Z
& u$ Y, |: y" ?- t9 G/ _
output mcasp_afsr,) G2 x0 |* O: `9 I1 D* H0 d, E
output mcasp_ahclkr,! |6 O& d" T% }6 ^$ S: I
output mcasp_aclkr,+ c7 n+ u/ I# R# i
output axr1,0 Y* Y! O8 u' c$ I% H$ m1 \. o
assign mcasp_afsr = mcasp_afsx;
9 A1 \% Y5 C4 cassign mcasp_aclkr = mcasp_aclkx;4 q& z- W3 n$ H* ~
assign mcasp_ahclkr = mcasp_ahclkx;
8 \3 l- J7 x, \. d& L5 K+ eassign axr1 = axr0;

9 l6 l% w& O! {/ s( v
- N! [  G2 G8 X
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

  L( x; u! l+ V9 ~
static void McASPI2SConfigure(void)
0 _" z/ r) u3 Z{: y; @  `' i4 c" Y
McASPRxReset(SOC_MCASP_0_CTRL_REGS);% Q  ?& |6 d: j; U/ N) D
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
: {% Y. ^( @- R1 d) N" s, SMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);2 z" S$ S. X5 w9 k
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units *// t* V2 Z7 }* T) X2 e
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,+ U9 L; E1 n* g; \/ u$ W- p% j
MCASP_RX_MODE_DMA);
- K" ~8 ]- H  z3 VMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
' V) C! w! _2 a9 R5 CMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */$ G8 @# h) ^5 g+ T% e5 @
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
& f: a! U; r3 Z( B9 b- oMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
, r/ X4 p( C+ {8 e3 @McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, - z! i; t: v1 `. `- D6 g
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */, x+ U8 i) C" F) w
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
! X3 h; K6 t# O# |1 Z. E% i  Y2 r0 k; lMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 6 M3 _) L$ l6 a: W2 M1 q5 i
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,( U& ]1 U( b" o" N4 a+ D; S$ T
0x00, 0xFF);
/* configure the clock for transmitter */
5 D1 q0 {! r4 a* X, S$ \) AMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);6 _* I; Q: a# B4 C9 k( ~! l
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); . y6 o, N9 I$ v9 k# {3 }, y2 U% g
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,1 ^% D$ P+ T8 W" i
0x00, 0xFF);
$ [/ A7 g+ P/ t" |6 ~" I$ r8 u" N( Z, B. a% C
/* Enable synchronization of RX and TX sections */
. k# \' v& S3 b6 X( u5 I9 }# dMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */) j6 J- [8 b+ _9 P7 E1 [
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
! W2 |/ B2 v  q- c+ SMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*+ K3 c6 O% G" G4 b
** Set the serializers, Currently only one serializer is set as8 C3 T8 c# E1 O8 p2 K: x# s9 z
** transmitter and one serializer as receiver.: l" h: Z" M) M+ F$ {9 r5 b7 F
*/0 u; }9 c+ i$ H" r6 T
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);7 N5 `2 x1 N( F; x6 }3 D
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
( Q" s* c, K, W/ U% x. A+ ]0 [** Configure the McASP pins
) w1 M  p+ |: p9 e5 |** Input - Frame Sync, Clock and Serializer Rx
$ ]; N+ ^& b% x" n3 X** Output - Serializer Tx is connected to the input of the codec 2 x. `( I. X- {4 B" W2 F3 _
*/# b6 K% P9 @6 C9 N
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);9 S- O# M/ w& T/ r. `
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
0 d  ^6 n1 S; {! _- bMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX/ l/ T% x  j- g( [0 h4 |; r
| MCASP_PIN_ACLKX. g$ ^6 x- Z% p
| MCASP_PIN_AHCLKX- S+ D0 U) \: f* S9 b& l
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */. [9 m. s% h. U8 A
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 6 I" a# ]7 w3 k
| MCASP_TX_CLKFAIL   n1 @3 B  B1 W5 v* e( z
| MCASP_TX_SYNCERROR7 b  i- e6 t% {& e: E
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR # R$ ?9 q5 K" y& w# p8 s
| MCASP_RX_CLKFAIL
( W) N" V$ h5 _7 G6 _8 @| MCASP_RX_SYNCERROR ( J6 l1 `$ M$ V! g3 V
| MCASP_RX_OVERRUN);
+ ]( z% z  S4 J8 S) ~* c}
static void I2SDataTxRxActivate(void)
) H! T$ q9 \. z7 K& a- ]; `; j: _{- p  f7 F7 G% T- m8 @2 {
/* Start the clocks */) @- H* q1 x  p& A. L) Z
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
5 }' X  K$ m6 c. SMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
3 U9 h" c+ V+ I$ g9 k7 REDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,* Q% d9 ^6 V* E8 }+ P8 t3 v  B
EDMA3_TRIG_MODE_EVENT);
. M1 _! V) K& G$ M! d1 i6 tEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
4 P+ K6 L6 J1 J8 N5 nEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */: s) b9 i" C8 Q+ H
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
& r& T( U% B- V, q, o9 tMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
; ]" n# g4 e8 N) n% [$ y; ^% C/ m/ Lwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */' P# a9 v" h. w* {' f2 [
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);0 f5 I8 U1 t# m8 |. Z
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
; A# N2 i4 _5 t" M}
6 q3 r! ~9 Z5 _* \# Z
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
0 v2 a2 ~: k0 l) ?1 C





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