嵌入式开发者社区

标题: MCASP自环配置。 [打印本页]

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,9 G/ b  u0 k+ I" A
input mcasp_ahclkx,+ h+ E# L& E9 Z$ L
input mcasp_aclkx,- @2 i! C: X6 l, C' O7 I
input axr0,
; l! h7 J! y" Z% B) Q, h% J2 i9 _* }" m0 N
output mcasp_afsr,/ _% r1 B) r% v0 C, c; q
output mcasp_ahclkr,7 U3 y( p, _6 [5 n/ j$ T. E; s% R. G5 I
output mcasp_aclkr,  h8 \( h+ G& e" N2 D) f1 s9 f! M
output axr1,! M! G  E0 z6 K$ @7 A. l' @  z: r
assign mcasp_afsr = mcasp_afsx;
7 z2 n0 x% ?4 O: u$ u) H9 Yassign mcasp_aclkr = mcasp_aclkx;
; T9 l4 A* D; C! q; ~assign mcasp_ahclkr = mcasp_ahclkx;- g% g( L% ~. v6 H( K3 L" p, s7 u
assign axr1 = axr0;

$ V2 V% D; s4 m7 i2 @; R9 x5 b) \# R: m
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
% b. }' C( |) N9 n& L. V
static void McASPI2SConfigure(void)
1 P. Q- j( \+ p5 d. e/ m& [{
* w% r4 w2 b# [+ x$ `3 x0 @McASPRxReset(SOC_MCASP_0_CTRL_REGS);
7 r, h4 q$ {& w* zMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
0 }; D, s& H! A3 K( H( f# H3 K+ ~6 EMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);# G; P4 y6 L' c7 i6 f4 C& `
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */" o2 _, p: L; f2 U4 y# P. i2 {
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,! a3 }  p( M* P$ c3 \
MCASP_RX_MODE_DMA);
' E0 n: P' d" M# D% }McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,/ g& o9 U/ G0 M) K
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */9 z6 ~2 `1 M/ u" l6 r
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
7 B9 o8 j, z3 u, R7 MMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);4 }% K% c: q4 j5 _0 W. n) o$ I
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
" |: a, p( y" R7 p8 T  fMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
- @5 Q# \+ J3 x, d. w6 S3 KMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
3 x0 n  k! p7 P# Y5 p. D" N: gMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
: N8 U) z7 A- w  b! Z6 _) pMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,# O5 F& i, m" v2 f2 u0 R! M* \; f
0x00, 0xFF);
/* configure the clock for transmitter */
4 ?) R* a/ {' L. x3 cMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
2 `+ k) ~" V& m5 w2 aMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
0 z* ~6 ?! X9 n8 p& u( R- n6 ~McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
- r2 O5 v2 P' q" X# v) h0x00, 0xFF);
! }* O. D  z; S& {
$ l$ p  ?: F( y4 F) I/* Enable synchronization of RX and TX sections */ 6 L2 d* Y- \" K9 n
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
/ T) T8 U1 @' RMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);+ N4 H0 T- ~1 ~* Z. Q5 L
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*5 \$ C' Z. P% x
** Set the serializers, Currently only one serializer is set as) w9 g" \2 G- }! E$ T( H+ Q+ t" S7 f
** transmitter and one serializer as receiver.3 |2 q9 L3 a' s) P+ s
*/
- U" N) f6 p4 a. J1 T2 \McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);* v1 V: D5 O7 t/ R+ p( _3 i: Y
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
8 B# ^9 \' a/ n. E1 L+ t** Configure the McASP pins 9 d; s! Z1 g4 `% J, i, g$ z% f
** Input - Frame Sync, Clock and Serializer Rx7 i/ w5 h1 g) _) I4 q! C/ d% ?! `
** Output - Serializer Tx is connected to the input of the codec $ F% b7 i; l0 T2 M$ U1 A$ _4 X; |
*/
7 u* b0 |0 J+ k/ ?McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
6 p7 ?6 [; C- z* U7 [- ~# u% sMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));$ ~( V( H" @; m+ d. f
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX9 O! z/ v* ^, |& Z
| MCASP_PIN_ACLKX8 P/ d( G# y- `9 v9 P- K
| MCASP_PIN_AHCLKX
( A4 ?. j8 p7 O" Z6 c/ t| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
; G2 }7 g) s0 }3 R4 lMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ( @6 c. }2 z6 @0 ?. t, M- h
| MCASP_TX_CLKFAIL
! f" G; N( D9 k  s( m6 e| MCASP_TX_SYNCERROR
4 I6 @0 J2 u' T: O- @: o9 z0 g| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
" K  A; G4 h: K: ^/ ~| MCASP_RX_CLKFAIL2 s) {! \8 B& G' Y( _0 V5 @! Q
| MCASP_RX_SYNCERROR
6 L" n$ j* \; P" f; U| MCASP_RX_OVERRUN);
) L+ E6 L. |) t1 Z3 u}
static void I2SDataTxRxActivate(void)1 \  v- }- _. F0 H6 ?
{
5 d8 Q/ ^) v9 P3 y: z/ w# q/* Start the clocks */. `9 ~& R( t; f$ t9 e
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
0 ]8 e' {: s+ m( oMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */" C8 }1 @! {9 i  W$ L; A- m+ t1 G. [
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,2 D7 g2 Y. P. d. e0 e
EDMA3_TRIG_MODE_EVENT);
) C' I4 i7 S+ c5 X  EEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
7 e" |% F8 P, @) VEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */4 S1 o, z% M% J% N
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);- W* A9 s# y9 T- s: i# a
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
/ j. u! }* }" J* T0 n! Cwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */! @: D! A/ `' q
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
* `# w$ j( W* U' t; f0 IMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
' l9 q3 {7 m' f}
6 y+ ^& ^- a5 R; ^9 |
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

4 ]% Z1 L; H5 \2 z0 ?




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4