嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,% n* a# [$ K: J# O- Z* ^; a
input mcasp_ahclkx,
- W6 A  c/ a6 m5 }input mcasp_aclkx,
! a* w) F% X) T8 C) n- {- iinput axr0,$ F1 d$ m2 [! j) f1 ?# b. @! E
: M3 {7 v2 @' f" H6 N( D
output mcasp_afsr,( S% t; x0 N& S
output mcasp_ahclkr,
9 r. m& M; l! s& G  ]% A6 Noutput mcasp_aclkr,
" ^: p9 Q; [) }# b  `) y2 J, V! t+ Zoutput axr1,4 w8 y7 w% }; u% |! J" {# Y
assign mcasp_afsr = mcasp_afsx;! H# ~! W4 {7 [+ E9 w1 g( e
assign mcasp_aclkr = mcasp_aclkx;2 j" B9 M  a8 w7 c3 m
assign mcasp_ahclkr = mcasp_ahclkx;
" e0 {- m8 l( R" [/ Cassign axr1 = axr0;
$ d+ o+ v# l& d6 F0 I1 B

7 p" \5 c# I& S
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

1 V2 o6 w# q* N' F1 M4 s
static void McASPI2SConfigure(void)
' }! O# Q% \5 I, ?  ]{# ^# i5 z4 E( a& D, F# |' [+ A
McASPRxReset(SOC_MCASP_0_CTRL_REGS);' E2 Z3 X1 v2 [1 g' M
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */5 c) G: I7 ?/ w9 e: w0 _
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);0 a# \$ b' M( f: e; g& P% m) f
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */. ?+ O6 N  v) H  z- W" r* y+ A( ?4 U
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE," ~7 r+ t% e" k+ I  N
MCASP_RX_MODE_DMA);
' ]5 _' S4 F& |. b0 U5 G, SMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,# g5 U0 r+ {  n, @, T1 W, P) y
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
+ W2 N' N: |7 A1 Q6 r0 r2 NMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 2 M% H# T* F5 F* t4 ~2 [9 u
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);8 w# D" C' ]( o7 @# n+ L
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 5 V; n9 J) M0 N% Q/ O+ t; J
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
. n) R& [- u3 w4 |1 C5 aMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);) d/ `0 ~6 |1 q* b) s2 q8 t1 F
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
. A( q3 k  X  q& gMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,8 L. O2 E& P; h: h
0x00, 0xFF);
/* configure the clock for transmitter */
+ l( `, G6 L) e* {; X/ @McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
% |, U# K+ W! Q5 U& m7 ^0 z, ~McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
9 o8 j2 B; g" c1 h9 _* zMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,0 g* t- u* N6 ]8 T0 F( G
0x00, 0xFF);/ n0 z( `' e4 X" }

9 e% c# P1 G9 W. f2 G( C/* Enable synchronization of RX and TX sections */
4 o  k0 o: V9 T" U: oMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
- L1 v* r- ^: z. v; VMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);3 |, M3 U4 z+ p8 ^& I+ p6 ?' [
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*1 ?; R1 U1 r! ]( V: D8 a0 p
** Set the serializers, Currently only one serializer is set as
; {( H7 |# ~+ K6 S2 |, |** transmitter and one serializer as receiver.
+ p9 u6 Q' V4 O3 e2 p! h*/
) Z3 {7 M% {: P4 I2 ?; w+ f  G* YMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);  B8 l0 {" ^. o: b
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
3 J* _% N0 o5 k+ Z0 Z** Configure the McASP pins " Q0 |) Z, r* ?5 l$ r1 F5 R! P
** Input - Frame Sync, Clock and Serializer Rx4 ?( A( j* V7 E; L! K/ A4 q
** Output - Serializer Tx is connected to the input of the codec $ g8 I) g$ h, P4 V! x$ r
*/. o6 _- w. a& ?
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
( J4 i7 t" f5 n- |6 d. ?& LMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));# J  p2 c2 W; a) m
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX0 R1 c& N4 p0 I% e5 F! ^
| MCASP_PIN_ACLKX: _2 j  O+ h' S' f; Z/ {4 @+ N9 J  A
| MCASP_PIN_AHCLKX* I; w8 V' s; h8 Q
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
6 c/ y; s9 q& X  W5 N& D. _McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR + Z9 m+ b: ^1 c7 w# l
| MCASP_TX_CLKFAIL , a; o3 M; [) Y3 |2 J) |
| MCASP_TX_SYNCERROR7 G) U) a9 l. r
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR . c) y# q: r" H: j
| MCASP_RX_CLKFAIL; ?7 \1 r+ a; N( U6 i
| MCASP_RX_SYNCERROR
* d( P+ Y* I  q5 g6 \4 y" p( I| MCASP_RX_OVERRUN);
+ }, Z3 ]8 w1 P+ b' S! \}
static void I2SDataTxRxActivate(void)2 {! J5 @9 G5 U% T6 w
{
' ?* j; K# f4 ^8 u7 i- q/* Start the clocks */
. ?: j3 {; G5 E6 sMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
# K: z( o3 W) D  g; RMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */( x1 P3 d$ w' C
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,2 _* O  [% g" v7 u' I% ]
EDMA3_TRIG_MODE_EVENT);  p! S4 b# V0 y
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
4 ]1 U3 S; A* X* ~2 d) bEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
  \: g  j) d: e6 Y) s8 {$ Y9 ]- {. Y8 k% dMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
% r8 @2 D9 }4 Y5 f( PMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
( i( P/ Q4 e- Zwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
9 t4 X/ I0 i; O3 HMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);; }/ Y7 V" p4 S% |! r7 t
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
) q" N$ W) ~$ O}

3 J7 S$ }+ `; B
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

; s" J5 d' \% F' z




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