嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
2 _4 i: ^2 C" H( Iinput mcasp_ahclkx,
: ~8 O! M  r* f1 winput mcasp_aclkx,% _& L9 q( X, }+ u) ?' s( p2 A5 |
input axr0,' m- x2 L/ w* t* b6 l" N/ \. q$ a
, C' f2 o7 ]4 w, Y: [$ E" w
output mcasp_afsr,
" _$ d, ?3 x+ {0 }output mcasp_ahclkr,
  h4 K, W( }% W4 @  U4 soutput mcasp_aclkr,0 e8 U( @3 Y" g& ?* P1 k
output axr1," M3 z8 {  s# H  _) q
assign mcasp_afsr = mcasp_afsx;
4 _/ q7 h5 G2 b8 wassign mcasp_aclkr = mcasp_aclkx;% C# P" d6 D0 g5 t+ J
assign mcasp_ahclkr = mcasp_ahclkx;
2 h2 y/ f' B- R5 J# eassign axr1 = axr0;
) ]! h, k9 t8 n

1 D: x3 [! G* S: k
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
; J2 ]- T$ T$ e; c' F
static void McASPI2SConfigure(void)6 Y% J! s2 l6 y# p
{
& @3 ~6 D6 a% D* p& n# H2 mMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
. c( ?# N, N1 J  i  v6 {& LMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
! c# @& M- ^0 jMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
. i+ @/ l( e8 O8 S, d4 wMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
" ?+ B% w$ m. e5 C  kMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
1 D# M2 w7 ~) n0 d  J3 y" ]9 QMCASP_RX_MODE_DMA);: _/ w( F+ J/ M- A
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,+ G  s" f6 s( Q
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
, p" }8 H* m% E  g# p5 \, j5 R" WMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, $ g: G/ ?, U8 z. D4 m$ G. l
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);, m. N6 v! C0 t. b, m( q# }7 M2 H
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 9 ~, c, o. J0 `/ u9 t
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
% d' v- h# D, V3 [9 V  ^McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);0 P8 G/ R$ E+ ~9 \
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ) K; I! S& k7 U# ]
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
; @& o9 _& z% d) t1 Q0x00, 0xFF);
/* configure the clock for transmitter */
! N) |7 H* P3 E8 z9 XMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);6 Y  U6 q7 w+ b; j
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
+ U" F% v4 e) YMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
0 l. `" o% g5 w* M: _0x00, 0xFF);
' b7 X5 D; P5 o
5 O' G. x7 ]7 Z- F. M. I/* Enable synchronization of RX and TX sections */ # V/ G# h' B" \
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */+ k; l( h4 K9 e) e7 l
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);3 g' g9 w# \5 m  q* Q9 q
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
& [1 b, [4 s9 l+ r** Set the serializers, Currently only one serializer is set as
' [( j2 n. o, e! w6 w** transmitter and one serializer as receiver.* o0 E" J# q& F8 u6 i: S
*/4 F! W2 v4 ~0 m; l: N) e
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
  b8 ^+ S/ a: u# nMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
" Y2 w+ D4 I7 i' z2 \** Configure the McASP pins + r$ q! L0 H: s* f# E
** Input - Frame Sync, Clock and Serializer Rx$ @' x  O! m5 i- V1 A% P
** Output - Serializer Tx is connected to the input of the codec , {$ f* N& r  `* o6 D# N) J
*/
0 j8 O: g4 E0 G6 r  a8 dMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);/ x, ?- D$ J$ \& g% s- w
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));4 Z: X" C' r8 E6 H
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX- n8 g" n, Y$ W# o. M' }2 i
| MCASP_PIN_ACLKX* o% Y( l! p/ j5 y
| MCASP_PIN_AHCLKX
) @; z4 t8 Q1 ~% W8 c: F| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
  Q) R- f/ B  W+ ^9 V+ |- \" TMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
0 l" L! }  G( `' ?| MCASP_TX_CLKFAIL : Q$ E& r/ o4 _3 G
| MCASP_TX_SYNCERROR
$ U, T9 y# ]7 ~7 I4 n| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR + C( g; H" f! M5 ~
| MCASP_RX_CLKFAIL: B% c! P4 G3 A  y) P
| MCASP_RX_SYNCERROR ; W0 H: g9 {! N8 U9 t
| MCASP_RX_OVERRUN);0 k9 Q, T. e; ~
}
static void I2SDataTxRxActivate(void)
* [; m, x, B( {: B; z{5 ^" k: r5 y" Z$ V& ~& R7 F/ d
/* Start the clocks */& M0 d( _! x4 m8 Y3 y+ v
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
; e0 @# A( a$ s7 e4 P1 P, P* \McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
$ K2 A# d- K3 aEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
! Q% P; d  K6 H' C2 [EDMA3_TRIG_MODE_EVENT);
* z1 c- }1 H8 P* ~8 |) QEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
' ?( f. [- _) G) q5 lEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */# {2 X& c$ d! J
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
* h8 }- {" v" p8 e3 D, |McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
! }1 ^2 v- ?- C4 zwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
  B) u  c* j8 Z4 T" Q' p6 qMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);" S0 M+ _$ }% r
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
5 F& Q; \1 W' }7 Q, u# U( G2 z}
  K* r# |. }$ N- H
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

& M! ~$ ]) l/ p0 y




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