嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
0 |5 T1 U( k; M5 k( l: k# `input mcasp_ahclkx,
- [4 l% \0 o6 k& A* W8 l8 ^# g- ?input mcasp_aclkx,2 C4 ~( d! X  t6 q3 H
input axr0,
, l4 C1 G3 d' O6 B: Z" M
( D/ j0 \: P4 |* P. D) K4 i4 F' P# Voutput mcasp_afsr,
9 p2 _& k9 J8 l+ aoutput mcasp_ahclkr,
; l' e$ F  b! x3 Eoutput mcasp_aclkr,
4 n* m: k4 F3 o; Ooutput axr1,$ ^% z, \8 F7 C+ J' Z- P
assign mcasp_afsr = mcasp_afsx;
$ U# Q8 H- b: b5 Iassign mcasp_aclkr = mcasp_aclkx;- U2 b3 @9 F) d
assign mcasp_ahclkr = mcasp_ahclkx;0 l- H5 @* E  \1 q0 y% `, ^  k
assign axr1 = axr0;
2 l/ v9 |9 X4 e$ ]+ g- m

& Y  t2 z$ f# v4 T" l% o
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
- m7 z0 O3 y+ c7 r) ?- X
static void McASPI2SConfigure(void)- y; r0 b% M4 _! M- {5 ?% x
{
( ~+ b- s3 {( k& T8 q6 JMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
0 j. ~3 s7 q+ Z4 q: {+ q1 s$ gMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
2 W: I# ]; ]  H2 z/ y  O; r: d5 wMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
( _- @- T/ ~3 u$ L' Z6 ]3 iMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */: x) Z, O2 B* `- k8 n
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
, m3 `1 r# ^$ }4 S; ~MCASP_RX_MODE_DMA);! d3 ^+ _: F* t* ]; c- c: T
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,+ R& x: p" B" V+ k1 |
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
+ j$ U0 D3 w$ p. A: BMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 2 `- ]) j5 ~8 l* t% \+ G/ s
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);3 |! `2 o% \* M% W: }; i
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, / a" ~; k6 T# ~! E. I. j
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
$ w3 W6 J" _$ {4 E% T7 JMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
9 W8 K1 R# S5 h) G& n5 fMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
3 P( K9 M9 I* {' B) |# l* g/ CMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,. U& e! w1 l; K, o0 Y2 ]
0x00, 0xFF);
/* configure the clock for transmitter */
6 V8 I, z  M/ g& I, r4 x/ o4 b8 fMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
5 q' e2 l" v* P2 T! YMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ( L8 H' X+ p4 S8 f$ Y/ b. h
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,2 D; [9 ^. E6 l9 R. W6 T
0x00, 0xFF);, G' f' H' q+ O- z8 Q& l

; [/ P/ _' V5 g9 M1 r  `/* Enable synchronization of RX and TX sections */ 3 b% d5 k6 Q+ o2 [1 g+ a
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */7 b  a, x! B7 E" f3 c
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
$ L  M6 A/ _0 b: wMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*$ G: R% g2 T! V- Y
** Set the serializers, Currently only one serializer is set as) y8 q4 V3 Q8 N" ]' U- u; `5 s
** transmitter and one serializer as receiver.- g7 c( [5 \: T5 O1 S3 m. w
*/
  k) d1 k* @& a2 i2 xMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);6 g9 L" e- ?: u# M0 S  X) q+ ~
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*. r7 ^0 T3 R. M- H9 S6 J" _
** Configure the McASP pins ' A1 X( _, c9 r$ d5 Y8 X) E8 A
** Input - Frame Sync, Clock and Serializer Rx
9 ]# n. l9 U3 F" N** Output - Serializer Tx is connected to the input of the codec
, l7 `" U" o: T7 j0 b& z: F" c*/6 H. X% W! W" Q  s
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);/ {' S1 C- t( r9 d8 u
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
# Q! H' Y7 O2 t3 c. }# [) FMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
3 K7 G; Z# y# T' x7 D* _# o& R1 n| MCASP_PIN_ACLKX: F  R# A5 W) L. D
| MCASP_PIN_AHCLKX7 L; ]# h% o0 v6 k5 W( q/ Z
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
3 T) p# U* y! D+ {4 u" D& sMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 5 C' H9 L2 ]+ u7 {5 D. B% r
| MCASP_TX_CLKFAIL
" ?6 |4 W4 f# T4 n2 y( I1 r| MCASP_TX_SYNCERROR
$ s, W2 z7 \7 q" o| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR # C& R! L) `$ D0 S% J& v. t
| MCASP_RX_CLKFAIL
1 p  _7 i" X( F3 @/ t| MCASP_RX_SYNCERROR , E/ _/ f' v. n5 A
| MCASP_RX_OVERRUN);9 I& C) D! Q& D) u
}
static void I2SDataTxRxActivate(void)+ O) h2 J1 P$ k- M
{. z3 w. F1 c6 E' T2 d
/* Start the clocks */' N8 \7 o# t4 ^, |# W4 h
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);8 D9 E; Q) u, x% [
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */$ c4 q3 R0 U% N  O' ^
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
+ `% k6 \) O% z: l5 lEDMA3_TRIG_MODE_EVENT);
! P8 ]: _2 {  w2 B* k1 SEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, + Q6 }% ~! Y9 [, W
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
2 b' k8 V  C; c/ R3 j) u7 NMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);) M4 i# R- a! p$ m
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
+ W& c2 P& A5 @, N% c' @6 F% _4 hwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
0 H% ?- m/ c# X9 |) A7 @/ f8 HMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);6 n2 o' ~( d* I; x/ E
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);% f- K% s: k2 b1 ^* G0 R. \
}

+ ^5 H/ u+ a: G" Q6 F
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

  H: h3 v# r. t% z




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