嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,: {. v1 [: x0 G4 H' w# C7 t
input mcasp_ahclkx,5 f9 Q9 T; C5 s* O
input mcasp_aclkx,. J- X+ ^# u/ v, P5 v
input axr0,' Y8 m7 K- @ B* f+ A
, u- Z' R/ H' Q6 b! E
output mcasp_afsr,
! K1 \6 f8 ~% O' m( H9 ` W2 @output mcasp_ahclkr,4 G+ Y* o7 K; B$ k4 J% X3 j/ M& F
output mcasp_aclkr,
$ W5 P2 ]) m. I" q* s' `output axr1,% l2 n4 @; u8 Q) s
assign mcasp_afsr = mcasp_afsx;, `. z# b. w1 Q
assign mcasp_aclkr = mcasp_aclkx;( s& F$ I3 u. S0 i0 o H, |5 m* h
assign mcasp_ahclkr = mcasp_ahclkx;6 d3 U; W; [5 }/ E1 N0 I8 x
assign axr1 = axr0;
6 K" f8 O8 \6 E9 u+ `+ a7 ^
0 f- q: t O" x C' `% w在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
3 U( A' m2 }1 M% z
static void McASPI2SConfigure(void)# Y8 k0 o; m) A# j7 }# d# ?6 h( C
{
- S9 R' k( ^8 }* QMcASPRxReset(SOC_MCASP_0_CTRL_REGS);9 n( o9 r) U/ t7 ]& Q
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
( o0 \# r! L8 [McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
$ Q( j/ _8 A+ k: X) L- IMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */: C5 d9 A# \5 k0 H0 w; o
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,( B+ G; H7 V7 C6 Y) v: ~4 ~8 Q
MCASP_RX_MODE_DMA);% z: ]# n2 J5 o% _
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,9 [4 i2 e+ F5 P' |- }
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
6 l/ L2 t k, Y- a4 X* @McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
; q. p5 H# s6 \6 ?4 _9 i8 v4 B3 WMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
- n0 ^; ?) b3 VMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, * P$ Z8 N# S4 C! e# _
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
! ]& N) O) T, \McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);# [ `+ q- p9 i/ X# T
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 6 v: Q; P2 q; l- X
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
4 L0 B3 N9 n; ]* a4 r# G; k0x00, 0xFF);
/* configure the clock for transmitter */
1 t' l# F& }/ XMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);1 ^- c7 T! H/ t( s& R- ]4 R0 p
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
% v3 h* |8 u" M+ J9 ~: LMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,' e1 M- A: a' U9 h
0x00, 0xFF);
! ^/ [0 _% t, C4 C- a
2 v; ]- A; p# r- T& d5 r/* Enable synchronization of RX and TX sections */
* j1 b* {" {: G2 `: [1 V0 GMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
+ A Z3 G6 p( pMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
2 T# [0 v2 [7 wMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
5 y$ Y" K4 H& N/ J** Set the serializers, Currently only one serializer is set as
3 n2 G3 C% d% P# a6 [! s8 g8 J) @/ W** transmitter and one serializer as receiver.
/ p+ U; M/ y( R& t& M*/
/ t" b7 [8 f' T8 ^5 }McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);: y9 A+ E5 h: i: M+ p7 [
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*& x3 |8 y8 J5 J0 `+ s6 d$ t
** Configure the McASP pins
+ R" z) O# `1 r* N8 d0 M** Input - Frame Sync, Clock and Serializer Rx8 H! m: q$ K) L9 k% s
** Output - Serializer Tx is connected to the input of the codec
1 q) H2 I) t/ ~: s*/
; y" O R, |7 c; HMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
) N; E& l' B6 x! UMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));$ u2 I5 X' Q! N- y2 s, K, I& y
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX+ X. @% t/ T. y2 \9 b
| MCASP_PIN_ACLKX3 _* e) F j$ r* [; j( z; |
| MCASP_PIN_AHCLKX
% y$ B6 p( R( c7 s) m| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */$ W$ K1 M( o' o' d
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
' |$ K$ I+ J" K! f5 i8 a9 @| MCASP_TX_CLKFAIL 4 T+ \. ^) ]7 `" m0 m; t
| MCASP_TX_SYNCERROR
& q" s- ^# F, `" L| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
: k: V7 Q3 [. G8 T3 P| MCASP_RX_CLKFAIL6 p6 r5 u1 H. |7 D
| MCASP_RX_SYNCERROR 9 a1 }/ z# \6 P; W9 S. C/ o
| MCASP_RX_OVERRUN);
1 p' b3 f% m' ~5 M- k$ Q1 X}
static void I2SDataTxRxActivate(void)2 S$ l. N) y1 ?1 s2 k* e3 _& r0 ]+ H8 H+ Z
{5 t, k4 R6 d% s& R4 E( o$ U* F' q
/* Start the clocks */
$ [% D+ b+ R1 ?" W* z, P# h* NMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);" C1 C& T2 B9 V: @' e/ x6 |4 I
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
+ ^6 i0 C; \# f" r6 O* W& I. L: [! kEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX," ?$ o% k- t# \- ~
EDMA3_TRIG_MODE_EVENT);* F0 B+ f/ v, z( v8 |
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
1 M0 P% @+ Q3 p; p1 LEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers *// L' k& J/ ^; U$ `& X
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);( w: D- `+ h E; X7 w; x/ o! u
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
n4 B, E ^, c& g+ c- |while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
! ?" Y* |; `& a1 YMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
2 S- s) Q1 k, l2 tMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
. L# L( |) C" r0 R3 q- e}
. S% H u" t. }; @请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
% w# o3 ], H. g6 O
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |