嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,! v7 C. U" b; D3 z! X
input mcasp_ahclkx,
1 J' N @0 p3 V" f6 L" U, p! M0 kinput mcasp_aclkx,
- {& |3 q+ c6 rinput axr0,
1 v0 j4 }1 T( m" R, A6 Z8 [
7 b5 ]$ {5 E" `, I. Uoutput mcasp_afsr,
! e7 o) a* h2 }5 R) Ioutput mcasp_ahclkr,
- X, X+ d/ j! E; ^, C7 j6 q9 Voutput mcasp_aclkr,3 O1 A v1 K9 j( S8 K4 [
output axr1,
5 c: x7 J! q4 J) a
assign mcasp_afsr = mcasp_afsx;
& O" m Z: p. J Q# Jassign mcasp_aclkr = mcasp_aclkx;, m3 s! o# \, m1 d2 m" F0 B/ C
assign mcasp_ahclkr = mcasp_ahclkx;
; c9 Z/ c- d( [6 tassign axr1 = axr0;
5 Z$ R6 i6 q6 T. ^' m
3 ^& E" }' H2 A; b/ T! Y' |( g9 a
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
; i( X, l/ g/ H) V
static void McASPI2SConfigure(void)
1 ~; B- [! U" o3 x{
/ S. l+ D# P8 q4 t0 J* z$ |* A4 F) yMcASPRxReset(SOC_MCASP_0_CTRL_REGS);* H# R/ k) s: Z3 i3 s {
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */# w: e4 z4 ?* K6 A, W
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);) i# Q1 I3 L# d
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
* w/ X. q: F2 DMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
, R* H4 l0 e$ M- t0 v, e' nMCASP_RX_MODE_DMA);
3 ~; t+ Z3 ^9 Z3 b# ~( z r' n9 pMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
3 t; L# I% Y W! qMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
; I! ?, K9 R8 n; h8 z, J- ]/ QMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, O; B) e! N* d6 L/ h8 D
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
% ]+ Y& f" W* t0 ` ]; N/ Z, B9 YMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
. e u) p! I: E7 j1 P! [MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */5 W+ b8 B! f6 E/ z1 t
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);1 ^/ ]3 g: ^5 X1 W$ S2 Z& O' W# ?
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
, X: r0 b6 ~6 K( `9 ]3 p4 nMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,; G& H, u; z, L+ N9 H
0x00, 0xFF);
/* configure the clock for transmitter */
! W3 M& D7 r! G9 R+ oMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1); B# H: Q# t, D. k. d
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 3 t! \! y" a+ z: q) _& I
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,- A6 n X( D( F/ K$ d/ m1 N$ U
0x00, 0xFF);
1 a/ a% P! F! T0 J' A5 A; w$ n3 {# ~5 N+ d( [
/* Enable synchronization of RX and TX sections */
1 |6 I2 y9 G, U# FMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */- d8 s" V& J) t
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);/ Q) k j! B$ @) Q6 N* q8 x
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*! ?; ?* ^6 }4 K! S! r9 F
** Set the serializers, Currently only one serializer is set as4 f/ [# p) j2 ^4 L& _
** transmitter and one serializer as receiver.
1 U: [0 I4 ?4 ?( V4 b5 Q*/
* Z% n F7 A6 SMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);; X/ P# k+ E* d0 Y: O) [' S
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
; O& s: \0 z ]( ]0 O** Configure the McASP pins : ^" }7 E, Q% m9 u9 |# {0 |
** Input - Frame Sync, Clock and Serializer Rx
h4 s5 l6 C1 b** Output - Serializer Tx is connected to the input of the codec
" N$ K+ ^$ i3 D/ ?9 f*/
8 ?/ p& e- S( [5 P% M3 IMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);& G8 K' {6 A3 Y3 ^9 a/ W: A, h" e
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
- c, z9 G, o. X G5 i. F3 kMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
* z- i/ }$ w3 U: R: T. T7 R| MCASP_PIN_ACLKX, p4 E8 C! r3 \9 M# x* O3 F
| MCASP_PIN_AHCLKX
* O& X" P9 ]+ t7 w' p1 f| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */& B2 b/ \) _2 W- u% m
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR : J1 O8 J6 N5 i" a( F# a. T- H/ x
| MCASP_TX_CLKFAIL
1 i" o% h3 [" ^- q& M: T. m| MCASP_TX_SYNCERROR. h _! p# [8 s# o; E
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
( z0 i" p. ?2 l' Q% i| MCASP_RX_CLKFAIL! X+ s# U2 M6 f8 ]' S
| MCASP_RX_SYNCERROR
4 ^$ h% j, ]& M5 y3 i( U| MCASP_RX_OVERRUN);
+ ]5 \8 @+ Y4 h6 |2 D: }}
static void I2SDataTxRxActivate(void)
* \9 [- g( {# h2 V% f) @+ T% c/ }{
, O4 }2 O5 W- Q/* Start the clocks */
- ~0 }& `, b- O' EMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL); ]0 d1 @4 {( X( F K( M, m
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
& n+ I' e* u5 ^& y- l7 q& J7 }EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
3 ]) t5 G$ a' z4 o, r6 U- dEDMA3_TRIG_MODE_EVENT);# R: `1 D7 Q) }4 ~8 t5 Y% h
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
) Q9 J3 K4 L* k& oEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
( U( }, |9 N- o p/ X4 D& d WMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
$ C* \" Q2 w1 [" H6 }& v" iMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
9 m- }& C$ y, u: A `( z3 awhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
3 M9 t3 l0 |/ V# B8 j& HMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);! V8 L* B3 b3 M3 ~- y6 L% l$ e
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);/ y; A; z0 j! k& S. i' s
}
7 X, `9 }. d7 o, R7 b* [5 x5 ?请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
- a. W- x$ ]: b" @0 b
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |