嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,- Y; v; q9 c: l9 \2 `
input mcasp_ahclkx,/ F% I; L! q. S2 y7 y3 w2 ^
input mcasp_aclkx,, f- h7 R* U$ C+ W7 k
input axr0,
, C, s) Z! o; _" H, s' ~; m1 b# V! `3 F& K
output mcasp_afsr,
* X, V+ N7 N! @% j# qoutput mcasp_ahclkr,& _1 v# L$ b# u8 C; T5 T
output mcasp_aclkr,
5 m& t8 S9 u3 k; {output axr1,
1 h5 Q5 W: a, S2 A' T/ Y
assign mcasp_afsr = mcasp_afsx;; d: Q" k8 j8 E1 ^5 f# J2 F! D) Z
assign mcasp_aclkr = mcasp_aclkx;# K! q6 r% ^& |' t0 Q
assign mcasp_ahclkr = mcasp_ahclkx;+ z4 M/ E0 A: o7 W8 F5 c. z) k& o; u
assign axr1 = axr0;
+ f5 R5 Q) J8 `% w
6 z q" c- d0 l- p在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
* e0 O$ _9 f. q9 B! v+ T( h3 Qstatic void McASPI2SConfigure(void)
' l3 t& r/ ]2 b{3 S, @* }1 I* m. `8 j
McASPRxReset(SOC_MCASP_0_CTRL_REGS);( S# F9 b) @. y6 |
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */4 Y; ^! I- B7 G9 {) V% X7 u- l9 N
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
4 o" k; E9 R5 Q6 Z' H6 w# _2 _McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */2 m4 c/ H u8 F( B: [3 y/ ^
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
1 k( p! B* i: A0 S ~( O8 F; Q kMCASP_RX_MODE_DMA);
& q5 x1 g, M& F( w2 l2 u0 h: C4 BMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
5 N6 l- B, f# w) g& V1 q8 T$ qMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */2 E4 }3 I. ^0 C) C
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 7 A% {5 ~0 \' Q' o6 l# J
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);3 L2 D2 V. u, ]! K1 O
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
2 H( F$ e/ q) |* K) T/ jMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */3 ]8 x2 [2 o; d1 C% H. O
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
, N9 A7 V! A! T8 o! a4 O' dMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); $ t5 b$ G o" L0 t# e
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
0 _( @! R: R, P' y0x00, 0xFF);
/* configure the clock for transmitter */5 @- u" J! B* S9 e# s
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);+ D% e8 J" q( r& e0 m. U# i
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); N6 R! i) r9 `
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,# E/ y, `! T* l
0x00, 0xFF);
- F n8 ?6 U" p% U( s# g% Z- k6 F( I- B Z; i1 m8 U
/* Enable synchronization of RX and TX sections */ & F, J$ J2 z( g2 O
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */% o' }& N$ I/ h: z; }
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
) a2 X: d8 ^4 C9 J0 b7 AMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/** |: U( A2 G" ?: f$ D3 e8 g3 V
** Set the serializers, Currently only one serializer is set as
4 `* P' _: @: t6 d) i. I4 ~4 D$ N** transmitter and one serializer as receiver.- [0 b/ R! }2 j0 z, U* E, {- h. |
*/# w: P& l; s, _7 n
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);! t* x0 d; T; ?, M% w
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*, ^- z% W: B! j, F' G" X
** Configure the McASP pins
6 J8 ]( J3 N4 \** Input - Frame Sync, Clock and Serializer Rx4 ?- v+ I. k! g! ^7 p+ r! X
** Output - Serializer Tx is connected to the input of the codec
( N( m7 r, t2 E }' P; I*/
) S' a5 }# i. I# wMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
2 T( C& `' A5 t }+ P5 Q, |( YMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
" G- J7 M' E0 [ j8 \5 X7 j! F; @* }& jMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX, Q6 v- T) y' X, W5 Q' l
| MCASP_PIN_ACLKX4 `/ h0 M |& q- ]6 d8 e/ l
| MCASP_PIN_AHCLKX8 D2 z% @, p8 c1 i. B* e/ R, a: T1 ~" u
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */2 W6 c/ [. _8 P/ @/ n
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR $ {0 l3 M" B6 n0 u: E( p; U. e
| MCASP_TX_CLKFAIL 2 Z& L/ V% Z6 e: Z; @- O2 w
| MCASP_TX_SYNCERROR
9 `$ k" b7 @8 ]# U$ ~+ u2 k| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR . B4 {6 a/ R- [2 R
| MCASP_RX_CLKFAIL/ [% ^5 R: w7 z T$ X: L2 u
| MCASP_RX_SYNCERROR ) l5 V' h, S' I/ [* U, D
| MCASP_RX_OVERRUN);
# C* o6 M0 z0 q}
static void I2SDataTxRxActivate(void); g9 H/ }0 R' g% p X; B( E5 w J0 r
{* I, t$ M* J1 P
/* Start the clocks */5 T% L( R R+ g9 A4 K, m5 z
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);5 C5 P0 [9 {, `6 Z' X5 @
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
2 s0 e$ ~2 l# G0 y! hEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
1 T( t) X$ n# {; O7 y8 \6 ?EDMA3_TRIG_MODE_EVENT);
. l5 G$ e: C" G$ s! H1 ^EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 3 E" i E3 e( t
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */' n" Z7 ^8 P4 N- y
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);# X: G! }$ K: r) q# E
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
6 ]$ F( l$ p& g0 T e" xwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
$ R1 T- F. |. k3 Q* ~: H1 [McASPRxEnable(SOC_MCASP_0_CTRL_REGS); o+ x: \' k% u- [. e. |. I7 q
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);/ w/ G( P' w" a' u1 Q0 i6 S
}
& M& }+ Y' ]4 q) `9 m2 V
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
/ L3 ^6 n8 t7 `* b: t; q0 }
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |