嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
+ z' w2 @' P% Finput mcasp_ahclkx,
+ t2 v7 N& y6 U- w) Ninput mcasp_aclkx,. _7 b" r4 R" C
input axr0,( _- ]7 d% [: I, |5 {: M( X8 ]6 ^( O

7 c" d: h8 A/ }$ q; O9 T3 Ooutput mcasp_afsr,
6 `) E# [; L7 Foutput mcasp_ahclkr,! j+ g3 y9 d. R3 ~4 Q/ z. h
output mcasp_aclkr,1 ~5 u% v) V+ y: d4 v
output axr1,
4 Y' v9 W4 L1 s$ E. M# S
assign mcasp_afsr = mcasp_afsx;8 H4 r" e) c  q( J# A& H
assign mcasp_aclkr = mcasp_aclkx;5 H, H1 G) x1 d; t" d7 f
assign mcasp_ahclkr = mcasp_ahclkx;4 n' ]. Y" x6 P) I: B+ b' P
assign axr1 = axr0;
9 }) H! `. \% P. w! n% I
, Q' X) }  u+ I
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

( J# s8 m" E- w6 o6 M
static void McASPI2SConfigure(void)) K$ x$ N" f$ A4 c/ Y0 }3 b4 N. Y
{% q2 H8 Z( Z" _& `
McASPRxReset(SOC_MCASP_0_CTRL_REGS);5 m$ D, [  s0 N% z* a7 T5 _
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */# k  C5 A! i( L- v7 h' }& [- X
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);, Z! i0 u+ A  z; p7 p
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */+ R9 @& \, k+ u, {" L# |
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,9 n, h5 t3 q8 I
MCASP_RX_MODE_DMA);
( `& {  b7 ]: h- D$ D5 x2 zMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,) @' c! S; r7 E6 B0 X5 v, @
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
$ j6 Z1 j! s: |! f' T) fMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 1 M" r. [, ~+ E! O' I
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);+ Y$ T2 }4 i  X; [. Y' z8 D
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, & x& I! d3 A/ p  E4 a. P
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
9 x$ z  G$ a9 F3 H6 D& [' |  FMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);) I/ p* H+ b& m/ y
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); . H4 t( [; J4 ?/ X2 A5 b9 F$ C+ y
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
$ j+ R9 Y! h4 G5 q: Y8 {0x00, 0xFF);
/* configure the clock for transmitter */
3 A- }2 k) J8 {- NMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);  M4 z: t+ p3 }7 U8 \6 @! w
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ' ]0 g" d* R7 F1 I: p' |4 Y* L
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
- q4 j0 d" U$ r+ b/ y3 d+ r) \0x00, 0xFF);% M% U" T3 o4 B$ y9 S+ {( K; F' U
9 C$ K) i, X! V1 h* T! E& \
/* Enable synchronization of RX and TX sections */
# h( R2 Z1 h( E9 O- X+ kMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */7 c* y  e' m. ~6 Z* F3 E. T0 |. u
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);: ]" P+ X) L% g4 R
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
9 @5 M5 G2 b4 E5 S$ h. e- z** Set the serializers, Currently only one serializer is set as
" H* |: X& j7 B4 k! T** transmitter and one serializer as receiver.
- _) @7 ^" w7 Z) H- U*/
' h: E# l3 W: B' v' LMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);% b$ \9 z$ h' ]5 }0 {/ u
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
/ Y! V4 A' j$ t7 l- a8 J** Configure the McASP pins
, O- Y. N* C) W+ ~! }** Input - Frame Sync, Clock and Serializer Rx0 f. U$ {5 g3 n! C3 c! N
** Output - Serializer Tx is connected to the input of the codec
( v, s- O9 q6 r. i8 ?*/8 W, p3 D/ Z( V1 `. U$ i1 b/ J' x: k. q
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
) X! {+ |( x- TMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
3 Q+ j6 a6 K9 t1 tMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX" R3 s$ t) x( x9 G
| MCASP_PIN_ACLKX7 ?% t9 r% V" a+ K0 J! o
| MCASP_PIN_AHCLKX
6 S2 s8 w+ T7 d| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
6 D1 k0 l! L# v1 g( Y$ S" vMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR % H& j: t: L6 O0 G( Y
| MCASP_TX_CLKFAIL " \6 x* [2 g- o' Y
| MCASP_TX_SYNCERROR1 I! N8 ~8 U  O; R) B
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
' Y, s: q4 H9 c3 Z+ r. z, I| MCASP_RX_CLKFAIL' O9 b  s$ l% x) {9 P
| MCASP_RX_SYNCERROR
: y: z% L4 b! v) M% F2 t| MCASP_RX_OVERRUN);
; I/ x% s. n! e7 U+ Z1 Y- u}
static void I2SDataTxRxActivate(void), a* T% _1 [1 E. Y  z9 }" t
{
! ^5 r4 Z2 U4 R& r; c* `/* Start the clocks */  s+ C+ \/ q, T" \! F, j
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
8 y$ [9 F) ]0 I4 l3 gMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */# u# r+ f5 e2 y) P
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,9 K' ~" @4 a; b8 n' \  W/ L. Z+ J
EDMA3_TRIG_MODE_EVENT);" Q; C# E0 M2 r5 E: Z
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ( n* R- d& K+ l) i* W; s) ]% m
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */( H3 L- c# M  w' x, m
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);. [3 F% c2 A  m' `& T
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */! a4 c4 @' y* t! |4 p" \4 ^# `
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
% B2 ?  W( ]7 s$ k0 eMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
+ ?% D# S. s% o  d6 c$ i+ X* @McASPTxEnable(SOC_MCASP_0_CTRL_REGS);4 k1 i% c# {# S4 _
}
. ?. ]9 ?! v  b5 K+ E0 b
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
5 _- s* h! k* g- g5 l9 |





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