嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
* u+ m, i: g7 Y, qinput mcasp_ahclkx,' {9 O; x. E0 B9 H2 d/ C
input mcasp_aclkx,- }' U" E1 n: l+ y' r/ |7 H9 Y
input axr0,. c. h0 j L" C3 O {2 P3 i
2 g4 ~* {2 e; noutput mcasp_afsr,
# m+ i6 P/ K0 c; S0 soutput mcasp_ahclkr,9 h% \- e7 n' ?5 i. ]6 L
output mcasp_aclkr,
. k9 B9 i8 Q1 n, Aoutput axr1,; P9 f! N) |3 w) q
assign mcasp_afsr = mcasp_afsx;8 p M9 l9 v/ v% ^( c
assign mcasp_aclkr = mcasp_aclkx;
& `6 j& k; }' v* K) l% Bassign mcasp_ahclkr = mcasp_ahclkx;
6 c( Q$ ]4 h% x& jassign axr1 = axr0;
# C: a& _, ~) D8 A/ q7 f) d
* O5 x" {5 U" L9 l7 K: _在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
( g; \$ x W" g# J$ u- E' e
static void McASPI2SConfigure(void)! R1 I+ m% r* |8 \: v
{
( v! I: M* l! p+ e8 i& {McASPRxReset(SOC_MCASP_0_CTRL_REGS);, w1 K+ m d# D4 r& E) c
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */5 C5 O& M0 e' z+ R1 A( V$ ~( O
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
+ f1 e; v& D& i0 k XMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
- |# _' h8 H2 r; XMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,! k t, i: e* V) R$ L1 G* T
MCASP_RX_MODE_DMA);
0 h" ~$ }* Z; eMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,1 i) P5 i( I3 k8 e1 i2 [
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
; f2 j% D4 I8 T3 F! ~McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
2 X/ S# v. E3 q) @MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);7 B0 H4 g. I0 E+ r) I( e8 W( L: e
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, $ k% Y: Y) I# l5 f0 ^9 D) I
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */1 J. ^ M2 J7 ]9 p& R1 ^
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
# ~5 B; s% T# T% @7 n- x. UMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
z, i4 |% S; M1 ^McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
' L8 ?6 a5 g. X0x00, 0xFF);
/* configure the clock for transmitter */# T& Z% d) t- f' [8 t& Y
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);4 m J7 E+ P6 M8 |
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
4 V9 J8 R# g1 _3 x6 C4 H/ BMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
$ l; E! C! U- w# A0 l- L) @, E0x00, 0xFF);) F1 }6 d I0 U) E& o
# J4 d+ d4 @# U- Y: B/* Enable synchronization of RX and TX sections */
6 T0 f) s$ y' b( o% cMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
2 g4 p" ?2 i+ M7 Q& `- M0 jMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);( d/ L: Y n$ u5 }; l3 z" U& R
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*: X' Z7 L& A3 y4 D! @
** Set the serializers, Currently only one serializer is set as
5 M1 S9 H. G3 i* b** transmitter and one serializer as receiver.
9 m% s$ y$ u# A0 l# B8 w*/
5 l3 ~, R/ A! k; R9 {McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);' j6 C# ^8 R9 d* R7 h
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*& `0 |# l9 R7 d
** Configure the McASP pins
/ X. Y5 L! f3 n3 c }. k3 B4 J6 h) _8 i** Input - Frame Sync, Clock and Serializer Rx* l: e# b3 }5 ~/ _- J
** Output - Serializer Tx is connected to the input of the codec , U+ Z! s1 Q: ?) e
*/2 }: {; f0 G- Q4 k2 n1 O9 L
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
$ m! p" D! e" V6 V& d4 BMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));6 C @/ |. }! p, C l8 l$ q8 M3 i' u, B
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX2 x( |: y/ O8 ]4 b/ d: C, J K
| MCASP_PIN_ACLKX+ P; W% D7 j, Q- l/ J
| MCASP_PIN_AHCLKX
; x/ x5 g" J7 j- Y* F| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
) ^# ~- v" ~/ ?' c5 D; f5 n( DMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
: u. V, \+ F/ Z1 Y: e4 D8 C| MCASP_TX_CLKFAIL
* k9 B; j2 y# L# v! S| MCASP_TX_SYNCERROR
5 \5 P5 T4 w7 i* G| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 5 e6 I- t3 A" ?$ P* M
| MCASP_RX_CLKFAIL1 D: w: z0 L$ _) z" q$ w
| MCASP_RX_SYNCERROR ) f4 j6 i# o% h2 p2 G* P
| MCASP_RX_OVERRUN); r( R7 H( ]! w5 q2 d
}
static void I2SDataTxRxActivate(void)1 {8 r% I* X1 L* E) `
{
1 T0 B% j+ T! l1 v8 e. a/* Start the clocks */
- R* l* N, }: T6 G# z' C4 |. _McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);- @, E" s) x7 |9 E# ?, P$ G. y
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
1 a4 g+ W4 ^- J, MEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,' i e' D. ]- [4 J! c- c, L
EDMA3_TRIG_MODE_EVENT);
7 e, _7 `9 v, TEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, o) F6 P$ M* y1 _7 x N2 D: n4 p
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
- m! a" O* H0 B3 r( S. EMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
4 X2 W* ]3 j7 h7 ]McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero *// A; O! q8 t0 n- N
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */! J; u' X. }6 D2 r# u
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);9 i# p- o) e9 U1 K4 N; s
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);# z# {6 P. `% m- T: ]7 f6 d
}
+ ?' T" o0 G; C) X" L: l
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
! r, \' p/ [% |+ n, |
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |