嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,0 X! m$ X: v" h+ Z/ h* ?* `7 W
input mcasp_ahclkx,& m  L, M$ [* e, q+ U
input mcasp_aclkx,  Y6 H* w, \2 F& R+ ]
input axr0,
6 G  S3 g" P# [" l
' h  F2 B8 j' Ioutput mcasp_afsr,( z( |; X. H* R# I, I3 O/ c) S
output mcasp_ahclkr,
  h9 N# U' d/ g9 U" Noutput mcasp_aclkr,
! @9 ?# w8 O0 ]$ v" M& ~output axr1,
8 r7 q; Z2 b( d% w8 T/ [; |$ \# E
assign mcasp_afsr = mcasp_afsx;
# ?8 ^5 h4 V" E5 \assign mcasp_aclkr = mcasp_aclkx;0 X! q; b) x* P! U
assign mcasp_ahclkr = mcasp_ahclkx;& j6 ~" i1 W9 e0 B* J7 j6 J) R% H
assign axr1 = axr0;

' u  N; y  O1 X5 L% @' K
, a% n6 q& r9 L" w7 S
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

5 F, Y6 k3 E3 I% `  M0 \$ ~
static void McASPI2SConfigure(void)
" n, g4 D7 N0 Q& [) q5 s0 b, {: T{4 R) Z- E! j' [3 ]$ L! f
McASPRxReset(SOC_MCASP_0_CTRL_REGS);8 }; S  j' h/ B1 W* [# g! ?
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */9 u! z+ ~, w4 ]1 h6 k) T6 J& g
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);5 h) s+ n2 T0 T9 W3 {6 p
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */5 S/ K% T0 b. U% i& a. i" c( e
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
1 I0 W7 c- y# e3 i) C' KMCASP_RX_MODE_DMA);/ V5 U. l( e/ u+ ^! ?
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,9 z( u* B5 p  ?; [4 H/ `& |
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
% E0 |) V) r; u5 lMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 4 C5 x  z; d, I4 n4 m/ ^
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
" d- s2 q. I: m/ S- OMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,   e+ q: b9 A; ?- O+ n  Y/ e
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
" {8 y% }7 A$ D% U0 x0 w$ ^- vMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
5 y* s, J" X. v- j" cMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); % \' U5 @3 F9 B0 `- ^
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,) x* l- G  G+ o' g
0x00, 0xFF);
/* configure the clock for transmitter */
& E  `0 ~3 W) u  C1 w2 `1 PMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
; A/ [) P( W. p( B2 ~$ ZMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
) K5 I. _+ i0 q5 }& tMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,. c9 H, N; C; G' U( d/ P
0x00, 0xFF);
7 `. l' l; ^1 I- x; Z3 v. Z% b3 E$ Z
/* Enable synchronization of RX and TX sections */
' h- b1 e% M; B  y, u. CMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */- p4 S0 M" h- {, u) e
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);# ~! \8 P" C  \( f0 _* K6 G
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
0 Q, M7 q( x6 S/ C7 h4 h** Set the serializers, Currently only one serializer is set as9 x; |! ^/ O( Q1 A
** transmitter and one serializer as receiver.5 ^& r5 h) z% w. e* _! c7 C1 N: I5 F
*/
9 F6 m! n- v8 i4 Z7 W6 g& y( Q& nMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);- p: i/ `. E0 a* n" Q5 l
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
' y1 q1 G' P4 w% a! S** Configure the McASP pins
' ?# n& n% g: H% ?** Input - Frame Sync, Clock and Serializer Rx1 z5 _/ e7 v: z5 I
** Output - Serializer Tx is connected to the input of the codec
# f1 n% ]# T0 b0 l. G1 @2 z. ]0 D*/$ d. x1 l" k0 F7 h: S
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);, _+ ], L4 ?4 S
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
5 s- [) d( `+ ~# PMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
5 o  ^# A+ X- f  |: H: I; X| MCASP_PIN_ACLKX
3 }4 M- i0 y) c1 N* f6 C, W7 p| MCASP_PIN_AHCLKX0 c! G4 [( H% F6 r7 }, M. y5 c
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
, b; C9 E9 q6 DMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
' Z# R1 G( f1 s7 s2 p1 v* J; A| MCASP_TX_CLKFAIL ) @: T; Y/ j$ e. e
| MCASP_TX_SYNCERROR
$ g( m/ L. g* v1 M- S| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 0 V2 l$ G2 {& Z9 M: u* x; w1 t! F
| MCASP_RX_CLKFAIL% ^9 L  y1 ^8 G+ v9 H
| MCASP_RX_SYNCERROR
$ H1 q) h& i! y1 ~1 {/ P4 P| MCASP_RX_OVERRUN);
/ K4 _- e1 j, Q4 I3 `$ @, s}
static void I2SDataTxRxActivate(void)9 g* }# }4 R. M" {! A
{
* n3 \* k( Q# O: y$ O1 n/* Start the clocks */
7 v' E7 a: h& k& SMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
: j4 B7 [- K! |McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */) a+ s# p3 x  h1 y: u6 G( N6 o
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,2 i2 K2 k: K. u1 N' Z4 o
EDMA3_TRIG_MODE_EVENT);
# f8 D0 V: \4 L( }) {. V0 @2 a& fEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 4 a# V8 J- d# z- H( ~
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */  R3 j" r: Z# g$ k# C
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);2 @9 f3 g! i- }8 V& |! x
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */4 Y/ h, L3 y! |! @3 o5 X0 w' N
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */# \5 Z# r' i% C' }, y! ^
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);% S( Y* C- E, G9 |" w( I6 I& i
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);& ]  V* w5 o! }* N' M9 N4 v7 g
}
; i( R4 B. s% p
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

  y/ _& T/ O* d# s




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