嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
6 s1 H& B; G& [$ F* P/ v; ~6 zinput mcasp_ahclkx,3 i& ]8 K. x: _6 f) M1 d/ T
input mcasp_aclkx,
$ |, \0 V( ?1 P2 W+ ~input axr0,* q$ U1 [# q' ?( l) v( @1 y+ I
7 [0 V% {0 p/ J4 i  j3 |0 R+ T
output mcasp_afsr,
7 a' E/ {6 R; O5 d9 {output mcasp_ahclkr,
  N8 J; I5 ]: s9 q; J/ zoutput mcasp_aclkr,
1 T; J! A5 V6 N0 Z8 ]  l. Q% z. }  Ooutput axr1,
- J' U9 k$ I1 {- K
assign mcasp_afsr = mcasp_afsx;
/ W: u3 x! L7 X, k9 m  l! Xassign mcasp_aclkr = mcasp_aclkx;' p& c, D% D/ I% Z8 P3 `( v
assign mcasp_ahclkr = mcasp_ahclkx;: r4 j8 x+ C* `* A5 T: I
assign axr1 = axr0;
1 ]% L$ m( f9 V- x% v% |

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

( q' P' X6 \$ _0 {
static void McASPI2SConfigure(void)7 l! _) V5 E# J8 ?/ h4 j! ?4 p
{5 u5 S2 n) N. Q4 p$ W% S  i' \) x
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
  K# U; q0 `4 g$ \$ nMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
" l/ f0 t! j. d. I( IMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);$ Q1 W6 C; {( W: j3 V. L; W
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
7 P; ^5 O# d/ VMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,# L; Z  s3 C. D
MCASP_RX_MODE_DMA);
( R7 w8 \; g6 m! `/ |/ @$ RMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
) m' ^  y- g: Q, i9 D* ?6 i' QMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */% ?$ c- ?' Y/ ^
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
9 P3 v6 m) S3 z1 x; Y; |MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);; y, ^0 a! s. t- [3 `$ q. T: v
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, + S. y" R- x1 p% M1 z$ u
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
1 m5 Y' a1 `3 SMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);/ Q4 O7 S% U( Q8 w+ A+ m5 n
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); - V/ e0 Q) |# Z
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
- w7 r$ V& N) x; L$ R* b0x00, 0xFF);
/* configure the clock for transmitter */* C% x9 T+ {3 i  [4 m' D
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
$ Q" O# ?8 \' r5 K+ U7 mMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
4 Y8 _/ K# m, i1 E) M$ L$ n4 yMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,( K7 V% [+ }% p8 l
0x00, 0xFF);# m4 t# X6 r3 U) p
8 L5 ^! O6 Z$ u2 b
/* Enable synchronization of RX and TX sections */
$ f3 ^* \. r, L( XMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
+ r) e2 S! z% _7 V% DMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);1 {  c' J9 r) v) k
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
$ D6 }* f: y+ P& X& J4 S** Set the serializers, Currently only one serializer is set as  N( D( H6 Y( Y* V; S
** transmitter and one serializer as receiver.' H5 C; N, d7 [4 n+ _; M
*/. z+ A/ Q+ j9 `; O
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
9 |7 Q" y2 l  _  ~& P7 d- iMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
' g& U9 |2 k2 K- E2 D8 f** Configure the McASP pins 6 S3 `" }3 N. Y+ z
** Input - Frame Sync, Clock and Serializer Rx
. I4 N) {$ m& D8 J3 V** Output - Serializer Tx is connected to the input of the codec ; U$ _2 L5 L+ J1 ?! k$ T; I
*/) C! ^. F5 j: G3 P8 l; F* N- y1 o
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
- T* e5 P" S  i& D( \  D% mMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));; q0 T( v& @  d% |
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX% y# e; Y- A; G" T) j& P( P
| MCASP_PIN_ACLKX
4 f6 W. p( _+ P+ i) I| MCASP_PIN_AHCLKX
6 u; W! k$ _5 [! Z0 i" ~' W. \| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
$ r  s* I0 E3 {- BMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
9 e; Z3 n% ]! K  f| MCASP_TX_CLKFAIL ; e5 [+ \$ `* h% I1 `7 Q/ e' z
| MCASP_TX_SYNCERROR
8 }# L3 y3 T5 z4 t1 H| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR " g7 Y+ p: ?' ?
| MCASP_RX_CLKFAIL7 c& _- Q* z0 t" m5 a& ?+ j0 c
| MCASP_RX_SYNCERROR , j2 ^+ d/ x# H
| MCASP_RX_OVERRUN);- o# D  W  o" W' y
}
static void I2SDataTxRxActivate(void)4 L8 K1 v: n8 o1 Z' b$ s" Z- _# ~
{# ~: i0 [" Z: t& \3 r) M
/* Start the clocks */
* C3 T- I  |" S0 i4 F4 F  ^' qMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
, y  [' ^" ?9 A& E8 PMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
9 B# g: Z6 o+ S( [% zEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
1 K' |8 O) R$ K0 `; Z! `' L# l; z' ~EDMA3_TRIG_MODE_EVENT);
) E; x& g  y5 ~, U0 JEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
- F9 r, P- \* T: }( ~EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
8 P. H. q8 }+ PMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
" H7 C* O9 \" s- q- ^' OMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
* x( f0 ^& W- p% h- h( Q( Zwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */2 w. F& C/ d. u
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);! J- R/ E) ^, O4 M0 I: c5 v
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);, _' B8 |4 A1 K6 J
}
9 r% Y* U0 y6 a
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
$ j: f7 c0 f$ v0 p





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