嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
( Z  H' v% s+ ~( pinput mcasp_ahclkx,
9 `, A  R- Y+ u  einput mcasp_aclkx,6 U7 ?. L# y/ U6 P5 ^
input axr0,' C6 G+ g% c# J3 ~

% v* t% L0 W+ t- Routput mcasp_afsr,3 N, O! [, D$ M, f2 l7 A1 d3 Z6 e
output mcasp_ahclkr,9 q3 ]( v/ B/ e
output mcasp_aclkr,- k" ~8 U$ @: T3 ~
output axr1,
' S# t' K7 m& }
assign mcasp_afsr = mcasp_afsx;
% n9 q/ L& t' g' R( e$ o9 `assign mcasp_aclkr = mcasp_aclkx;
7 s" ?& W5 e# T3 q8 Passign mcasp_ahclkr = mcasp_ahclkx;
2 p+ |2 V# c2 _; M2 Cassign axr1 = axr0;

/ j6 }* A: B& h9 X9 L
3 W4 S( A$ z) b8 Q& ]! U
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

( J2 k3 {! R8 M3 _1 [0 @
static void McASPI2SConfigure(void)* w: U4 o. l2 h% o
{3 R! {. X8 W$ y/ q0 w& o- I% ]" I2 f' c
McASPRxReset(SOC_MCASP_0_CTRL_REGS);% x9 o6 }. V; T
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */( x# H) g* f- {1 M7 s: J$ Z
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);& R' D  m7 a! n, R
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
  T$ B6 |$ h  n4 Z/ qMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,8 d9 o- _% v; z0 ]
MCASP_RX_MODE_DMA);# P9 Y+ P6 t9 F. e+ N
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
' I6 J! j) C5 R+ o& l2 u1 h# K7 i6 iMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
% x2 w$ `# f9 g2 CMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
- d( ]: M. v8 o! h1 F/ bMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
5 Z( w6 U0 Y( o8 A) [6 F# ^McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
& p+ r. U: J  @" [# AMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
* M3 r% A4 p) B9 P: \% R6 R7 ~3 H" SMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
' A7 t9 @' ^$ H, G1 PMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); + `' \8 o( M! K4 \9 l
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
- Q7 o! {$ C: @$ C2 ~  Z7 V. O) Z0x00, 0xFF);
/* configure the clock for transmitter */
2 G3 F) X# @4 Z6 g3 ?0 GMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);# B  ]! X0 b) y% u
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
* c& M/ u/ B; ]* oMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
, H5 j& o& u6 d) F0x00, 0xFF);+ {0 X0 O0 [" d5 o% O

9 J# ]) c2 c$ V+ d7 a5 z9 w/* Enable synchronization of RX and TX sections */
$ D% c! l7 L3 C- LMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
- v. n' e. }# {* r4 G( Q2 C0 [McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);# P, q. R8 Y% X
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/** Z+ U1 g4 q( ?* w  o. ]
** Set the serializers, Currently only one serializer is set as
; B! z+ A, T, d0 \1 y. q** transmitter and one serializer as receiver.' f) b; c$ r& a  `( M- b  B. p! c3 o
*/
3 p/ @6 \, V* _: U; \/ V/ k( Z4 UMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);1 ~% f/ c1 |* [2 F+ @3 a; d
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
( y7 E# y) `% J** Configure the McASP pins / _" s' K, c4 }! _( h8 B3 I
** Input - Frame Sync, Clock and Serializer Rx0 [, b7 j: j! [/ X, D; u
** Output - Serializer Tx is connected to the input of the codec ) H- ~7 P; i4 V) ^( j8 T( E
*/
& Z8 [. V, t$ G, S& ]+ Y( ~( OMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);4 m8 @: \, c9 J
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
5 x1 [1 Q- e3 P+ aMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
  b4 Z# L! T) `  z# y  E6 o- E. m* f) E| MCASP_PIN_ACLKX0 K2 G2 M6 g! r6 m9 v/ f3 k8 a
| MCASP_PIN_AHCLKX) q0 W3 z( R! y( R9 o) b/ N+ A
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
4 J6 ~4 ^0 ]9 `6 p: }: f- Z! bMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
& N$ s; [1 B# s; v- Q| MCASP_TX_CLKFAIL . w+ b* I7 {) _& O
| MCASP_TX_SYNCERROR
0 G0 S9 R! f5 G* Y! x| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR + N/ F& f9 \  `
| MCASP_RX_CLKFAIL
/ J; |* Z" R3 A1 ~0 z8 Z| MCASP_RX_SYNCERROR   ~/ ~: ^5 D% B+ R8 z
| MCASP_RX_OVERRUN);
" ]: Q7 F, d( C8 ~$ h9 ?}
static void I2SDataTxRxActivate(void)% @3 ]: P4 C- ]8 I
{; Z5 F3 A) W( s! ~
/* Start the clocks */
. B. l6 j1 Z3 i7 R& C! uMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
4 \: ?! Q6 ]7 F5 }% @. lMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
7 A7 X& t$ u$ `7 B; b0 \EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,- K# c5 F$ r0 p' S3 P3 G
EDMA3_TRIG_MODE_EVENT);* Z5 \* k- C) u0 T, g
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, * D' V  g5 q7 q% A4 K' @5 E
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
# a6 V, \1 d5 _0 d2 X) e! g* IMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
$ T, v8 I2 I4 J: |& m- bMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */$ w, d( j5 ~( X2 Y: e8 c. R
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
' o! s. g  i5 P! N  |/ P- L$ T; oMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);' q' b# b6 p+ U' k
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
% e0 h+ {/ N3 W- y. F& u3 ~5 ^}

6 [3 G; _* P; o/ V5 R7 m
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

2 \$ [, S8 H: W: N




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