嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,. N; K$ n, x! H% l e" J' A
input mcasp_ahclkx,/ z3 B+ ]" S$ ?5 p) R W! I3 M
input mcasp_aclkx,8 O' {8 X6 o B% H9 f0 ?4 ]2 b ?3 Y
input axr0,
1 p+ q! L/ s; @( f" t( `/ B! T1 O& d& Y- e! Z
output mcasp_afsr,
+ u3 M$ p- W1 voutput mcasp_ahclkr,
8 |" Z3 r9 c6 u0 w& _/ eoutput mcasp_aclkr,
) O7 ^) t) {& q, r9 [output axr1,: u- |/ C/ W% A$ k, k! B+ ^4 N1 p
assign mcasp_afsr = mcasp_afsx;% h( H# G: B8 A4 Z( a. D/ E7 E6 `, I9 B
assign mcasp_aclkr = mcasp_aclkx; b9 \3 }" p5 s9 Q# {6 I+ p
assign mcasp_ahclkr = mcasp_ahclkx;/ Q8 f/ _% B: p& u' w
assign axr1 = axr0;
2 u5 U; ]/ k! _5 ?
* O/ Z/ g8 m3 \! A; {7 y在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
, ]0 r# X1 b2 |static void McASPI2SConfigure(void)+ [; r5 f6 g3 F* ^7 g' f
{; a4 I0 `/ g$ ~
McASPRxReset(SOC_MCASP_0_CTRL_REGS);6 c- L& e9 ^+ l. o- K
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */2 W. y' ~5 \4 C
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);& d, V7 f1 I1 i0 D( G8 E
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */: }! x1 M: \- e+ @7 k, W
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,' R' W7 q: F% Q, Z0 ]' u, C0 k
MCASP_RX_MODE_DMA);3 a, R2 l" h. Z
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,6 w7 u" A& K# X0 `" ~, Y
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */, W6 c% B. g- E- d4 T- H/ U
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 3 h' j. H9 S0 P, P4 n6 ]
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);( e; A! O1 m) L1 m8 x9 t+ j/ ~
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 8 w4 I6 E H2 I' ~" q3 U2 A$ G% w
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
X8 _+ E- b7 {# V. sMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);; T, m: z8 c2 K* G g
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
+ I4 Z+ I* y- N" s% d% JMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,9 o2 d$ `# ~# K+ h3 c% R
0x00, 0xFF);
/* configure the clock for transmitter */
1 @+ `- ?1 ]% U' p+ s, ?2 m/ iMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
- I. N( w- H; a3 `McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
# A& Q9 t/ h' j. Q6 {7 O- cMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
7 U5 P, Q F( `( Z0x00, 0xFF);
3 l5 C6 `$ M; i2 T: O9 d! O) I k f1 J1 W( F, J' s: @
/* Enable synchronization of RX and TX sections */ 9 [* Q B0 F4 o/ U) l
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
, h5 k+ X2 w6 F% m0 g9 Z$ GMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);3 e9 Z7 V# ?- e0 z' k
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*# U8 d s, u9 O; Y9 n( `3 C
** Set the serializers, Currently only one serializer is set as
4 H, W" s/ K7 B' s! j0 R! \** transmitter and one serializer as receiver.! t5 y' w+ m* e2 z1 S k
*/7 A/ f6 K% E6 ?- D; b
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);$ a$ }0 \" g/ n2 K7 ~
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
, i4 D& |4 A5 p1 o5 f/ O** Configure the McASP pins ! N! o4 O& J% Y* H; Y9 U$ v1 H
** Input - Frame Sync, Clock and Serializer Rx2 X+ h" v, d; s; |- T7 h
** Output - Serializer Tx is connected to the input of the codec
+ @) d1 r: r' g( i* k4 O! L1 `*/# {$ ]. n$ s! _% E2 N- |+ ?8 e
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
+ v# l+ Q( [ @& LMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));9 ^6 `; D" x0 w9 T$ E+ Q
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX5 y2 b0 O& P& d6 R& Q
| MCASP_PIN_ACLKX
8 ~" p a4 N+ ~, M3 Y; r| MCASP_PIN_AHCLKX8 X I# d4 t0 R3 @ k
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */+ z0 S5 _3 E2 O9 l: ^6 @" c6 N8 D
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 2 p6 c/ v) z! D. @
| MCASP_TX_CLKFAIL
; I+ S' ?- n7 ]/ T| MCASP_TX_SYNCERROR
( s* L! d9 C( T5 |4 j- E+ f' W| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 0 d! @' I$ b. _8 r; w
| MCASP_RX_CLKFAIL/ R% D3 m$ D" d% E& k7 t4 v- F% D
| MCASP_RX_SYNCERROR ( m$ H }3 ?4 r0 H! U* E8 Z; s
| MCASP_RX_OVERRUN);
1 j- c$ U4 u; r! t# W% `, L! e; q- q# a}
static void I2SDataTxRxActivate(void)
" H( ?6 S' P+ `2 T% B1 m{
) W1 E1 K" H0 l/* Start the clocks */
- I+ o; g0 v% m3 ^) EMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);0 s1 w% e7 @' f, F. g* i; X3 P' r
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
, b5 D5 F! x: f/ d! c6 o' |EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,8 }" W* f1 T2 r, f; d1 K$ G
EDMA3_TRIG_MODE_EVENT);
' Q! t6 A8 u7 y& C8 G, Z7 MEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
, ^' H( s+ |& y" Y1 u7 EEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */& k6 z/ y5 t P" [2 s4 _
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);2 g# M0 ~- l3 H2 U
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */) z2 A1 U( i. K1 V. O, w
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines *// V3 h$ {. J) L
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
; o& R) L; `4 V6 A: o& {McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
1 T$ ~/ q0 y# Y. W}
8 F, y1 S+ @/ r
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
5 t6 t' P5 N' {$ R& A( Z) ~
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |