嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,: T* o5 v  e! L" }2 t
input mcasp_ahclkx,
& G/ }, o2 e8 ]  q* k. b6 b5 T. b0 pinput mcasp_aclkx,5 k6 D: f5 x* k  z# P# |4 O1 p) D8 l
input axr0,: r1 f5 ?( k6 ?" N7 c

5 a8 W# b: T$ toutput mcasp_afsr,. J! x4 u% t6 l# R/ c0 t
output mcasp_ahclkr,
( q% J/ O0 |' e) c, ~/ N" H8 ^output mcasp_aclkr,$ L) K9 p) ^; ?0 b( @$ o8 q
output axr1,
, M2 y0 I; y& z' N7 q, v
assign mcasp_afsr = mcasp_afsx;
* w' o2 {0 w- }/ T2 r" n6 Tassign mcasp_aclkr = mcasp_aclkx;8 m7 r% o, [  v- y1 w4 H
assign mcasp_ahclkr = mcasp_ahclkx;( \! o7 |5 L' V2 Q1 ]( C  u5 U
assign axr1 = axr0;
7 @* I: i: o+ i  _. E4 Y% N7 O

6 H3 c, }+ D' b0 X/ n: s3 `
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

3 n; b+ [" r. |7 r* r. N
static void McASPI2SConfigure(void), r1 l! Q: f# r" u6 p
{
! C6 j0 ]& i" y* _3 {0 @McASPRxReset(SOC_MCASP_0_CTRL_REGS);& G& J& H; p' H8 G/ J( h) y, x8 X
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
' H4 O+ k0 E* J* {3 XMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);2 F  h& V8 j% C
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
5 y6 d: ^4 B$ J( iMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
7 a% d- n) y" [, h; R. M4 M  lMCASP_RX_MODE_DMA);
8 B( q2 z; }: oMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE," U# M2 }$ \* b. v" P
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */) O0 [- ]9 A) F( E
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, , k" W# Q9 z* j+ G
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);6 @1 A. s7 n2 J+ S$ {! m
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
; C. R4 W8 r/ S& l6 KMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
* T1 w' B& J- V4 p7 _) g* DMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
( p, L3 Z% F7 G# k! `$ y! O" A$ pMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
& [- d0 A& k: _* }; _& G4 S2 uMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,4 Q/ [( p6 C9 m9 g& G- f1 p
0x00, 0xFF);
/* configure the clock for transmitter */
' }0 y9 F3 |' e1 z4 `# YMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
$ d' K& w# H6 r& a1 J! _McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); * y$ `- o6 K0 s+ y0 U  P( }
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
+ v1 ^0 v! z4 g& x: e0x00, 0xFF);
1 [# \- R# i5 E2 r7 ~# Y8 c" s: B# E/ ^1 b! r. t- K. n
/* Enable synchronization of RX and TX sections */
: ]9 Z; `+ D4 ?1 y) EMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */% s$ r* {. h& y. t  z9 g! B
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
! g4 |1 b( P, `9 B+ _5 b% _" nMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
' c0 X5 M" [4 P* B/ _** Set the serializers, Currently only one serializer is set as
$ D- J  N- t) H# Y) ^* h** transmitter and one serializer as receiver.& V% Y- E- o( Q! y" h9 m8 H
*/+ X( [, v' @9 H; A4 ~
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
5 v2 h) n2 U; q  ]McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*1 \& M! c# f. J, d( l& l
** Configure the McASP pins
% D# `0 g0 L% t  R** Input - Frame Sync, Clock and Serializer Rx
0 m+ O, r+ L  \0 s' m0 Z** Output - Serializer Tx is connected to the input of the codec 7 q6 X8 W: B  H- V9 G+ ~
*/
7 `5 F. M7 ~" R, o7 V8 S! ~McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);% R( S; V/ h; ]. D+ g: f
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));+ J! o# K; s" u) m) e$ g6 t, f
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
" k7 w! W- D1 N" [9 B| MCASP_PIN_ACLKX& E# ]( n  ]0 D0 W' Q9 C$ j$ ^0 e
| MCASP_PIN_AHCLKX
' L" R3 O: ?  t- ]; ~6 }1 n* C$ ?| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */! P+ C9 ]* W# f( {, i% B
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ' c+ B$ P: ?- J0 s- z6 c
| MCASP_TX_CLKFAIL 3 D: I8 L# |; ?' p) W
| MCASP_TX_SYNCERROR8 c* r5 x# H, Y, B7 d- _4 t, K
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
% {4 ^4 u$ ~0 H( n: J| MCASP_RX_CLKFAIL
6 d, S2 r: H. B+ X& v4 ]| MCASP_RX_SYNCERROR % V6 U/ q% G2 b+ H4 C
| MCASP_RX_OVERRUN);
: V% J3 o" r0 @) X/ X( K1 q}
static void I2SDataTxRxActivate(void)
' c6 K+ X. ]& Q) p: g' f& P, A8 {& ]1 s{7 Q4 B4 |$ ^; h' z0 S
/* Start the clocks */# p& k8 z' |$ p6 K' o* I
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
) U; N+ y1 ?! A- R" E, RMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
: d. k, ~# ?8 m- T& H) TEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
. N# f6 g% o5 A% KEDMA3_TRIG_MODE_EVENT);
, b+ x9 x% Y9 tEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
8 n2 H; K5 _: t3 ~9 m  ZEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
9 K& T* b8 X4 M5 ]/ B( l, JMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);, t% t% D4 f6 D5 p
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
$ i$ w- g0 i& ]6 @7 Kwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
9 _$ r$ j8 z; M* G& jMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
* }. Y7 T$ p( a7 V$ q2 ^1 Z5 Q) eMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);/ W  F- {4 @! \
}
' z- l* a4 c# e6 ~4 o
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

: M$ G8 H. N( h4 X) s, X




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