嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,! k+ C' ?2 y) P( U; E( e( Y5 Y
input mcasp_ahclkx,, C' ? c- S7 S
input mcasp_aclkx,& H1 \& J6 V: O3 j' g
input axr0,
4 e* A# @+ X9 r; u6 A/ R% ~! k0 o
+ v7 H$ b- V! f( Joutput mcasp_afsr,+ S+ i4 M* b6 Y3 w
output mcasp_ahclkr,6 R& F* h) D2 i
output mcasp_aclkr,
; T! n4 Q$ [' T8 N' soutput axr1,( r7 q2 V) i6 z" m) |
assign mcasp_afsr = mcasp_afsx;0 U1 i \1 O+ }! x1 r4 r4 S ]5 j
assign mcasp_aclkr = mcasp_aclkx;
- `- f$ h$ u/ W7 y. {- S) n/ u8 Fassign mcasp_ahclkr = mcasp_ahclkx;# ~+ `! Z( A. c3 S
assign axr1 = axr0;
. z( I' h: P2 V
4 J6 {( [! r7 J/ K: {% C
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
5 \( l5 Y* [* X4 `( Bstatic void McASPI2SConfigure(void)$ h+ h8 r& p1 \0 w
{
: m$ ~" y7 O/ Z0 f% w' [" {$ v: q9 ~1 UMcASPRxReset(SOC_MCASP_0_CTRL_REGS);% W/ Y: n2 m6 _2 P
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
! Q6 I: }4 S) q R Z; sMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);$ F, Z" d; e# T" p! E
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */& u7 E6 x+ K, t) O, y% T$ v
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
9 e0 u A* [# ^! W* t% HMCASP_RX_MODE_DMA);
4 ?+ D7 f& B+ [" L9 e) ?. w" @" S# d+ XMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,# J4 Q: Z& J: Z' X/ H5 u
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */( Y& w& z% I/ X* D1 ]$ i7 Z% V
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
; v3 } L V0 q2 b7 _/ NMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
- u: K$ i4 n1 l$ W+ G3 Q& Z: e8 RMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ) u6 y4 k) u) z! K) p" P: b6 [9 F
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
. F1 q9 W& L$ g4 ~9 lMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);3 }7 C( D$ w: s# {
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
6 [8 V. _9 K) i* q5 jMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
( D, ]5 L H, ?0x00, 0xFF);
/* configure the clock for transmitter */
7 y& _* U6 i. u5 `& T( _McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
3 W; D# |8 Y" p2 W+ o9 ~; T0 AMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); : \3 x9 f& E9 ?, `6 y
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
7 H* N. j9 n# v0 `1 e5 w- q4 Y0x00, 0xFF);1 y" l( c% s: T
4 Z0 B: x- V8 t$ F/ I4 ~- N/* Enable synchronization of RX and TX sections */
. s( C1 T% k9 U9 \! L) g! j8 ]4 aMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */) D/ D3 l( h. @; G9 r; [
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);+ M1 m, ^ l4 ]) h
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*7 b; G' m1 W( F! J! r
** Set the serializers, Currently only one serializer is set as
/ i: w* w, _5 H. Y* T" y* f** transmitter and one serializer as receiver.
) `" b: V, m! H! ?) {$ ]*/
) D" `; \% ~( c8 R3 X3 |9 iMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
/ Y$ _9 c9 v `" u: QMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
? z3 W; X) ~8 c/ E** Configure the McASP pins
4 {0 w- D [' x/ y2 k) Y** Input - Frame Sync, Clock and Serializer Rx3 @: J, _6 w+ K" S0 c$ F& W
** Output - Serializer Tx is connected to the input of the codec : G: K4 T5 j: y* s/ e- a% X
*/
/ I. S4 g% O7 x' _( X/ \2 eMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF); p' [) f0 T3 i% I$ E
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
. V* D5 e7 _" y" @& HMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX5 C! r2 P' z0 q( C- s; q: l' k
| MCASP_PIN_ACLKX
5 E. R/ N" C/ k# x0 }$ y| MCASP_PIN_AHCLKX: b9 N0 T/ ~% q* y. H9 R& i
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
! K9 J# W5 _7 XMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
]. a$ W: K9 p r2 {3 k| MCASP_TX_CLKFAIL : L' g! f: J1 Q0 V4 X* {6 d
| MCASP_TX_SYNCERROR
% X& s; y; v. n! Y+ u1 x5 d- i+ H5 Y| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 1 y& @: K. w" ]
| MCASP_RX_CLKFAIL
8 j; \) f, u6 K1 {, O' F! Z% `/ q| MCASP_RX_SYNCERROR
5 j( q' N5 D$ ^3 m1 ]| MCASP_RX_OVERRUN);. k5 H' T- F+ v' Z1 u9 g
}
static void I2SDataTxRxActivate(void)
8 K* @( [- h5 _{
3 \9 K) G% A8 k- M6 @/* Start the clocks */
Z* G' B% L" i6 Y- ?6 Q# }: GMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);% R% V- k* [8 d+ j5 r
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */' Z1 s+ d% ]1 G i( c( Y
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,: \8 N, P5 ]6 i1 x5 {; r
EDMA3_TRIG_MODE_EVENT);
! m! b" y/ E& x7 L0 i, d$ HEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
- Q# e- J( [4 Y5 F6 E: D# cEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
9 {$ |+ R4 E! ^6 u# |2 kMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
! [' L, r) N* R- z& [McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
' G- R8 e: g. J) T' Q; A: S0 |8 twhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */' W* G8 m! i9 A7 |$ e" J
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);+ B# U+ ] g: S/ T' y3 N
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);. D% i# X T L+ X) @* B
}
2 Z5 t, _# E0 |# F
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
* P, d' A5 I* J; A$ v! f5 J
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |