嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
) v7 t1 q' |$ t Tinput mcasp_ahclkx,+ H( P3 m9 H# U# u4 v8 B' U
input mcasp_aclkx,8 y/ t' @3 t+ t. u( i+ ^
input axr0,; o& X m) v+ y/ U
6 ~( F/ j+ m: @, {' n- G2 V, Q m
output mcasp_afsr,
. i: z4 s/ y. ]4 P# q/ M1 p9 soutput mcasp_ahclkr,
: \: n8 {+ C/ ^$ F! F1 F$ goutput mcasp_aclkr,
- ]% e Z1 S* `5 z3 Zoutput axr1,& O! i# _: M5 ^
assign mcasp_afsr = mcasp_afsx;
* ^7 N3 H/ P+ y1 Passign mcasp_aclkr = mcasp_aclkx;
' T) V, D+ I/ a8 r1 Tassign mcasp_ahclkr = mcasp_ahclkx;: U! g9 _! d) ~! ~* H
assign axr1 = axr0;
# _ Y; e: }" T
. o; Z$ Y& n. K w2 p在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
( [& L, O8 L% e, Q% r# s1 ]
static void McASPI2SConfigure(void)* q z* H& q/ X& c2 v9 K
{
, X( z$ S) V" A& Y( H1 x: TMcASPRxReset(SOC_MCASP_0_CTRL_REGS);# {: u1 T2 ^; b1 K1 C
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
* C/ s2 T- N2 |' p% S7 X6 SMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);! ^( |# k2 ]# W2 W. b: C5 h& q# ~
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */! ?0 p; n, C* m$ @% O8 F
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,4 b3 E6 V! |, H& a
MCASP_RX_MODE_DMA);
6 `3 V5 y2 F! f: N9 \% P% A" sMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
" k. {% L: n/ g. U Q; HMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
' B2 q5 q& a% vMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
' _# D+ @4 j: o) r& {* p+ Q: {& T3 TMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);6 h0 c' M! J' H5 k4 q
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
% e2 F: P2 k' }9 ?9 Z0 zMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
9 I% D7 H& O/ R) Y! I0 AMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);9 L' M8 J6 d1 O& e; W
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 5 h( M. e+ f& }$ G" e9 X3 u% Z% h, r
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,4 q* r/ ^6 \8 G
0x00, 0xFF);
/* configure the clock for transmitter */7 c. w' d9 M, G5 k. Y& S) K& b @6 n
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);3 V& E) Y2 B1 A c
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
) r; h, I, Z7 y5 [5 CMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
- X5 D' ]$ B3 p0 T% W3 }0x00, 0xFF);
, Y$ ]# D+ j4 Y9 m q3 ~
6 F! v+ |1 X' `/* Enable synchronization of RX and TX sections */ * ^) m5 x* K4 A; N; ^# w
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */) }. M& Z: b+ i' h& }8 x
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);' c& f: X/ ^ ^" r2 w4 ^
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*9 t* n4 m9 t/ F. A' R) y
** Set the serializers, Currently only one serializer is set as t! j( [) h1 E6 _3 ?, {9 A: o- l( ^/ l
** transmitter and one serializer as receiver.' _, L5 t4 v8 {0 S$ @
*/
) c) ^' N9 D OMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);3 B" w: c! `! V$ R
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
, |5 q2 H9 p) D' s" o3 e! Q8 F! R ^** Configure the McASP pins - V0 C: I+ @ N
** Input - Frame Sync, Clock and Serializer Rx
) { x7 r- w' v3 |8 f5 |4 Y7 t/ e R' ?** Output - Serializer Tx is connected to the input of the codec + J7 {9 M f1 h* l- R5 k8 x
*/: q! ]9 P$ n" w$ s
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);5 y; N, N0 P d, T; _
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));% J6 C; ~- E: j8 ]3 F
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
+ P( U2 h" d) S" x* D( Q H+ H| MCASP_PIN_ACLKX
. m+ B) p/ V% ~2 ]$ T8 T3 y) i| MCASP_PIN_AHCLKX
/ @3 H, Z7 i6 F" h0 g| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
! B6 h, X9 T& d4 d% k3 O; FMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR # @" K- @3 v" K
| MCASP_TX_CLKFAIL
/ W) D7 X9 V/ c6 U4 J% h| MCASP_TX_SYNCERROR9 ~& ]7 _. m9 i
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
# p- T- o; O5 B9 e; e3 ?( a| MCASP_RX_CLKFAIL! ]; f) W0 s e9 g
| MCASP_RX_SYNCERROR ( X. k7 W1 A: F4 C: a
| MCASP_RX_OVERRUN);5 i; j& [5 P/ z J3 m3 k7 ?+ O
}
static void I2SDataTxRxActivate(void) T$ p1 t! U) E- B5 M6 z
{3 X5 ` ?% w6 H6 F
/* Start the clocks */
$ y2 L! x4 x. ]$ `6 O4 f: c: zMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);" s$ C, e2 Y* i8 r
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
) R% h! O/ B! Z4 a! |4 pEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
! j' {8 _/ U2 s' a, JEDMA3_TRIG_MODE_EVENT);' z1 I' ]/ t% U0 C( \, c# C- b
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 9 o h; c( }# k1 k
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */) u- y" g, J) g$ d+ q
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
; `8 \/ t! E( m( PMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
$ J4 p; c" w( k/ ^+ q) }; U+ e& u! ewhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
% j, F$ C. |- K4 h' B- fMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);& B; D! c/ N9 C& p+ L+ c
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);3 C3 `; ?6 M4 \9 i' S
}
r$ [9 o/ ]0 |
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
% {' b/ |& x# e; ]* |
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |