嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,' A0 l7 P! p+ P6 ?- L5 m
input mcasp_ahclkx,
9 u' Z9 V+ S/ Jinput mcasp_aclkx,  d4 J  A1 T+ d" O' k( ~+ P
input axr0,8 ^0 k4 R- ^* ]- x

- l+ b8 K" I4 Poutput mcasp_afsr,
' @- u7 H4 J5 p% Ioutput mcasp_ahclkr,
) K8 @9 w: a2 D2 X! r) |% Xoutput mcasp_aclkr,
; s5 ]2 [8 v9 e" moutput axr1,. V, P9 Z- J3 j; z0 m& ]$ D
assign mcasp_afsr = mcasp_afsx;
& W/ E3 O0 v" }$ \3 passign mcasp_aclkr = mcasp_aclkx;
9 ^& j- i! B9 g9 A$ k- s9 L7 Qassign mcasp_ahclkr = mcasp_ahclkx;/ ^% A4 ?: }! b% K
assign axr1 = axr0;
# q- P& N* k! Z4 p3 p- J

: f4 |' Z5 Q9 u2 Q" L
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

2 k3 h/ f7 Y, X, m9 s( |
static void McASPI2SConfigure(void)& p1 \/ p2 M# O. ?1 G. i& [9 _/ H
{/ X) @/ A: P2 m3 r# `( o- j$ @
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
3 O; V, G+ x5 C7 M* w) [# mMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
2 d6 F4 C. e0 i7 N8 wMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
- x' F9 i5 o2 ]' ?McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */4 |8 u5 Z4 A, x5 j
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
( j0 K5 g' V- [: QMCASP_RX_MODE_DMA);
; n6 g: j) _7 a# t: Z9 lMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
: g* A) s+ p; D% @" U: x* aMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */" v- @7 ^2 s. O" |
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, / ]  o; f. R6 T) b
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
, Z; Y8 z5 p" u  k4 l# FMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
% m% I- T) K; \# [MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */1 L7 `2 q; z8 B/ u0 e1 S$ W9 S
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);# @) }0 n5 N. _3 I/ A# `! S
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 1 D! U' c4 D6 l, E- E! K6 I
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
6 p4 f' d; N' X9 Y9 v4 p0x00, 0xFF);
/* configure the clock for transmitter */. ?' Z0 E! Z* O5 Q0 y/ l
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);7 G# d* W2 n& b; X* U( |
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
) V' R2 D# P0 t/ Y  Q: D7 GMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,( x( E2 `: s2 b. g, t; }
0x00, 0xFF);8 ]% U) u4 ^% d
. ], `; S7 I5 I; f1 Y2 n
/* Enable synchronization of RX and TX sections */
5 {2 G0 g+ Y  O" l, I6 k2 \7 JMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */, k3 V+ r# ^6 G! ^
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);- U* X4 J) Y$ n* Q- q
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*- J- _- M! f9 Q. y! j2 I
** Set the serializers, Currently only one serializer is set as9 K7 d: l1 B' {- t
** transmitter and one serializer as receiver.
4 K% ^: S+ J* E+ }/ L( L' }*/8 _$ X8 ?; [$ J- ?5 i
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);1 |3 i: o6 q  j/ B
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
" R/ q3 A* g# r** Configure the McASP pins
- Y& M4 X3 I* p1 C** Input - Frame Sync, Clock and Serializer Rx# [, A2 Z' F) ^) H
** Output - Serializer Tx is connected to the input of the codec 0 n0 u  y% _7 X" _9 k7 V9 F' e
*/
" L; J2 Y7 [- aMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
! ?* _" B% D' g/ U1 PMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));/ [5 p5 J0 M2 C* Q" B5 {. @
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX0 z1 z) c6 s' s' k0 b7 u/ Z4 o
| MCASP_PIN_ACLKX1 ]! I% l/ A3 B4 P2 F1 V/ C
| MCASP_PIN_AHCLKX
1 ]2 L( p2 [' E- {& Q4 T| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */: I2 ^" z! t+ t+ h, k% g
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 4 V. O+ L# U/ g7 X! c8 ?
| MCASP_TX_CLKFAIL
! N' o1 G' ^- k8 [$ v| MCASP_TX_SYNCERROR
; F8 E3 X3 s/ H/ c. I% ?0 ?) M- p6 n| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR ' j" w1 O; k( o' w: f) Z  z% h' u
| MCASP_RX_CLKFAIL
' l  ?3 A- [) p- h1 ]' \| MCASP_RX_SYNCERROR
4 s8 i! j1 K( ~9 @# b/ i| MCASP_RX_OVERRUN);. ^: J9 i' z' ~) A2 N5 O' E
}
static void I2SDataTxRxActivate(void)' y- |$ M, O9 K  V* M
{
% S) g. X# W9 t: N1 M7 V/* Start the clocks */9 h- G: N4 l: U6 g$ M4 o$ \, a0 t
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
% x! d) h* a2 d8 R' jMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */4 n" T$ R; e0 k9 j% K% a
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
/ R1 ?5 V; e; l5 f/ G" t# m0 \EDMA3_TRIG_MODE_EVENT);
, Z/ J5 W3 C- R0 QEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 0 P( q6 G3 M% `, y$ x4 [% h
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
1 E1 |- L$ l: n6 gMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);8 ^' d; T5 B: ^# ]' }5 Q: k
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */' T/ V. u  U1 T9 E. F
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
. R9 E0 ^7 N. E9 J- t; U. ~McASPRxEnable(SOC_MCASP_0_CTRL_REGS);0 U+ ^3 V7 A; a1 D5 y: D- I
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);8 B7 n5 ^2 P& Y$ G/ D
}

9 B3 R- V1 X' i( g, v: O- @
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
2 ~' j2 f9 t: V" R5 \





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