嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
0 R2 }1 Y; ?* {, s- Q/ ~& G; k% b Sinput mcasp_ahclkx,+ C: p/ y$ Q4 J: l) H. F
input mcasp_aclkx,) B2 f% o+ x) g9 M
input axr0,& t: L+ B! l) p& o' [- K* G
2 X/ M; U+ {8 D' ~; y
output mcasp_afsr, y1 W F1 H6 z* n
output mcasp_ahclkr,1 S- y0 S" n7 Q$ t4 v
output mcasp_aclkr,3 e. X' R% j0 k7 W) J
output axr1,
+ e& W# K0 B3 Q& s8 I) \" \& ~* T
assign mcasp_afsr = mcasp_afsx;' ~9 u3 x4 D! }- X6 Q
assign mcasp_aclkr = mcasp_aclkx;
4 E8 c2 i: G2 H) O$ Sassign mcasp_ahclkr = mcasp_ahclkx;
- R7 L+ m1 P) K9 L# V7 ~' Yassign axr1 = axr0;
! ^% a6 M, c( j" ~
8 b3 K3 H, }- d' H在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
5 }4 M1 o# j2 V3 F9 i* o0 t
static void McASPI2SConfigure(void)
" \3 c9 G, O; V8 _! I{# k7 i* E$ J; `' R" M4 z$ Q ^3 T6 x
McASPRxReset(SOC_MCASP_0_CTRL_REGS);" [8 @2 h, ]# w
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
( Y/ A2 I) I$ dMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
@, p8 D: @; IMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */7 J7 r3 @& s9 K
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,6 _' @7 @/ P! g _0 ~" ?
MCASP_RX_MODE_DMA);
7 g: o1 _$ P0 kMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,$ j! X" ?! C4 F' ~* [( u' Y( x
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
b# f1 W, K& Z8 w' Q. FMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, % J6 ]- ?. H5 @( \# X+ a6 L& t6 s
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
" O; A3 O% @6 Z2 Q% c* nMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
7 x3 L, r/ ]* d2 `+ yMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
9 {; Y' m/ {3 b3 T! bMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);6 }& D- V( e# i( C; N: @
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
( a( u6 t& Q1 {0 j5 `McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
1 B3 r2 E/ z5 b0 H3 ]$ ]1 T( [& f @0x00, 0xFF);
/* configure the clock for transmitter */( `4 V9 O; f; x- X8 Z
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);# w' Q3 V% q2 Z# }9 W
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); / |% E6 ^: I4 X5 V/ b
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,7 c j# K5 {* @2 b( m/ S- `$ h
0x00, 0xFF);& v. N# X1 G) v( `8 M$ H
/ F: I4 p% J* K: F4 S" f/ u% a/* Enable synchronization of RX and TX sections */
0 r) X* N+ @; N. b( KMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */4 D$ z, B+ z5 x9 y- o$ G# d
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
& E: I1 z8 P, ^7 B( nMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*! M8 b: v! k$ ~2 ?
** Set the serializers, Currently only one serializer is set as
/ J# ?9 q' v6 `3 ^2 B; @** transmitter and one serializer as receiver.
0 E1 R9 `, L/ o; E*/
3 H* x3 n' B$ ^, I. C- t0 `6 dMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);6 I- @& G6 {. p8 E2 L/ w3 C0 y% F
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*1 N0 ?0 T; v6 a6 \! ~/ D
** Configure the McASP pins
; e2 b. B- X- c$ k, N** Input - Frame Sync, Clock and Serializer Rx3 V4 S: U/ p E( v8 p3 I2 A1 V
** Output - Serializer Tx is connected to the input of the codec & D. Y A& V x8 F: ^6 E$ ?" L$ e( m! y
*/) ]5 q2 [6 F; N
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
( s4 @$ O; v! D" {& IMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
3 t* k' ^7 i. R7 {: D3 G9 C4 G8 LMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX" I! j# J+ d8 S+ }) P+ B
| MCASP_PIN_ACLKX
5 t: W$ \& s1 |! g0 }; {( G& a- p| MCASP_PIN_AHCLKX
) A" @( a9 \# F+ a. u) X. V5 K| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
7 ]2 j3 y" J+ w, G9 w7 e) I0 bMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR $ ^# W+ C" ]3 w7 k+ ]
| MCASP_TX_CLKFAIL & a4 {* c0 i' s9 {' y% ]9 [7 {% I. _! ~
| MCASP_TX_SYNCERROR, `# t. ?! J6 V
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR ) Z+ w9 T1 g$ i% q& ]6 O! Q
| MCASP_RX_CLKFAIL
6 H( a/ ^* N6 o) j# K| MCASP_RX_SYNCERROR 4 Q* o9 _$ D; c3 U% G' T
| MCASP_RX_OVERRUN);
( R/ G9 z4 V2 ^/ e, d}
static void I2SDataTxRxActivate(void)
5 C8 C: p8 P3 {5 `* m4 g& @$ R{
- v) g/ h! ~1 }" L e: F/* Start the clocks */
8 T* w3 ]8 U' x1 b- [$ i* ?( kMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);& u n: v7 n9 F1 c* G
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
) O0 y- M+ r v: p2 j8 Z4 j- xEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
8 _: A. u4 S5 X, z2 `( R2 R' {EDMA3_TRIG_MODE_EVENT);0 _/ ^& _" p1 N. X
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
7 D& e2 I* q& J2 r$ t) \7 OEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
% s. `) L9 j# u8 D/ ], ?# `McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
% }: ~0 ^; Q' VMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */; J9 B* A+ O' \; L( ?( J. ~
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */! t& }8 ~, t5 k. l
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
# P# m t ~6 A2 | x, i6 kMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
; O6 w' A- i0 B. I7 _: v}
; W; s$ u; b7 G( A4 T( s请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
0 L6 ]9 Q$ Q* R6 T2 ^7 T
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |