嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,) ?( L; ~1 V( H- W! v
input mcasp_ahclkx,
( v  I! @6 h6 q, J  W6 c8 A' Y, Jinput mcasp_aclkx,1 q! c0 Q6 k* Q, x0 V' _! H' }
input axr0,! U, @/ U1 Q5 r0 {
' i; t( _( ^' B! u% U1 |' L
output mcasp_afsr,
- G. O7 s8 Z9 h  Zoutput mcasp_ahclkr,
" u4 \2 [# w& G! a7 w, m5 U+ Foutput mcasp_aclkr,
9 L- ~9 c0 @+ ~5 J* Goutput axr1,
; @) C0 m5 m9 N  ~
assign mcasp_afsr = mcasp_afsx;
( }6 S3 u/ P2 V5 \assign mcasp_aclkr = mcasp_aclkx;
4 ~  M$ S. s2 \$ O& eassign mcasp_ahclkr = mcasp_ahclkx;; Z! p9 |8 z" ^4 F; ?
assign axr1 = axr0;

( J' k( ^# g& `, S  V( v0 n+ ?) r$ [/ {, T7 L
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
( P0 |' I* [- a
static void McASPI2SConfigure(void)1 D& |7 e, {9 t. V- X- D
{
( u% O7 g6 k+ `McASPRxReset(SOC_MCASP_0_CTRL_REGS);" q2 s' C* N* e& O+ k# X
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
* [( ?( t9 S$ y$ GMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);4 c" n9 ^/ K6 n" l1 d
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */7 a! W$ o9 |$ R8 B7 V- U- w
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,. R# T6 R3 H; P. }  L* U
MCASP_RX_MODE_DMA);
( r8 n3 f5 R- F9 o7 OMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,* S- Q0 f: y5 q( T3 m
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */! d; w0 f8 o7 @- J$ s6 _  z  u
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
( F' Y8 x  G6 W7 w6 RMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
2 t: _( J, l9 S" O9 S; F& F+ RMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, $ V# a, w( \; W8 d, P; l
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */8 Z2 g% Y6 I3 w+ _
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);0 e% O/ o' b2 ?3 z
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); $ z. Q1 \5 n6 Z) W8 `1 D, l
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,! I% x) i1 O8 H. K2 q9 T, ]) U9 i
0x00, 0xFF);
/* configure the clock for transmitter */
2 {4 s3 X' a- \McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
$ k$ b4 {8 ]1 X( A+ ^McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
2 l; N1 Y, r% WMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,( |$ o% }2 _) z( n! q( }3 z
0x00, 0xFF);# ~7 G" t/ Q  h
8 J- z% e$ @; J3 X8 G; @
/* Enable synchronization of RX and TX sections */ 5 {( ?; T$ @) a5 i
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */5 }: o# g/ z4 z( [( `# n2 v
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);/ U- D" j% H7 g5 y1 w3 s
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
( o: l) a# K2 l7 X** Set the serializers, Currently only one serializer is set as
1 A4 G# u  R9 _** transmitter and one serializer as receiver.
3 l0 \- B9 t$ u+ g8 s  [  x7 q*/  [! D: p2 n$ L, G# d/ r$ f
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
5 }4 Q$ R- T. a& ]4 x3 Q- _& LMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*: E' B" y: y; N/ {
** Configure the McASP pins 4 Y; U4 j  N/ r: r' U& d
** Input - Frame Sync, Clock and Serializer Rx
! w2 c0 Y4 [  P1 s: B, ]& Z** Output - Serializer Tx is connected to the input of the codec
  a& C2 L' i& ]% r5 c5 r5 I*/! z5 e6 w2 L/ K1 w
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);. R5 D) q+ U5 D
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));, N/ ?5 O+ I! y+ M2 y1 ?/ @
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
) b$ U, [' l, q) R| MCASP_PIN_ACLKX
% B' Z/ B; k4 [0 A* a0 L| MCASP_PIN_AHCLKX
) \% O- l& `8 j  T. H8 {  b1 d) @; C| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
& m, f; ~) n$ L; |8 v* U1 d4 }McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
0 s7 T! J- J6 z: C| MCASP_TX_CLKFAIL
2 |& m' B! v0 _8 z2 T| MCASP_TX_SYNCERROR
8 e- H( }1 \; Q: h( b: l% I| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 3 T0 X1 }# H  ~' P
| MCASP_RX_CLKFAIL
" u1 y% L' m; H  _| MCASP_RX_SYNCERROR
/ U5 N( p' G) o! q/ Q| MCASP_RX_OVERRUN);
# F" f3 o# ?6 W  s  }! ^! J+ D1 f}
static void I2SDataTxRxActivate(void)
( S% W. C. }* \# a9 k; ~/ `{
& l) T) S& G. q, ~/ _% V/* Start the clocks */4 D- r( @1 a/ k, S0 v, U$ _
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
8 k6 @# V0 W1 y& {5 O' F3 h! ]3 sMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
% W/ H2 o$ g! i" ?+ TEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,3 ]# L8 }8 l" d& [: i: c" m" a9 N+ _
EDMA3_TRIG_MODE_EVENT);
% M6 [& O; v2 h2 v- H/ X6 a( a6 t5 YEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
' g. J7 e/ l8 x+ ]/ B- j" J5 _EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */% R" z# K  a9 _5 I0 `# m  W. }8 X
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
9 d2 S( Q, k+ Z& ]' G0 w6 [0 vMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */2 ^: L' c+ q6 h1 B! O( s
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */% ^4 U  ]2 f6 X2 ~
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
. z' y( ^" h4 ^; e0 cMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
; W, w/ l! C! Y8 g( w}

# c+ W4 R4 Q: H/ n6 x
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
; {. d# K) ]: D5 i" f/ S





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