嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
. z3 R8 M' g+ A& `. W" Y! Q4 Oinput mcasp_ahclkx,' M7 z9 I5 A- g# [' M
input mcasp_aclkx,7 o, T; B# n; @# ?
input axr0,
) L  ^: v6 l4 v* H, g  q# L& [5 M% {) B1 x$ N
output mcasp_afsr,
8 q7 S9 w# n9 e$ ioutput mcasp_ahclkr,
4 }( I# p- B7 V8 Loutput mcasp_aclkr,) K# s& V* }* u! o1 d! x
output axr1,
. }0 F& l' A$ A
assign mcasp_afsr = mcasp_afsx;; n* P# L! N3 j8 p9 z3 d
assign mcasp_aclkr = mcasp_aclkx;5 W. G; A1 `, f4 J5 I4 h( @
assign mcasp_ahclkr = mcasp_ahclkx;
/ F1 h- q+ [1 d/ Sassign axr1 = axr0;

7 J" @$ e+ @8 O- T: G
+ W- w5 @2 s9 t  e. G, b
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
+ G( t7 Y# ~9 ~0 x
static void McASPI2SConfigure(void)
: p+ a9 m' }* z9 o; H{
0 s' R' V& d/ u: p% U# lMcASPRxReset(SOC_MCASP_0_CTRL_REGS);  J  C- M0 P3 K: p; m
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */' L9 U7 z# n8 T
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
; {6 e- z! F0 G+ q& zMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */8 g; X9 \4 n+ N5 M
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,6 k2 a. ?& _" a' [/ A
MCASP_RX_MODE_DMA);; h1 a% X! J$ [9 p/ s' x
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,0 _/ A/ y! L: E: i1 B
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
0 e1 O  W& v2 J7 CMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
3 ?8 Y( ]! ~, i) G7 N9 t2 Q" EMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
; ~1 d/ g, w$ D) \: kMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ; {3 f0 u9 R8 o. i/ w
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
6 g  _+ V  j) v5 cMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);8 C6 T1 K2 x% t1 k" {9 l0 Y
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); " z0 n# S" P& T" e/ K. R
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
) W$ k: q) \9 E( a1 b% H: J: X0x00, 0xFF);
/* configure the clock for transmitter */
# P% V  o( `. aMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
9 H: A- H* ^; O  L- mMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
- j9 W# |- h5 f. b: I7 QMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
# }0 P8 g9 c! e% y; V) ]* C- L0x00, 0xFF);8 l# B5 E: O; P9 t& v: N5 }

0 t, V4 P# e- e% F# e' [9 `/* Enable synchronization of RX and TX sections */ % S- W; M: g0 E2 {% y, i
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
9 Y( f% D' Z& o; e! A6 o- }McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
+ M  l; U" ]( b1 }: OMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
* b; [7 S" Y1 Y7 ]3 U** Set the serializers, Currently only one serializer is set as) J  a1 v: n0 Y) k+ G! n2 ^9 q
** transmitter and one serializer as receiver.8 x* Z, ?5 |; W! Z$ G4 [8 |- I
*/- K6 R/ p& v, v, M( l3 G
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);3 T+ D1 h" M4 I1 U
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
' r- k* W3 B, l' p* V8 ~8 ~  l9 R** Configure the McASP pins - x( A$ \* B7 Q' i4 w# f) g
** Input - Frame Sync, Clock and Serializer Rx3 L* B& z$ |" y
** Output - Serializer Tx is connected to the input of the codec ! n5 W! u( `- Z+ t
*/
  U3 n" k: A2 w- x0 {. mMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);% N: v9 n) @6 r- x( H: }4 ?
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));+ y/ e6 r5 p# D; p
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
1 Z9 L9 T$ p4 ^! ^1 ]; s0 ]& l| MCASP_PIN_ACLKX
! z+ R& Y$ X2 F- P| MCASP_PIN_AHCLKX: j* c  R2 A7 g! {& |) G+ I  G
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
# K! y: u' O3 w! L) }McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
2 b& \1 i* V9 P$ \/ p3 f4 @, i# \$ ^| MCASP_TX_CLKFAIL ' \8 [: O! Z" E! \8 ~. C
| MCASP_TX_SYNCERROR
" z/ h* z2 ~8 F4 z| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
) {; I( _; q8 Q8 S( I| MCASP_RX_CLKFAIL) c& |# _* R7 o8 Q$ z/ {5 e
| MCASP_RX_SYNCERROR
& t5 W8 t$ j  ?| MCASP_RX_OVERRUN);
0 C1 _+ n3 v1 d, i+ A4 g}
static void I2SDataTxRxActivate(void)
& [; l: n% `' j  B9 ?+ P; n{7 T4 T. H/ w" t4 ^8 u$ q! a+ t& o
/* Start the clocks */: @8 f/ A7 g! p* L1 `% v) S
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
- N! `# q2 ?2 i. {/ sMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
8 S5 I- }8 M' F& Z- V- e3 ]4 ZEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,, d* l+ }  \- b+ {1 B( Y$ ]
EDMA3_TRIG_MODE_EVENT);9 ?( _) V; z( `$ J( d# V
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
% n7 J& R" P) M, v. HEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
% Q+ _; |  E1 _. ~3 ?+ y7 aMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
2 K) q8 |) R, F& \6 I6 s; r; xMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
) C, r5 E0 l; u" J& Lwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
3 l6 P) T- |. M. i4 sMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);: O$ r% x1 J+ C3 q% C( j
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);* T. |, q( m" N# T8 y, [
}

" n" x& ]* E! `4 r* g
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
9 P; ~' Q" l) e/ d





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