嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,3 {6 I  _: t# e- v: B1 q0 \3 C2 ]
input mcasp_ahclkx,
" w4 l5 H- o. H5 L- ]3 r, Dinput mcasp_aclkx,+ s- S9 l) b% h2 Y- R1 Q
input axr0,  S. A' M8 h8 k  Z+ l! U+ O

- R+ x( u/ ?& ?( `; qoutput mcasp_afsr,7 ~4 i4 z. [- D7 x1 k8 J+ N
output mcasp_ahclkr,
$ U9 p) v6 m/ ]- i) ^# U4 woutput mcasp_aclkr,
( E' `6 }( D% foutput axr1,1 ~/ ]1 r3 N2 K# [
assign mcasp_afsr = mcasp_afsx;
8 M- p9 K  ^9 P2 ^3 t0 f! Q  tassign mcasp_aclkr = mcasp_aclkx;
4 g4 s7 S; N3 h/ fassign mcasp_ahclkr = mcasp_ahclkx;( N: i2 }( Q$ ?# f* _
assign axr1 = axr0;

8 D: i. I  b- \0 ^6 E8 i+ |2 V8 f4 T+ x2 I
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
& o' ^& A' g1 Y2 e
static void McASPI2SConfigure(void)
2 h, E+ J; N2 }5 {* C8 P, n{0 w; c7 l3 Z5 G1 e
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
: l  c) v+ g- R" y  ^0 B( xMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
% C$ U3 v0 D! e, L; z- K- ^McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
! p6 X& x7 ^: FMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
! [0 [5 @, k  I) [  ~, wMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
; i: K8 f. n- D$ j+ x8 f6 E/ Y1 fMCASP_RX_MODE_DMA);3 v6 X9 f' D+ ~  D% t( e
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
1 e0 ~- _6 h% f0 _/ oMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */' j$ ]2 x6 X/ E
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
, f& ^; r* K. x; d' r+ z3 f! cMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);5 s3 S. ], e4 x; W: m
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
. q- O, p8 ~9 JMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
+ f) Z2 I/ L7 ~" j. @6 U! |# lMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
3 [% S# [7 p% n  j' T0 J+ p+ |McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
" X' l! E3 D- P5 OMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
6 L( A: Q1 v8 `9 f5 [3 a1 C7 I0x00, 0xFF);
/* configure the clock for transmitter */
( q$ A# q! ~! g' C# y/ cMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
) t' m- Q! F3 D9 W6 MMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
& v8 t& T; o" vMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,3 l/ G) V3 x& n8 J
0x00, 0xFF);
+ l6 u  D* f+ _6 Z
% W# E) z; Y/ }( Q( e$ {0 ]/* Enable synchronization of RX and TX sections */
6 J9 k& j6 c  JMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */2 p9 B+ S; n4 c' ^; A; H
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
0 h9 c; K# [- n4 X( u2 ]- oMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
7 e5 j+ `$ N) I** Set the serializers, Currently only one serializer is set as
( `1 H$ V. l2 E6 E6 e  S+ E** transmitter and one serializer as receiver.7 `, o/ {* c4 U7 U" l5 m8 Q
*/$ A2 i. L6 }# y3 I1 p- ~" U- U+ r
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);' [5 ~) a4 A5 {4 I
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*4 b* k1 q* D% K3 [" E: L8 z. m
** Configure the McASP pins 6 Z  v: r! c& T$ S7 ~4 ^
** Input - Frame Sync, Clock and Serializer Rx: A5 F0 v! |/ a* D( S' L
** Output - Serializer Tx is connected to the input of the codec
+ _! V* N" d9 O' R' i7 S- R: v*/
0 O/ _& V$ R2 b( R+ xMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);0 m% p. u( p6 V. @- Q5 L
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
" q5 `+ |. G) @! ?  a1 H% u& kMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX" f" \, v! o& I) t3 B" f) p
| MCASP_PIN_ACLKX
9 {% u% ^9 K4 n# V" O| MCASP_PIN_AHCLKX7 d9 M! O$ a# b3 A1 G
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
" k: L3 _. s. i, V  H) t# BMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR   S# K& x' h4 j; l# w. e
| MCASP_TX_CLKFAIL   ^9 ]; ]4 s  l" a0 t% C
| MCASP_TX_SYNCERROR
5 Z9 Z& Q: p$ k- S/ U; X| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
% v# P, A* {# d2 Y0 w| MCASP_RX_CLKFAIL
' a: K% X6 C; r  Z2 a: d. s& G| MCASP_RX_SYNCERROR % i/ k* E5 w$ `3 W1 S
| MCASP_RX_OVERRUN);5 `& K7 @9 B( X" w+ ]
}
static void I2SDataTxRxActivate(void)
1 [+ C2 g6 Z7 d, s; e  y{
! y# \7 N/ |& `+ E+ n- d& z/* Start the clocks */! V1 h: J7 v4 }: g+ j6 v& w. K6 v7 X
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);: Z0 ^/ q4 Y5 \0 ~6 s# e
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */; [, o+ _! o% \& ?# u6 i6 Q9 N
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,8 {5 s9 k. X' ?/ A; H; ]
EDMA3_TRIG_MODE_EVENT);$ L; i1 X% W1 E+ ~/ o
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
5 `2 w! l; G5 C$ o! O& J2 bEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
* B" I* x4 n' V  A" W- eMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);- u/ e8 @8 s' [/ `% X+ W% C( ]) A: {
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero *// v' z5 f7 E( w# N& q
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
+ z7 Q( V* J, w  ^$ YMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);6 X& p3 Z) B! q2 Y
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);, m, M( P" B- h. g' x
}
# W* m% l2 x) ~6 I
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
6 Y* R5 ~: L( i/ k





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