嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,- M8 g9 b0 H) A6 G4 N2 b' n3 q
input mcasp_ahclkx,7 Z) ]' |( Y, N4 D/ x; B0 t; a
input mcasp_aclkx,
$ c# y$ T. R8 ^  m. Z8 hinput axr0,
& L# j3 ]1 f1 l4 o) L5 Q/ U6 I* l2 I1 \. r) R! v8 J! v. P6 M
output mcasp_afsr,
& c8 F7 K! M0 c* Goutput mcasp_ahclkr,# W  K4 r- b& Q
output mcasp_aclkr,( ~9 J; r! u% W5 q9 I
output axr1,
8 S3 W3 ~$ z, i0 `6 l+ R# v
assign mcasp_afsr = mcasp_afsx;
1 q% p( t+ @7 C5 S. m- A! tassign mcasp_aclkr = mcasp_aclkx;
3 u) J5 N+ Q! c9 rassign mcasp_ahclkr = mcasp_ahclkx;" C: a( r0 A& o: u
assign axr1 = axr0;

, l3 ]; e7 L) z0 s. N- D$ j, _2 i
  j: p6 K! r4 j* f9 G, [& C% r
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

( N4 n4 K0 ^+ I' N( ?! e" w
static void McASPI2SConfigure(void)0 k+ h# f% e1 g4 @/ N4 m$ W
{# k" U7 C" u0 `: p# e, i
McASPRxReset(SOC_MCASP_0_CTRL_REGS);7 m4 Z! j4 ]5 c) `; G1 r
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
1 g, r+ ~/ e5 ?8 `# p2 e3 }2 x6 aMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);9 N- _0 ~/ h. L& s% q1 i4 v  H( t
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */1 ^* l* S+ N$ ], n0 p
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
& t4 F- H8 T. d& V6 \MCASP_RX_MODE_DMA);/ O: J  q- [8 @% ?% d1 w+ ^
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,! `1 U, N( d( M- T9 h: `, H
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */( M% w' C% ]$ z5 v0 z3 t! t
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
! G7 A  \# @7 D5 C) kMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
" n4 a( J1 O* E# a0 t# A. k+ \8 D* oMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
" A/ c; q0 Q, G3 kMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
. X+ L4 @1 A( D" m, }5 z' S# C8 V9 GMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
* P% G9 e8 y) h% PMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
. q* Z1 E, z; r$ _6 n5 TMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
4 _$ c3 {- F$ _9 g) r) p, N0x00, 0xFF);
/* configure the clock for transmitter */- Z. t! P4 ?$ T1 D4 D
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
# `; X9 p5 x$ P4 v: m& qMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); + J% D5 @) P+ @1 z
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,) ^( C. U4 t" ]! b- y
0x00, 0xFF);
2 Z- k* z. c* T
  ^' k6 c  B# K" y/ R+ t% L/* Enable synchronization of RX and TX sections */ ; s9 x0 o8 ~2 Z$ b% g6 a
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */+ L) j& S% T& e, |; K0 W
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
3 R  A. q3 {. g% _  |McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
2 [7 e0 F# N5 G** Set the serializers, Currently only one serializer is set as0 y! l' y) n2 I3 V6 p$ u
** transmitter and one serializer as receiver.1 Z5 a9 g5 g$ ]6 k" O) m
*/! K# J0 G/ C# B$ x$ U5 Z( f
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
9 |( K' @/ f! s7 A! g- Q# kMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
) y0 j# R8 A" M2 y1 Q** Configure the McASP pins
! V9 C1 J3 _* [1 U** Input - Frame Sync, Clock and Serializer Rx
% E* \0 v* k/ Q$ M3 ^** Output - Serializer Tx is connected to the input of the codec 6 D) F! i. u& ^
*/
; a! z. z$ J* gMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
0 e8 ]  i5 C8 kMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));- A! I+ w1 l$ ]' j
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
; B3 {* j) [7 p4 X| MCASP_PIN_ACLKX
2 Q0 Q! y( X/ K$ V2 Z| MCASP_PIN_AHCLKX7 t1 i0 L7 l6 p4 o
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
: ^4 i/ G( v: H4 B4 E! VMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
2 \) h) L+ A1 j7 K2 D, V| MCASP_TX_CLKFAIL
7 I7 f; x, {2 v8 h| MCASP_TX_SYNCERROR
- N1 P8 o- Y; H, G( L' c| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
8 e/ P5 J5 b+ p1 J& `" l| MCASP_RX_CLKFAIL
  @+ v8 b" d$ o( Q: ^| MCASP_RX_SYNCERROR / N. j+ H6 s) P5 Q" {
| MCASP_RX_OVERRUN);# `; B& R, A. n: c# g% ]- w' Z7 V
}
static void I2SDataTxRxActivate(void)" t5 X3 p. b6 S3 [( a; D$ ~
{" ?1 X, l3 `% g8 P: o
/* Start the clocks */* S7 d/ N8 m. Y7 ^
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);! O) w) g, `$ X8 N" |% L% {: }
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */3 R# f! S: v# F; Q' u+ @7 h
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,& p+ C; U# V+ ?7 C& W3 c9 n
EDMA3_TRIG_MODE_EVENT);% {; a& _" `& C
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
! `& k: E  T, }& {% S$ w1 A& _EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
2 m; x3 S2 k. F1 \/ NMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
$ _2 `# o# y& e- t$ YMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
4 C: T+ R. X9 p  \5 {while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines *// |, v6 L0 z# o  \/ N9 y
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);0 g  j0 ?+ R& W1 ]
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);  s. ?( X" T: ^+ G' d; X' N
}

1 {6 V- i( z6 X; r- n
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
2 r4 h/ n0 X: o8 p5 i* m





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