嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
0 _( b! V1 N" {9 Einput mcasp_ahclkx,
6 j+ s2 f% ~' v. B: ~$ Z# oinput mcasp_aclkx,% ?0 ^$ _) {- ~! Y  h1 `2 n  u: _5 Z
input axr0,
: h( _& ^3 P" {& g: c; Y. D/ I9 x4 s. t
output mcasp_afsr,# L' r" z1 }# ~$ p* e0 {. e- {
output mcasp_ahclkr,
% a% B" x) L, F. R" \" _8 loutput mcasp_aclkr,1 A0 l' i# J+ R0 y5 @; A, J9 Y' D
output axr1,
; ?2 @& e8 \% w# y, k. B- r; p, A
assign mcasp_afsr = mcasp_afsx;3 T' |6 e# A5 z& F. [9 c, J7 M
assign mcasp_aclkr = mcasp_aclkx;
( p+ Z7 |! D/ N: t- T8 f# e& t: ^assign mcasp_ahclkr = mcasp_ahclkx;
% U, S1 o  k0 H0 h; R: \  E: Kassign axr1 = axr0;

4 z/ z' v. \" Y' O- l- y$ S4 l9 l5 b: a1 U& b4 B3 H
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

4 [$ _) H# J' K' p
static void McASPI2SConfigure(void)
% R0 S( h2 }- R2 ?" c; e{2 P7 O; R4 }# V, B% D5 U
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
' y5 X( w! \0 f$ iMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */& j5 F6 e  h, t7 |3 |: b
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
( l  d3 B2 w" |6 m, oMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
$ H6 Q' g: ^- p; c) H5 jMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,- d3 @/ ^7 g% \/ Z
MCASP_RX_MODE_DMA);
, k: l0 T* R2 y3 Y( @, j6 _7 ]McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
& m) R1 r. C5 i6 L- Z7 p; |: IMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
7 h! D% u6 Z- S. |4 f6 n0 m: qMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
. d& a0 d1 r5 z  [* @5 A8 BMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
# ]" L/ f1 ~9 s; E+ p  R: MMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
" p6 @% M9 r" V! l. N; CMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
1 j- ]& ~; R0 @3 d3 s& r% EMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
7 J4 n3 |' A3 t. o' IMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
( S6 u: T" m$ ~. KMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,& z" a* k% g3 L& e0 W: a
0x00, 0xFF);
/* configure the clock for transmitter */
1 \- n( M! Q) }* Y0 iMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
2 T6 L" x0 |1 U$ \; JMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); / `" R3 I8 K" h
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,8 ~' b) M7 U- S6 E* Z* r. s
0x00, 0xFF);$ L, I  w1 f7 z* f& k" I
% m( j  ?! H4 c* [2 C. n
/* Enable synchronization of RX and TX sections */ ! q" J( C9 Q0 d
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */, W* u7 k8 x. j+ `
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);4 H  \* n2 X: U0 R- h- ?' C
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*( Y# A* V, a, J0 }2 X4 N* Q
** Set the serializers, Currently only one serializer is set as: x  s4 {9 F. n- U" X
** transmitter and one serializer as receiver.
# a. E$ T+ H3 Z+ k* s2 G5 ]*/0 P7 x( O1 A3 {
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
0 L; ~- }3 z+ v: Y6 bMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
2 f$ A$ S9 t0 m8 P** Configure the McASP pins : n) R8 b0 D5 v3 F6 k% R
** Input - Frame Sync, Clock and Serializer Rx
* G+ l2 `5 s$ y2 E** Output - Serializer Tx is connected to the input of the codec
: I$ S' j- f2 k5 N* v/ v*/
, s# D. x, l4 p) P2 ZMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
( s) }% V; B# t% A+ vMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
5 D8 {( x, p4 a! JMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
4 T4 r8 U* s" L2 S+ ~$ z/ \3 |9 x| MCASP_PIN_ACLKX9 V& k" X( e# h) c: c
| MCASP_PIN_AHCLKX. ~( h: B/ U8 k  d  h1 y
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
8 m# {$ g$ ~, Y6 ~, b# VMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR " ^! d" }; A  C( g% _) ]
| MCASP_TX_CLKFAIL : N, k9 P" A- A& D8 O
| MCASP_TX_SYNCERROR7 v# }$ ?  g9 o
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 5 {9 M! S0 N3 p5 C' {; Q0 W
| MCASP_RX_CLKFAIL) l6 r% x' U8 _7 T' N% M, e" j% b
| MCASP_RX_SYNCERROR
; J2 O* V! D5 x% e' S; ^| MCASP_RX_OVERRUN);
: v) K' @  ~, c- ~: |. r# n" W}
static void I2SDataTxRxActivate(void)! |- `" O# [4 x* a: s
{
! F' z# |  W# ^( m/* Start the clocks */
4 T$ h4 q$ S0 S# r2 e6 EMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);7 a2 _* F6 v3 e6 _1 P2 W
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
* f7 F5 H4 N0 h3 g" O. c* DEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,0 S4 Z3 K- s# Z6 V6 H  x/ U" _
EDMA3_TRIG_MODE_EVENT);; ]) ^5 |& v. s7 q6 C( p4 e0 a; o5 O
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
& e& h7 k9 R# ?& m% p0 d, |EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
8 A* Z) s+ \  g  G" ^3 ^" tMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);  J1 `& h% o1 ~. l: B  P
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */' [  R7 O% K9 F
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
8 W5 h0 F# a- }9 h) aMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);3 w! P4 c% |0 Z1 G/ y1 A+ f
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);8 {5 b1 r6 T5 C
}
# ^( K4 S) i" d# f
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
1 v% s1 L  Y. r$ L% X2 a





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