嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
3 ]2 F7 H+ y$ Vinput mcasp_ahclkx,
" H4 o2 U  O6 q, m/ t) dinput mcasp_aclkx,
4 p* S9 V4 N4 d. G1 ~* n( R, minput axr0,
' a1 n  C& j( L4 Q
: Q+ r0 Z7 \0 B' z2 poutput mcasp_afsr,! K) M8 s+ w% H7 d: i" v
output mcasp_ahclkr,5 Q- y  ~+ k; k$ |
output mcasp_aclkr,
- z! V& I1 |( [0 goutput axr1,
1 V" R0 ?8 c2 c+ j* C' I  Z
assign mcasp_afsr = mcasp_afsx;! ^3 Q, S  j1 _8 l3 Q/ ^5 Q" W! V: B
assign mcasp_aclkr = mcasp_aclkx;
; S% ?( v/ f4 Zassign mcasp_ahclkr = mcasp_ahclkx;( H3 X9 X( A1 K( x/ i4 c
assign axr1 = axr0;

1 X; b1 c3 J. L$ S" i& P1 M
; M! g) a+ m7 x5 C0 k( x5 {
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
/ ^" J8 d. o% j1 U
static void McASPI2SConfigure(void)
0 v8 h8 _- `" Q0 e+ b8 m" y{
* a; k7 t) z9 w1 {! G, ^McASPRxReset(SOC_MCASP_0_CTRL_REGS);* D$ r1 L8 {, ^9 M2 h& P2 V5 Z/ |
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */* Q: `3 c* }0 [4 h$ `$ H$ f
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);) P* I( O* ]& i9 z) L4 w
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */$ Y" n8 p" E( [- N+ p8 @
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
1 i5 F: D+ c, k5 y) w0 c* k, \MCASP_RX_MODE_DMA);
9 w" @# e) L& L' Y( j. KMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
; S. T6 J+ k- eMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
  c" Y4 |; [4 E' w) Q. ^9 RMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ; L5 r# l  u1 a6 @, R. s; s$ O
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);/ o* q$ j. _0 E6 \' P; @3 `) p
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 3 C& m8 R) R7 G+ }) P( l( c& C
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
. `* n; a1 `3 A- k% c$ H6 x& RMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
/ A: M( z+ U! P; v: P$ `- ?McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ( e- e1 Z, z' |6 i5 J# y
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
, s8 z% k7 f3 E0x00, 0xFF);
/* configure the clock for transmitter */7 c$ a# e& g3 g% G
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
' ~) r, O6 z* I! b8 TMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 0 |5 h8 b8 W1 X4 d
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
7 D! }6 l6 m- H. h0x00, 0xFF);
, ]" f& j+ |+ Z# B( n. z) q+ ^4 }, {- C; c3 I6 g$ }8 b
/* Enable synchronization of RX and TX sections */
% a& ?! ?: W, A4 |McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */8 z' i1 o0 o& Y# l# F# l% @$ ~: H) I
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
2 U2 f! d# l/ oMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
; c  N! ]+ k2 J! }, s** Set the serializers, Currently only one serializer is set as# `( W6 b$ j3 Y( e* ?* E+ C, F
** transmitter and one serializer as receiver.
' G( [/ [% G7 q1 l3 e  j*/
! E8 _2 O1 z5 KMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
" I! _5 Q% i0 M. J4 L1 w0 F5 M) }4 y9 \McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
) y- V( V6 u2 D* a" L, C** Configure the McASP pins 6 q) K5 O* b; ]+ n) ^6 y
** Input - Frame Sync, Clock and Serializer Rx
/ S8 N0 ~' j7 b/ L# E6 R** Output - Serializer Tx is connected to the input of the codec $ v; ^& F6 f" u* t9 s
*/; A9 m& P( [9 S# `6 x4 c
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);9 d$ m3 O5 E, M& U
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
4 Q2 `# T% n; J( XMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX& J) i0 [8 d3 Z0 ~  N* }
| MCASP_PIN_ACLKX# d) @% p% V2 B, w& q- ]7 \- T
| MCASP_PIN_AHCLKX+ ?+ Y8 i; T+ d9 t9 |/ A( C
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
3 ?, g0 {" c: Z0 UMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
- y% w1 v, d6 H5 z+ I$ C| MCASP_TX_CLKFAIL ( X, m* T2 f4 z6 |: {  L
| MCASP_TX_SYNCERROR& i+ `2 Z$ f! R" C' |5 E$ j& b, H
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR % K' [  V4 M2 d
| MCASP_RX_CLKFAIL
8 z  Z9 P" R( u1 K| MCASP_RX_SYNCERROR 6 {. I1 ]/ @& x
| MCASP_RX_OVERRUN);
7 m- {4 ~! P2 b2 e}
static void I2SDataTxRxActivate(void)' G  W; V& `4 p* T
{
1 _* r- I9 r0 ~5 P% E. k9 w/* Start the clocks */
9 `' \; C# u! @3 o- b& e! _/ wMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);$ x( h; N4 y# ?2 q
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */, v; `$ a6 N; k4 A4 `$ u* a
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,: c4 N5 n/ Y* w: m( s
EDMA3_TRIG_MODE_EVENT);! c; Z0 Y4 M0 a
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
' s7 T5 e4 P) o. E* l, H2 tEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */0 R' b& \4 \& k' {
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
9 d5 }: H, }; c: s! C0 O& f8 V: ZMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */+ r8 N$ [  Z# w6 \
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
9 \5 y/ Y. b; @) ^! O0 GMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
: \3 J: d- e3 N( `& y% u" ?McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
: ~2 x7 M0 R& B3 `" u  D}
% m; g; u3 o, n2 N8 N
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
5 \+ `  i  R% {9 A) X+ O





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