嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,. _) V# }7 y* ~
input mcasp_ahclkx,+ ~4 H8 z7 x0 X, H( q0 M
input mcasp_aclkx,/ Z: M$ W8 i3 B5 H7 y! R; w+ x1 G
input axr0,
( H- j# U+ b+ u3 V+ N% J1 L" X) X
output mcasp_afsr,$ V. w/ q& A3 ~5 _2 H
output mcasp_ahclkr,9 F) U& W; t; r
output mcasp_aclkr,
0 L% y3 D1 g; m! j$ F* O' X9 S  {output axr1,( _4 w6 C, Q4 G$ V% Y$ z) T9 D$ F1 C
assign mcasp_afsr = mcasp_afsx;
$ }" @, O! I0 p5 w% iassign mcasp_aclkr = mcasp_aclkx;
7 @) `/ X8 x3 _# A% r; W- O$ o  m) D/ Gassign mcasp_ahclkr = mcasp_ahclkx;5 K$ s6 ^0 @: d. H
assign axr1 = axr0;
  x! M: H& c" d7 F0 t- I% ?6 b

, v2 {" X& a$ g: D. E
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

' R0 d+ m- K9 I% {' [( Y8 O! T) ~+ s5 V
static void McASPI2SConfigure(void)
6 w9 C6 O5 i  Y- T+ j% S  \+ F4 _7 l. g" q{
* R# |7 M; M1 [( w- u7 i/ {McASPRxReset(SOC_MCASP_0_CTRL_REGS);
7 P6 L3 E$ E7 g. r. a9 y1 SMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */4 q6 W+ b. [2 t+ I% Z9 v1 D
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
% k9 ]+ B1 N4 w5 e# I$ P* PMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */2 V8 m. w, a7 |9 i$ m- y
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,8 P1 b9 O9 [5 G8 }9 U
MCASP_RX_MODE_DMA);' i% e+ p1 g, U5 Q1 l  s6 I
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
1 B- p( i6 R0 fMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */" f, V, g! T& e% s) g9 {% T
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, , O5 }3 D3 e# C7 U, f( m
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);+ t$ Q: e8 ^/ C3 l7 s& d; P
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
7 ?6 Z, c/ C, m! o2 K7 CMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
5 t" C- h) l1 n0 p7 HMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
5 k$ d* |: J- j7 H$ j0 Q5 S* FMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
! @0 X; O% y+ E% lMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
2 H" t" }" S+ o0 Q0x00, 0xFF);
/* configure the clock for transmitter */0 l# C4 j" F6 I
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);$ i8 g" B, O+ o
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); : t# J; D$ U  K& i$ N4 I
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,  l1 O+ A" [& N" Q/ `8 d
0x00, 0xFF);
# f& S" k/ U) J: A/ m# l- }( f( A# }! |
/* Enable synchronization of RX and TX sections */
8 {* i) J: a5 ]$ V) \McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */# x6 {) Z# s& j! X$ b; c
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
- y2 Q: q" B7 Y1 w" o! Z; GMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*; I$ W' G3 a' ?& |) C- E0 O
** Set the serializers, Currently only one serializer is set as
3 W; P/ l* I# b+ L** transmitter and one serializer as receiver., L" T- q, c" g  i  M
*/1 I; p" W1 T$ G) A4 q
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
6 x1 ^" `, u  a  oMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
' I+ D: G8 o' y: Y+ [** Configure the McASP pins 3 _' [7 ~/ ]8 L+ J5 T2 n
** Input - Frame Sync, Clock and Serializer Rx4 B" U/ ~3 [' X& C) Q0 t/ Y
** Output - Serializer Tx is connected to the input of the codec 2 x( `; F0 Y0 D0 K5 q! G+ \( Q; V5 t
*/  Q6 }& j$ o, e; P
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);% G9 s* T4 a- W- i
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
! [8 t  ~+ u; Q/ vMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX5 S$ f5 D8 e! Q7 L( N
| MCASP_PIN_ACLKX
5 U! ]& H9 P; O. ~! R| MCASP_PIN_AHCLKX
# L6 B' P0 |) \! I1 w) p8 Y9 h| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */5 V- D4 e, P6 T+ {- @
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
# w" n( `2 C; n2 |/ ?+ O| MCASP_TX_CLKFAIL $ B4 l* ^, k+ S! Y6 {
| MCASP_TX_SYNCERROR! l! A) N  j8 Q) E& ?) f6 u7 `; f3 Q
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
- |1 B4 b4 Y, _5 S9 d. c1 e! H( ?7 x| MCASP_RX_CLKFAIL
; ]: w9 U# t: b" `1 I9 R4 W5 T| MCASP_RX_SYNCERROR ) e- j% c5 T0 K) s8 o
| MCASP_RX_OVERRUN);5 T* K0 I& p4 ?' W
}
static void I2SDataTxRxActivate(void)* V! q5 h8 L1 o! |7 k7 C& ~
{- ~( Q+ V* v  w2 ]9 S
/* Start the clocks */2 O3 ~7 ^* b/ @  T4 g6 Y. v5 Z& a
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);2 T# c2 X  [# b5 R6 f
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
% {6 z; r- T5 Z9 y  V7 }EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
  O+ l' d( q% r' z5 A) _. mEDMA3_TRIG_MODE_EVENT);
- j# X& s/ T1 ~* a$ ^& D5 sEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
/ G, h; R$ r5 t5 J: c! r+ Y. k4 JEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
. D- C4 Y8 {! g) |( G2 oMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
! y; u* q$ R/ a6 H* ZMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */8 ^! |+ P$ I$ y  F
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
& Y" W: C9 Q; o3 f; ^McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
4 K; m3 @) _/ E0 iMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
' n+ I2 K& x4 ]4 m& d. q}

( _- H' G, D6 r* R5 \0 A9 Z
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

: ]; E1 v- X( ?* W) c8 p7 B




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