嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
. H2 Y1 t; G  q! n4 |4 t; H$ ~input mcasp_ahclkx,* F: D/ R) x+ D+ v( `1 B/ ~
input mcasp_aclkx,
$ W5 n$ K- U/ j- D. D! W" \6 ninput axr0,
8 Y) C3 X- e) y4 L
  |6 f# X0 I/ I. K( |$ Koutput mcasp_afsr,
0 p4 N# p6 B0 O7 M% M9 \) N$ Qoutput mcasp_ahclkr,  {) m; `( o2 M
output mcasp_aclkr," z4 X! O$ f2 L0 F
output axr1,
! S* E2 E+ @6 f, B" M2 \
assign mcasp_afsr = mcasp_afsx;$ r7 P# C  @8 f( M+ U1 }# |: g* w  i
assign mcasp_aclkr = mcasp_aclkx;
( ~% a9 ]0 u3 k6 Jassign mcasp_ahclkr = mcasp_ahclkx;
! f# j, t' g( E5 d; uassign axr1 = axr0;
+ r3 K% S% j' a7 Q' H

- P+ }  }2 I6 q
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
# ?5 E; s+ J1 R
static void McASPI2SConfigure(void)6 C+ s- f8 Q7 P5 e# L# c/ K
{' s* W0 V/ A! Y+ j2 i
McASPRxReset(SOC_MCASP_0_CTRL_REGS);$ l2 t1 K! m: d0 T8 x4 Q) W( n* m
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
8 w0 h" @1 [6 i4 i! A2 BMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
) t! Y3 L+ t8 V& J* j  ]McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
6 H, l9 K  J# \7 q/ ~McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,- T8 @/ A& P% A
MCASP_RX_MODE_DMA);/ B& e7 m$ W, a0 X; ]/ I0 m$ |: S5 E6 t
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,% L1 Z  `0 ^7 M6 z$ p
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */# B. k# a5 H$ U& B$ O9 f
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ! c" {, J$ u1 p+ o
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);4 l# ^1 I: y9 M' D$ f
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 1 e& A6 i0 s' {$ e6 }
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
! i7 t5 A  V) E+ _+ H; p* vMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
8 T) W/ R( D7 l9 AMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
0 Y# _" }7 A% p9 q5 d7 I' t; f* X. WMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,& x& g. ?6 n; i1 ^# Q
0x00, 0xFF);
/* configure the clock for transmitter */7 N5 e1 V4 z+ S5 X. X
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);( x- I& b6 y+ y- S5 w
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
! q; ~) {& x) B& a  t) t0 Z7 D; nMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
' s2 y7 d0 e, r7 E; j1 k  l- ]0x00, 0xFF);
/ X* Z) ?  j$ s, f% |7 ]
. x# V! K# O$ |4 D8 ?" u# K/* Enable synchronization of RX and TX sections */
1 t/ S$ c& P; E9 p) OMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */6 U: r! O: ^+ |& F  B
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
' e* @+ [: b+ N( c0 h  w+ yMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
: \7 [/ I1 `- d* y' |** Set the serializers, Currently only one serializer is set as1 H) _* r  }) Y0 w, q/ Q% a) e
** transmitter and one serializer as receiver.
: p/ M5 W0 B7 |) s*/
: |$ |- o' x: G" y' [* y' tMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);: b2 K. Q# e4 w" Y" c2 T
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*4 {& ]! K( c& ]& n5 W
** Configure the McASP pins * x; r' T$ s/ o4 F' L7 b, o5 j1 X
** Input - Frame Sync, Clock and Serializer Rx! U6 R' ~) H) S  F  h
** Output - Serializer Tx is connected to the input of the codec : a6 M- Z; C2 G; U, f9 Y- p9 |
*/
1 V9 J7 ~- x3 D3 z. N& G  xMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);& W# f9 s0 ~# y# }, P  @( K  G8 ^% b
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));7 g. ~) x" K) Y4 V. a/ X2 m! P
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
  q( T" z4 j# U7 ]6 W: A# ?| MCASP_PIN_ACLKX9 p7 a4 O1 w/ g
| MCASP_PIN_AHCLKX
" l' F/ c) r/ J  Q3 n& \5 F) F| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
+ q' G: Z& S! y( C6 P5 iMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 3 u( i) d+ _1 r+ S- |  m
| MCASP_TX_CLKFAIL
5 U; F9 W6 q& }) V| MCASP_TX_SYNCERROR
1 g& q1 ?: y, j; b9 V| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
" @7 E/ k; j2 D/ p| MCASP_RX_CLKFAIL( N; L, I# J7 u; T0 v, r
| MCASP_RX_SYNCERROR
! W9 `) L8 ~) H! d1 F| MCASP_RX_OVERRUN);$ r0 X1 d4 [6 h2 _2 V
}
static void I2SDataTxRxActivate(void)
4 \( H8 @, O0 {+ |  J2 K& O6 M{$ m, B3 v% j9 `- }! {& a
/* Start the clocks */
! i% {. t$ d8 F3 t0 k* M7 X6 [McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
! ]/ J4 Y, c$ J4 J1 H- o" mMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
1 E4 j4 H9 `3 t; MEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
) \& `3 Z& U% uEDMA3_TRIG_MODE_EVENT);
( L8 L8 x( t6 S* R' WEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
0 K0 t" W4 V: }8 FEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
0 m* a+ Z0 {  j& T3 ~9 BMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);1 n; K6 ^0 ^4 t  t1 U" W  c
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */( s  k2 W! x( Z9 a3 `5 B( M
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */7 [4 v$ F( A' \3 q# E% P' r6 v
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);$ a0 b1 i: q5 q3 D/ l5 A( i; e
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
: O! x7 ]: w' L' S- a* b}
/ q* l% f* D0 j9 P- t" J* H! A/ b& l
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

+ ^, y- ?# j: `2 R$ B




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