嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,0 L! ?9 w( F$ n4 w8 o+ J3 x: V+ Z
input mcasp_ahclkx,
1 H. N: N3 }+ f. m' zinput mcasp_aclkx,
$ Z- l$ |9 E9 U' U" ninput axr0,
" J! s7 Y" P) K$ Z7 O9 v' U% l
- l. T5 D0 x! h# P! _output mcasp_afsr,: d' A5 Z- z& A) M& F4 w  A
output mcasp_ahclkr,+ ]2 }3 H; D; O* `
output mcasp_aclkr,! g! u1 m& h4 @$ h" I8 v  U; Z$ R
output axr1,
1 g" N' m* ]9 ~' P+ w4 ]/ x+ N- a
assign mcasp_afsr = mcasp_afsx;
; z6 f+ Y* o0 O) U+ D' wassign mcasp_aclkr = mcasp_aclkx;( v8 a* y0 t6 p) V
assign mcasp_ahclkr = mcasp_ahclkx;
" k  i2 S  {0 g* n2 l5 @& C# kassign axr1 = axr0;

; O) H4 D" |! x$ O6 r# s* ~. [$ C+ ^) y! U( Q! Z# f3 ?  j* q: N
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
3 V; m) K. g8 w  k$ `  G
static void McASPI2SConfigure(void)
. w/ R+ g( R1 F% c0 N7 f{
0 r6 V$ B0 i& i' IMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
+ |+ v9 I1 P. f  n0 ]/ ^0 x( |McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */: A% i0 L# I5 f# l+ {; n; R
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);. I) F9 p; O8 S& J2 K0 \
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units *// f- l  a0 k7 h" ?" W5 Z% H3 X! l
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
7 G: I& m# U4 b6 N2 r+ m) t; AMCASP_RX_MODE_DMA);% ?$ \' H- o; B* A8 y/ V- `( T
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
# v( R7 b, Z/ F: B8 X( X8 F' DMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
$ k9 T6 X7 ?; N, j4 PMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, - \& I7 N; X8 \' R" j( L
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
% A2 O% t8 k0 {$ y- ^" ~$ {McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
2 j- `0 b/ S  o# @MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
1 q3 x. s) D- D* Q4 g' R- nMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
9 n+ }! W/ U, ]' Y8 [McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 8 C5 X2 R, a% K$ p
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
0 J6 T0 Y, U) Z- S/ u; ]3 U0x00, 0xFF);
/* configure the clock for transmitter */
; q7 `' K1 D  S& _' B4 eMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);) x( ]9 h9 u, a  h! O% Q# j
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
: u; n- ]7 C% O; I% g9 zMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,3 z7 x* N' _5 v
0x00, 0xFF);! u& I& E, i# O9 H# L
4 U& m6 Y; Y* _; G* U
/* Enable synchronization of RX and TX sections */ . `& t( L) k! t9 D& I
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */6 K5 k( d! M4 q) c" f0 v) c% H
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
. e3 x- [: n& @! ~: x1 ]McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*: w2 n+ ?% y/ H
** Set the serializers, Currently only one serializer is set as
, x$ v- a# }- x; S5 }" l** transmitter and one serializer as receiver.
4 V$ `1 v) r( z8 R, d, S( S*/0 V6 P* g: P: b) q/ f2 y. x
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
( k, Q0 b/ H, ?/ EMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*' m* d7 y1 x/ z2 e
** Configure the McASP pins " I& ^1 Z# l( G. W4 R
** Input - Frame Sync, Clock and Serializer Rx
. T% c$ {+ J# R9 I. X1 [- `. ?% }% c** Output - Serializer Tx is connected to the input of the codec
* s  T0 g. G  a) D*/7 B1 C+ v  K5 a
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
1 R' A6 ~+ E+ R8 }  j2 _McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
2 ^$ M7 i, l4 U- HMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
* l4 O  D: _$ s| MCASP_PIN_ACLKX
% y" i0 e4 X8 y2 @2 S, t( p| MCASP_PIN_AHCLKX/ T' r5 r- G" G( F6 B* O# n5 f
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */, J* u4 H- U& R& z  p8 }! [' l
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
( o% s& ]2 r9 G; [3 h| MCASP_TX_CLKFAIL % L+ r: I/ t+ ~) \: I# K
| MCASP_TX_SYNCERROR
8 A- Z3 Z1 l! T: X3 P2 Q| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 3 v% C0 x% Y  k. A1 l, k' a. h0 w
| MCASP_RX_CLKFAIL9 V$ ]) W8 Z9 R3 [/ w/ ~9 V
| MCASP_RX_SYNCERROR % I) R9 T6 k! s3 v& _
| MCASP_RX_OVERRUN);
! g$ \4 o- X* K1 K6 m* v5 \}
static void I2SDataTxRxActivate(void)
% P  V' y1 K# e7 I{; t( F( V6 J/ t) j' E3 ]  A
/* Start the clocks */
! w, ~, Z  n( r  X3 n5 O! BMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);2 X* k" m$ }  Z, C" G) K8 T
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */! R- ?' ~3 `, Y1 r. [7 I" m+ d
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
9 S4 n7 w( U& O6 ~9 i; yEDMA3_TRIG_MODE_EVENT);
* c. f8 i+ n! B0 r+ VEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ; W" U$ ?$ R: q+ P! f. _
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */9 N8 _4 K7 ^$ f$ w
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
5 i: W0 \+ O+ C2 sMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
9 B& q9 \+ S1 Q! ]/ q0 o: R0 Hwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */4 U) E3 M( G5 v7 |- y, s: @# U
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);- S$ e, T* ?7 M# d. ]
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
! {6 Y2 |. }9 _}

8 f: r! Y# ?+ q* Q
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

5 N; F" S. u+ Q% I




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