嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,. {2 }  z( T6 \1 x3 n
input mcasp_ahclkx,
9 b9 x: ]. s2 E. g2 ~; N0 }input mcasp_aclkx,, }! y& b& J1 E! j8 ]: P
input axr0,
- e  H" _' G1 Q* E8 U+ P& u
7 U* O- h, T) {output mcasp_afsr,
/ J8 M% B& b  r) |9 ?8 Routput mcasp_ahclkr,
$ H- Z8 E" D8 H$ e+ a/ Koutput mcasp_aclkr,% ]" l% B/ |& K8 P7 M' v
output axr1,; I' s1 }1 z- c/ j
assign mcasp_afsr = mcasp_afsx;
& g+ H% t2 V: [" t/ dassign mcasp_aclkr = mcasp_aclkx;% p  x5 `% e' o9 k, K  k
assign mcasp_ahclkr = mcasp_ahclkx;
. n5 t, z' X' o+ Oassign axr1 = axr0;
& Z6 {: ~5 E7 d
1 Y; M$ W. p$ K4 j. U+ i+ y2 }8 A
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
; x3 p$ U7 T/ z0 w" j
static void McASPI2SConfigure(void)  u" z0 n. {5 K
{  \# g# @7 j/ ~; _8 T; J
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
2 w# Q: G5 a/ l+ a8 LMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */! d$ E/ r- Z9 X! e/ e4 A+ s* J
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);9 H' p; [3 ~8 R7 y: g- t
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */0 E7 b2 U8 G0 ^- c  }  c
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,9 @+ t: Q$ t3 N2 `! F9 F, e
MCASP_RX_MODE_DMA);
2 M) M1 i+ t1 y( s2 {- A4 MMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,7 @! v$ x" {1 a& q+ z
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */! V8 A0 ]; h& W8 M! Z
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, . W1 H$ e7 P9 O* E8 N
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
* }& g9 Y- y6 g: a% z4 f2 AMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
( a$ b# c* u( QMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */( p2 \3 r; U. t, i' i/ k2 h
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
" j- A. [. y; z% fMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); / ^' B  h1 p# Q) c( {
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
; s5 J7 n2 s7 V" t- Z8 `0x00, 0xFF);
/* configure the clock for transmitter */
; G8 S5 @4 ^$ I+ F  M) i2 b3 IMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);+ x: u, b0 L! R0 D
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
6 q2 {; k% @/ x& p4 zMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,+ t% P6 \9 J/ C: p) T5 a- Q
0x00, 0xFF);! k$ ?6 p, n$ U9 }3 U

/ O& l: h1 o' `% E2 ^/* Enable synchronization of RX and TX sections */ , l8 \0 V1 i2 ^. F  w
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */! B0 Q* m" F" A% E1 P7 ^* C
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);: P1 A7 D$ K5 q# u1 i7 ^6 Q5 f5 P! J
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*# G! T1 C, B4 [3 H6 P( Q. E
** Set the serializers, Currently only one serializer is set as/ p3 t. t& H, m
** transmitter and one serializer as receiver.; {) [- w) g1 _
*/! o$ s, @+ Z: _" w7 \8 t
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);6 s7 D6 w$ [# _+ N6 x3 x
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*6 _) p, Y" {, l  ?, A( |! f, b
** Configure the McASP pins
$ N5 r# g; V9 b7 B** Input - Frame Sync, Clock and Serializer Rx1 `) I1 G7 ^, k  l$ e
** Output - Serializer Tx is connected to the input of the codec
  O; U, g  z1 E*/7 ]& z( s+ ~1 p$ C1 s+ q
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);3 t8 U+ b" ^- D
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
$ D8 }5 X- s- H# U1 }McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
* N4 B) ]+ u; k4 d| MCASP_PIN_ACLKX8 P. F, J( t% O* H
| MCASP_PIN_AHCLKX
2 `/ a7 D& G  Z6 X; w  i; L| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
" M: }, N( E$ ^. l) L1 x! ]McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ) U5 t! H3 b4 q* Q, y
| MCASP_TX_CLKFAIL ; b9 `7 ~7 ~' G
| MCASP_TX_SYNCERROR& J  A/ [) @- C  @9 ?7 O
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
+ l* Z( e: v4 y+ J! M- V) k| MCASP_RX_CLKFAIL
  W2 Q, I( m' u| MCASP_RX_SYNCERROR
# H- v6 ?4 K: T| MCASP_RX_OVERRUN);4 M$ q$ ~$ b% t; k9 F
}
static void I2SDataTxRxActivate(void)
, w' y2 y( m# \! K- U{$ }; H* K+ T3 H  x  T" c& B6 S
/* Start the clocks */
* e5 T( n0 w, c) fMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
- v7 A6 s% u( l! bMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
- _' u8 `/ s$ U9 J# kEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
, d! w7 M; `: v2 _2 J5 v  d5 x: iEDMA3_TRIG_MODE_EVENT);- R8 k/ r5 x9 _1 v
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
0 H! U& m, p, c) K2 IEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
0 A7 o+ r- U7 c$ YMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
9 w$ }/ f1 n3 p8 u% lMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
" O0 U! C! k8 V- D- |$ g1 Hwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
1 W+ |, V8 D3 \6 B2 B; r9 f5 z- J  WMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);, `( [- P* v/ Y5 P: [/ l! J
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);" D5 I* H5 H, i
}
8 V/ c6 j7 E3 |. O& L1 [
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

# v8 ?9 O6 O* d




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