嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,0 m8 Z2 W0 O X6 ^% ?8 e7 S- W
input mcasp_ahclkx,2 B/ k6 F" j& q8 w$ T* f, I ~
input mcasp_aclkx,
`7 m U3 O0 J: sinput axr0,
5 `4 R' F9 G5 q6 R+ y
3 A1 \; N# g6 P2 Joutput mcasp_afsr,
+ P7 Q# l( l5 I. N$ Boutput mcasp_ahclkr,2 K; S+ L: D, v; K7 j3 ?1 ^# S! i
output mcasp_aclkr,; i6 U: A6 L8 A4 h9 |
output axr1,/ A' x( m4 |! M
assign mcasp_afsr = mcasp_afsx;* M" ]* h& k. x, y4 d0 c
assign mcasp_aclkr = mcasp_aclkx;
- z* n8 c3 O) w: _: v9 Y' aassign mcasp_ahclkr = mcasp_ahclkx;
" B: O) H$ u: y5 y! Aassign axr1 = axr0;
8 S& ^' s0 l+ s( a
; n9 t k5 Z, A% G3 h在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
- N/ L7 ]3 L+ @% _static void McASPI2SConfigure(void)
# B- o/ \6 @2 p6 j{# [$ ` H- `' J/ e
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
u% \* N0 m- b# v+ b: sMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
- O: V' H/ |/ W7 }3 ]3 @3 W: T! IMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
' Y4 h. ?3 L) a' \McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */" `" |7 r8 `+ M& Z: ^0 S& E6 B( N; O
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,; m3 @" w# v' B4 P) a" d
MCASP_RX_MODE_DMA);
5 W* ~/ K, n- lMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,$ G( ]" j: t3 n3 X0 j
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */9 z$ R% [- c( L; k/ o$ k
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 6 P D) _4 R! |& Z! P* l' Q
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);/ t9 Q3 H8 R3 c: J8 r% _
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
T) e* p7 v+ z" \7 ]3 N! u' U5 DMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
7 o m7 k0 D3 f; s sMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);% d- i! r8 F. E
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); # E( x0 N1 z1 P- C: Z
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32, @6 v# l0 x" p: w( @: `
0x00, 0xFF);
/* configure the clock for transmitter */9 |2 [5 E. e% A% N1 f! B
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);2 o! Q2 U7 Q5 M* d) s
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); : l8 l. c. w# T, @
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
+ G" ~8 A9 t1 N0x00, 0xFF);, }7 D0 Y J) b/ P6 j+ z6 |
- B# O n) g! [% g& Q4 B
/* Enable synchronization of RX and TX sections */
7 u. {4 V5 G8 u AMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */% k4 r1 N" R1 I; X
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);5 @. g+ h0 A& q
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*4 T9 M) V% J1 B& e
** Set the serializers, Currently only one serializer is set as0 z; {, X. H1 @% x( u8 i; }
** transmitter and one serializer as receiver., M' I+ x# Z+ v0 \
*/; A3 t, W+ G, _" q+ a7 D6 M! F$ p
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);" I7 X% F4 I* \
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
% U3 b; ]$ P& D H" b/ C5 E; T** Configure the McASP pins
; Z" C3 s2 H( m6 L** Input - Frame Sync, Clock and Serializer Rx% O5 @2 H& Z% Y$ x
** Output - Serializer Tx is connected to the input of the codec , H) I% ~ d/ {$ V9 A- U% N- Z. v
*/( L! Z% `4 v n. x
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
D, r* e( u6 C9 [" RMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX)); z- E1 o9 ?2 \ Z( F
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX; I5 c7 j' y4 |5 ]1 r
| MCASP_PIN_ACLKX' F4 r/ B2 C4 j1 D6 R! p4 w
| MCASP_PIN_AHCLKX
" Q4 f) w7 O+ ~" x+ J) C- y( z4 B| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
. n& |& ]1 s. H( f4 X" HMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR " L6 S5 J5 a7 D& `0 L
| MCASP_TX_CLKFAIL + w3 ~* @3 a8 `( v, X. L z
| MCASP_TX_SYNCERROR
9 O8 u5 ?( c* M8 r| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR . k$ o7 v+ o/ x! a$ O
| MCASP_RX_CLKFAIL& N9 X7 X K# E2 P: Y
| MCASP_RX_SYNCERROR 5 `9 _& C z7 g! z; S
| MCASP_RX_OVERRUN);+ S' j0 L& z" U% m0 j) l
}
static void I2SDataTxRxActivate(void)
; }. O0 d0 L" K# I5 g: D7 L{
8 z$ [5 I( G9 |0 @1 T2 v/ \/* Start the clocks */
8 V: G: ~6 v7 O& x; cMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);4 g5 f$ n6 Q2 a: @
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
) H: v8 ~8 R4 C7 ^$ w9 h d0 `EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
0 @2 p1 g4 d4 Y5 rEDMA3_TRIG_MODE_EVENT);& {. R @8 W! N% m
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
s8 o/ S- T3 j1 tEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
7 h$ i$ n7 }! Q7 {; F( {) d. W4 mMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
" P5 x9 W! `1 nMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
|$ W: R( v8 a, fwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */5 {( [' {5 }) g& G; s* R
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
( t3 A' y$ n# ?, a% ^McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
, [2 [6 s8 d& p1 L; P# s}
6 e# I( ?4 F- O& x1 E% v# h请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
- R t) @/ E' |7 S1 X4 H
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |