嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,- ^) z8 ?6 S# |) j; K
input mcasp_ahclkx,- m/ y* f9 g3 n# Q* ~: g
input mcasp_aclkx,
+ p; v( o" k* z: H0 Binput axr0,
* r/ l( y" B" r- \0 E3 O( K0 g0 k+ g/ J4 V8 J
output mcasp_afsr,
) b% l5 V* z/ H7 `% b- noutput mcasp_ahclkr,# [. J% ?3 X" [, C2 c2 f0 ?. [* N
output mcasp_aclkr,
0 m- p# f1 W& K- r3 n$ aoutput axr1,
6 a8 x* X4 ^# G& w. U$ {( P* {
assign mcasp_afsr = mcasp_afsx;& i, h9 r. \( z  W1 d
assign mcasp_aclkr = mcasp_aclkx;
: t3 R# W2 C7 G( aassign mcasp_ahclkr = mcasp_ahclkx;
6 Z: w8 _7 D& c8 ?/ S9 A) Aassign axr1 = axr0;

0 K. C7 m( d' A3 y% A5 w9 S: T; n8 x
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

9 |( \* g+ W3 r0 W9 Q
static void McASPI2SConfigure(void)
* p, H$ E& l/ F3 a: B' c) m{3 r5 {1 I/ _1 X* y/ `
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
; P! V$ }% N8 k' F* WMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
6 e0 A! w5 s- k! e* M+ E4 oMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
9 [! P5 j3 X, }McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */8 X5 x2 D( @, ?% t2 B6 C' i
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
% E1 B9 j7 |7 x  |( P' xMCASP_RX_MODE_DMA);  i+ m8 S6 P  X  I# ?: o3 y# m1 z
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,) K" {' l" J8 U# D" d# |
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */2 [" R* y  G/ a9 X5 V" z  y7 U
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 7 I! O3 }+ B! Z& M
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
. t( |5 A0 I5 b8 K0 \McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, / B8 X  Y7 z' a: ?- `, c; T
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
4 N1 k. q6 u: k4 O; MMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);% ]; i* F* v2 X8 ]  `" n; M* B
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ( [* G% g1 S$ V5 `! M# y2 a" |
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,: j4 d$ I! H2 u# `9 t: F
0x00, 0xFF);
/* configure the clock for transmitter */) ]3 E1 }  q4 b4 s2 }, [
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
: J$ u, O% I6 N, N* f* y3 LMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ( k0 w# ?: g! u2 j* |* }
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
$ {/ P5 K8 `. z0x00, 0xFF);
) g2 B2 Y4 F& y  t8 F: O
2 P  N% L( K( w5 x7 u* p/* Enable synchronization of RX and TX sections */
2 E/ ~1 j9 F  v4 n6 AMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
- U+ }) b% x. z- Q. O- N* QMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
. S  C) e+ v# }+ ?! g, {  @McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*, y+ L9 C1 F* {2 |% \# B0 o" Q
** Set the serializers, Currently only one serializer is set as
2 P/ ^/ ?3 F" T! P" J& f** transmitter and one serializer as receiver.
3 z: j) ?. B3 ]- L# a2 O7 V*/- \5 T3 _4 Y" E: I0 M8 W. O
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
# z+ z; ?! b' {+ \0 L1 _. @McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
0 b- L) B- `* w& k5 A$ T  r** Configure the McASP pins , [) n9 ~1 s4 j$ v# F1 B5 O! u7 W  P/ d
** Input - Frame Sync, Clock and Serializer Rx
# R* g- t# o! F( m5 S** Output - Serializer Tx is connected to the input of the codec 9 k( X" V+ j. a% {- j* W! X
*/
  P& e0 f3 \& a7 z5 K: L* WMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);  w5 d  u1 }( Z+ g2 o: s0 L8 ^
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));+ X. ^! x+ E0 o" \4 d* ]4 F0 d
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
' Y; \- K1 ?" _1 B| MCASP_PIN_ACLKX
$ ^* t! ?6 |' f. D; Q0 J| MCASP_PIN_AHCLKX- S+ x7 X, p$ x8 d: v. X2 M
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */5 ]8 k  [* ^) s! _4 y% Z9 E4 u
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR , M$ P, h) ^0 t! S  ]6 A
| MCASP_TX_CLKFAIL ; q* W3 v5 `/ u) V+ J, `
| MCASP_TX_SYNCERROR6 U& p- r4 F2 E. J4 F- u- j
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
. R: m$ l2 r: {9 O: a- @3 V| MCASP_RX_CLKFAIL( n/ i/ ~' H/ Z; t! J, t
| MCASP_RX_SYNCERROR ! _% A9 L3 v& U1 M, r
| MCASP_RX_OVERRUN);! x1 h& _1 s# C% h
}
static void I2SDataTxRxActivate(void)$ v3 [5 Q+ F& {" N" W
{
3 m/ @) g3 {. C* J* B/* Start the clocks */$ H+ d9 ~0 C  o: ]# \2 \2 q1 O# I
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
1 x6 }6 ]( i' G, ~) bMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
, l8 S: p0 V# v* a( z* F) GEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
) H* B( l, t( ]3 E# U; z( Y! gEDMA3_TRIG_MODE_EVENT);& M7 A; k' i3 t  ]$ D
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
9 c6 N# p) X9 {2 D1 H' G, CEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */: }. X; o- V0 }% z0 `! B
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);% u4 g9 ~; s! o4 j
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
& f- Q0 d! i# @6 e; jwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
3 C; t5 K) `* AMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);* ?+ y9 q2 a* C4 X
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
0 }- V+ ~( v, I" Z" [}
8 S+ T* [6 \( n
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

3 d: T! u/ c- W




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