嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,' W( G3 b- q0 A9 q
input mcasp_ahclkx,
+ Q8 j1 F- G0 ?1 l1 Y8 ?# V6 Tinput mcasp_aclkx,! t# h% H1 o6 V# w3 g
input axr0,
  u0 a  b, b7 l0 }! w
" A7 ?3 z; k8 ]% woutput mcasp_afsr,, i/ B5 d5 h9 B/ f* s+ V- |
output mcasp_ahclkr,
1 O4 X5 r) h  Q& {" ~1 Noutput mcasp_aclkr,
) c6 e7 l4 A; t6 ]% W4 foutput axr1,
; i* `* G5 }5 s% L+ _  e
assign mcasp_afsr = mcasp_afsx;
) N+ x  j; i( L6 ^0 m( [assign mcasp_aclkr = mcasp_aclkx;
0 y; V- [/ }/ l) N( E9 f5 iassign mcasp_ahclkr = mcasp_ahclkx;0 g, ]& E- n3 K. D8 N: b
assign axr1 = axr0;

& Z7 z' E  P2 [7 b& c4 Z  s6 ?" P* z( E4 S8 v4 G& X% Q8 |4 F
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
( G; c" W* ~( T+ a( E
static void McASPI2SConfigure(void)
& M% u" v; G2 {! a5 l6 p3 A{2 M3 F9 t. B" h& I) b
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
# `4 n  O* s, l% l& U2 wMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */2 V. ~' q, M( U
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
* I2 I9 y. Q& P: H- YMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */1 [+ u& L/ p0 U- n# c
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
$ g1 F6 g: N7 ^, q4 D1 xMCASP_RX_MODE_DMA);- \  w2 a& K  B- q" N9 C
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,# a5 X- ?- c+ v& E4 D$ ?5 C
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */; Y- W1 |/ ^- M$ i; f& b" u
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, . a/ m: `3 a# L% b; |! |: Q. d
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);0 W, r' }/ e8 n$ J7 ~
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
9 c2 _0 Y$ ]6 Z& v1 P2 x& jMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */# ~, D' ]. h2 a$ C- _
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
7 o5 M3 n; V0 }9 `+ m3 vMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
5 G' P6 a% D1 a  CMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,& m" k1 r. B- K+ o" N
0x00, 0xFF);
/* configure the clock for transmitter */# [+ C; S4 h+ Q+ H  i+ H
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);- r( s; E, G. z+ J5 {
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); + F( G9 ^& ^7 u$ M) h
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,/ _* A. Z! k$ q' V
0x00, 0xFF);
% T% u0 z( I- m9 _3 y" m0 m4 d% _
/* Enable synchronization of RX and TX sections */ 8 ?/ b6 Q$ {' f" k
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */! k8 C" h- B$ C$ e8 I# X9 ^
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
& B+ l/ V: N0 Q: EMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*: Z) T+ a) A6 [
** Set the serializers, Currently only one serializer is set as5 z( H( |& m2 g% y* X8 F
** transmitter and one serializer as receiver.# a8 U0 P- C: ^! h2 D+ }
*/) y9 @/ [' C7 @: N, z+ J) S
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
, H' |7 y" t6 Y+ O) H! ], Q# rMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*: k" F0 Z5 ^% Z; g, s
** Configure the McASP pins   E. U) m% H; m* L. W7 q
** Input - Frame Sync, Clock and Serializer Rx
; |4 T- f7 u/ h** Output - Serializer Tx is connected to the input of the codec
7 i' r, n) v; w! g  g*/. q1 a  b: j4 F0 L+ f
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
3 s& U+ A2 Y  I4 U5 QMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
  o& A. i+ ]2 |* O! J" G1 G! bMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
' @4 o6 s1 _6 j| MCASP_PIN_ACLKX) o- Y2 W9 a) B! L4 N, N
| MCASP_PIN_AHCLKX
, e0 v4 k6 y. N* [: ^* i' z+ k| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
' T1 K7 J  {) LMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
: M0 Z( C1 G7 C% |) G8 y" L+ r) _| MCASP_TX_CLKFAIL
2 k' I! ]& U' C7 V5 Z$ k' G6 a; G) {| MCASP_TX_SYNCERROR
. e% F) F$ P( t7 I/ e5 ?4 b| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 2 y& f+ R# b0 Y- I$ P
| MCASP_RX_CLKFAIL: L7 V1 ]! G- o# z
| MCASP_RX_SYNCERROR
, N( e9 d% d/ x1 K| MCASP_RX_OVERRUN);
- M6 U4 R% }( O& h& g* _0 }}
static void I2SDataTxRxActivate(void)
/ {: R* K- j8 e{7 K( A' Z. M5 s, }7 x9 d5 M* R
/* Start the clocks */3 c$ P& X' V) r/ b* C
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);7 {2 O$ C$ R  Y% t( A) f
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
* m# W2 r( m, g; t6 Y3 [EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,' b% Y  |7 n% h! ^1 b
EDMA3_TRIG_MODE_EVENT);/ d2 Z# S3 V! y- y
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 5 Y3 b3 L: S' ]* b* Q
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */# Z- `" L: u) H+ x
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);# J6 o5 R8 z$ u
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
$ O3 N0 e' ]! x- r) |! g7 a6 Hwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
$ ^: ~3 q4 {* s( j  qMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
4 q  f0 y  {- v, DMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
& E9 }& b9 [; Y" q' ]" x}

1 V- z! a, p6 l" }6 n$ W/ p, \
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

# f0 F: u9 t# C1 |3 K& X. d




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