嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
( i* L5 P8 o( Z" Z2 H6 X; q& Binput mcasp_ahclkx,6 w6 P1 w# D- x# I1 d4 D/ G
input mcasp_aclkx,
0 j- u! Y, Q0 |7 c# b# winput axr0,
& `' A: c2 Q! c* O* E. k5 Q* n1 C  K: F: s9 s' \" w
output mcasp_afsr,
% R. m3 T- I( v+ ]+ v2 h  R. ~output mcasp_ahclkr,
$ V! j, O# W! Z! d3 Ooutput mcasp_aclkr,
2 S6 x/ q( S& c. D3 A* z! Joutput axr1," Z' z$ P; `$ m$ k: |+ V; x
assign mcasp_afsr = mcasp_afsx;
$ ^5 Q/ H& ^0 ]! Hassign mcasp_aclkr = mcasp_aclkx;2 c4 e8 X) b. d* z) d
assign mcasp_ahclkr = mcasp_ahclkx;0 l( |/ j' `  T0 f' X% x
assign axr1 = axr0;
: H. E9 v1 a% B8 I5 R% B# S

+ l$ e9 k  Z8 A* ?
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

0 d+ {' [$ u- Y8 y- K2 {
static void McASPI2SConfigure(void)- i+ @% |. @, d' p
{
( Y- |' E- w, g, L7 O! E/ mMcASPRxReset(SOC_MCASP_0_CTRL_REGS);& I6 H) g* J) u( J- |0 I) r) x
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */! Z4 Y7 `% G; l1 S- |2 j
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);2 U6 U( q: M; s5 D
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
. q+ C7 f0 u7 M3 M  ~8 E% @McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
) d/ f& j5 N, o% c" W& I4 HMCASP_RX_MODE_DMA);
' U( B2 A2 }# S4 N3 ]McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
, E2 |: J5 a+ o6 E$ OMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
! T1 j& [5 Q# c$ |; B1 [McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
! c/ ?! m. o: V4 K) U0 N, PMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);+ \& P. H- O& p: U6 G
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
& b- n# H, t4 ^* |* }% \6 @/ lMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */  b& N+ }  N7 i0 ]7 w
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);' J' w/ q, v% \* l+ q
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
; Q; s, _7 W0 F4 [1 oMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,7 x  P9 m- e3 [7 |  V. Z8 _
0x00, 0xFF);
/* configure the clock for transmitter */( i4 f# d  N0 E6 V
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);& ^% @1 X# @& M2 A8 }; W5 S# P
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
! T8 T3 ^& q. G# g& b0 ?0 aMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,8 \$ [( x* H9 [6 g
0x00, 0xFF);
2 W& ~* S& h& N$ a+ F% T/ `; x
/* Enable synchronization of RX and TX sections */
* E) O- Q. l& a7 K: Z* M) NMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */$ C8 L. {! B' A4 u. U# h
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);! B6 S) W% V% t3 F* R0 C. _& M
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
' C8 i' S' n3 j! |& s9 m9 l** Set the serializers, Currently only one serializer is set as
8 n. O. ^9 o+ A. _** transmitter and one serializer as receiver.
* a" @, l! S; b" Y6 [*/- d1 J1 A- l$ ?8 L: ~
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);2 h) R  r& a: _' S3 Z" n7 `7 W
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*  E) D4 \/ y! s: H, q- _
** Configure the McASP pins
0 F; c# A' o+ p2 y# _% g) D; S** Input - Frame Sync, Clock and Serializer Rx2 a1 \0 a, @8 c- R2 A- [
** Output - Serializer Tx is connected to the input of the codec
& P9 m2 M$ O5 F. G3 d*/
8 G  D* B( k# j3 }# `$ B/ S% J" |McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);; J4 v1 j4 `8 t6 P, L6 `
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
; M6 d' E0 e7 r( i4 X* e- wMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
& w: `! q, h( L4 z3 J& f* R  {| MCASP_PIN_ACLKX
8 i0 V% q! D% A3 h0 o+ h| MCASP_PIN_AHCLKX9 {* p- I( M/ R8 z2 ?) p+ Z
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */- Q+ n6 h+ z' J2 L
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ) l3 S5 ?7 N  X: @
| MCASP_TX_CLKFAIL
" P3 ]/ E( L7 P5 X! l- @| MCASP_TX_SYNCERROR
/ B+ e# D( i, e) e8 a8 d& j( X| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 9 b, t; q1 u8 E' Q5 m& b
| MCASP_RX_CLKFAIL
% Q* }" v# U7 Q% C- C! z  b* O| MCASP_RX_SYNCERROR 8 o( g" y" z/ e% n4 ~# H
| MCASP_RX_OVERRUN);
/ |" r2 P5 ^" c}
static void I2SDataTxRxActivate(void)
' d7 S% G: ~" u% X- b5 X{
6 P/ i1 m6 b/ S' u8 f9 R/* Start the clocks */
4 j. {( M& C, K; L, W5 P, KMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
) R' g# x# q, M: j( tMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
/ e- I: K& ]/ M; s# p2 `/ _9 cEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,/ b* w. E/ c! E# |( |; X
EDMA3_TRIG_MODE_EVENT);, x% ^) i  J- p) w1 \: q, n
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 6 \% w$ M- {0 g! P
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */+ V: _' ~2 x' Y. l
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);+ e- J9 k/ Y* L
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
. i; X0 N3 e$ U) L* U1 Ewhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */+ W2 _+ ]7 |$ V% E! m) {  Q$ v
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);5 Q0 t* z5 }/ s' C$ d' b1 i
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
6 t$ j8 |4 U) ~! e& W/ S2 F}
+ D: x0 V' N/ N! N) y6 f2 }
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

" C1 n' q. y! r( X$ h: r. ?9 D0 E




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