嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,2 t* H, M; V; S' c/ ~8 {0 t" S1 P
input mcasp_ahclkx,
& G: x& ~( E( D) l6 C9 w5 u( U2 Minput mcasp_aclkx,
2 |4 o% i/ g( R  |input axr0,( R7 q  k6 C4 S  M6 b! ?+ Q

3 D' H* J# }, t- J2 k4 youtput mcasp_afsr,
9 ^% z1 F. {9 m- j: ooutput mcasp_ahclkr,
4 o/ b! q. E, q" s7 |+ o8 aoutput mcasp_aclkr,
/ E: _5 d" P8 h" y" [( z4 O! Z( Toutput axr1,
1 r5 M- ?; @) E* L6 v3 m$ j* G
assign mcasp_afsr = mcasp_afsx;
! U, `; B, Z: |) x" qassign mcasp_aclkr = mcasp_aclkx;# B9 Q' y+ p' M
assign mcasp_ahclkr = mcasp_ahclkx;
8 K: x0 B' L2 ], a4 R* H& g4 yassign axr1 = axr0;

& h8 j" T: _1 [3 e& Z* l# P  z, o3 B+ {
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

' J# T" a9 d# a$ w
static void McASPI2SConfigure(void)
, Y$ }$ M% q8 u5 D{
6 e$ @3 ]- H" L1 ]McASPRxReset(SOC_MCASP_0_CTRL_REGS);) a& k" G# @; {1 E8 @
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */1 {% F" F3 G# g7 W
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
6 D8 q2 c) X1 {# f9 N3 m6 IMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
; ^! ^1 o: V3 A5 O" JMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,) n" p- H5 @$ d1 Z& h
MCASP_RX_MODE_DMA);
3 L, H. \. L* \4 m. g7 UMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE," u' L0 K! F/ {7 f+ `
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
2 J7 V, @) @, @. \- X& {5 c; [McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
1 C$ t8 G& O; J7 c. H& dMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);" L2 o8 ?+ T' y3 H& k
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 8 [1 [( s# h0 N, m3 s
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
4 Y' l! m, F6 H! X- a* X8 ^6 OMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
4 F: R" E! o' V. QMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
2 F1 Y4 F+ {8 h9 |2 A1 ~7 gMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,; M9 F) e8 U) a# |/ f
0x00, 0xFF);
/* configure the clock for transmitter */3 s8 V6 p% n4 q! U
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
. M, Z# A$ w' A  t: Z$ f2 z. BMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
8 V/ t! V5 Z. Q: B2 u7 MMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
5 L: ?7 H! A( u% i$ w3 r. D" y# n0x00, 0xFF);2 {  I; C" h& ^) H' H$ W- k

" S: d2 T0 `& x& Z' T- q/ }# n/* Enable synchronization of RX and TX sections */
4 [* C/ ?2 H6 @5 v2 \$ M* }3 gMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
4 m( q2 x; s! e0 lMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
! y/ C; L2 h8 iMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
" y2 P& i! C( ?5 K. C** Set the serializers, Currently only one serializer is set as& J( R$ p- Q9 O* I
** transmitter and one serializer as receiver.  j: `1 ?# y/ C( ]3 V- i5 c- X
*/+ f9 D  X; j6 X; {1 h' w- D5 `
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
5 i* }2 X9 n. SMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*+ s& {4 z5 X9 X3 M2 C
** Configure the McASP pins
& X8 u& H$ I# @; I" j** Input - Frame Sync, Clock and Serializer Rx
9 B+ d4 ]; e9 {1 ]** Output - Serializer Tx is connected to the input of the codec 6 M$ V- j) o8 i
*/- F0 N$ N* ?) D4 j9 ~% X
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);! y4 ]+ G- N, i( D5 X( x0 z
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
: Q2 ?( `. }" Q) ?, H2 t) P6 w" `0 i0 |McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX4 j  C9 Y+ n0 ~2 Z; S$ }( N8 M
| MCASP_PIN_ACLKX- d0 w7 @  ]3 l4 \1 r2 X) p
| MCASP_PIN_AHCLKX5 ]: i- S# X9 X. \- |  [# p3 Z0 E
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */4 g' a, y# _8 d  \9 Z9 n6 [
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
0 a7 T  M. s- [( k0 F) H% X: ~| MCASP_TX_CLKFAIL
$ G, Q$ C- t9 B; B2 w1 R* I| MCASP_TX_SYNCERROR
/ B! o7 r. e% p3 E4 I% `4 [& b0 T9 x| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
8 M6 h1 @: o2 e+ j3 T0 U, ?| MCASP_RX_CLKFAIL
# g- r1 @( a4 H6 L| MCASP_RX_SYNCERROR
# V4 k. p  r( \. ?6 S1 A2 J| MCASP_RX_OVERRUN);5 d# i  i& h7 @- e' F
}
static void I2SDataTxRxActivate(void)- U5 `4 Z% W0 ]! y' D, a9 d
{
# f( q; E% ?! t% [/* Start the clocks */2 w, Y2 B9 `* m' {. V; r
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);; ], C! x$ |& K" Q, Q! V3 @) b
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */# w; n5 ~1 ^0 d
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
* Y9 _! }- G& R; U: z  ZEDMA3_TRIG_MODE_EVENT);
- q: f1 Q# f  B! U- P; p3 XEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, - {4 b1 S: g) J) P
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */3 y- Q( e3 R% \+ ]4 ]7 Y2 E
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);; B/ ~! g0 _, i' _/ h
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */6 S. K! }+ y0 n) Y9 E( H
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */4 d. j4 E- G8 j. C) Q  O1 |
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
; r( R* E3 S1 [" U- n% o. a. C5 IMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
5 z8 W2 X$ E, ^}
$ H# E. w2 e0 T+ s# _
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

- R1 Q( b; @( R2 q+ ^5 ]& M




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