嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
4 G9 \# B& G% Jinput mcasp_ahclkx,
0 ^/ G& s, u. T. z, zinput mcasp_aclkx,+ j* H+ o% ` I7 i
input axr0,) I2 t* x) F# M" L/ a$ D# F; l
( Z( Y. `+ g2 C" K
output mcasp_afsr,1 E; \4 e7 L) [' b+ t* O" p
output mcasp_ahclkr,
" P- q3 P& ]% \3 [7 F$ [output mcasp_aclkr,5 ^6 y2 i& T6 k3 C- d
output axr1,
& X5 F# M+ G: L+ v
assign mcasp_afsr = mcasp_afsx;0 y: d6 s V2 ]; s. E
assign mcasp_aclkr = mcasp_aclkx;
3 p6 y# i$ u/ d; b7 Y& k) Y, \assign mcasp_ahclkr = mcasp_ahclkx;/ P m" s1 L8 Z5 G
assign axr1 = axr0;
$ U( ]2 J* U( V0 ?0 g- l7 G/ I5 Q1 J9 D4 T% D; f6 @: Q
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
, g e O1 Z2 A2 R9 O0 z3 T- v( g
static void McASPI2SConfigure(void)
6 D; ]; E6 w) Z6 l" E8 C{
' ^3 v( |( W) l3 F$ d( C7 BMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
! m3 ^- `4 V9 C7 dMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
$ B9 F0 h2 b: i+ j: BMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
& c m' x- x/ ~* s7 J. |McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
8 f9 R+ {) ~4 p9 J& s8 IMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
/ h/ e, v5 q4 p% K/ [! Y6 V! ?+ |MCASP_RX_MODE_DMA); R* p4 f7 D( C3 @5 S3 Z3 A
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,5 [. ^2 m# \# r6 f
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */- ]* c6 j0 }' ]8 I
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
# X; e T. ~# ]4 G& F( x+ h, i6 cMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
1 c" P& v1 M+ UMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
% ] i3 _# s- I! G, AMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
1 M" |' D* n' bMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
, g3 C6 L/ m+ X9 {* OMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); * X0 Y! c( F! }7 ~: ]6 \5 @
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,- N/ o% @6 C% j0 J
0x00, 0xFF);
/* configure the clock for transmitter */
/ ^8 A" u6 O3 ]# |2 S9 \( `2 UMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);& N# ~" l! U+ |! r- i
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
# c) q; B! r. R3 ^. dMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,2 B* p; w s8 l: ^( s
0x00, 0xFF);: U) @4 [7 p6 |& l- g) S
1 }# c/ Y, C; J) m1 x2 d, q( s
/* Enable synchronization of RX and TX sections */ , u/ D' M0 o( `3 t% j$ U
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */$ r, X- s' ^& e* O% o: D# H. a
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
8 m0 n2 R3 |6 s3 eMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
. [- g5 ` Y: c7 d2 M8 q** Set the serializers, Currently only one serializer is set as
3 r, V% z# T4 U2 C! ~1 P# e4 ~7 n** transmitter and one serializer as receiver.
- L6 t$ }! F2 s8 Z4 @*/
- l4 m# ?# }0 s$ j) d6 z8 OMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
h. Q. S6 P9 U' [McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*1 S( A. | x! g& v5 [
** Configure the McASP pins 0 Z: m" r9 I' w4 W( S
** Input - Frame Sync, Clock and Serializer Rx+ e7 B# @' e+ A2 e2 i4 d& O3 y
** Output - Serializer Tx is connected to the input of the codec : N8 X2 j$ s) ^4 M6 z
*/
$ X2 {/ \2 r( d* vMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);; V) V1 W* f. u, `# j
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));' `2 w% D( x9 _ K/ u& n) b' b
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
: U; c* ^2 d4 X7 |" i/ ~6 ]| MCASP_PIN_ACLKX
2 w0 g, I. p0 l6 j7 V/ [. J" H' j| MCASP_PIN_AHCLKX
0 D7 G' l3 F) S; P" }; g+ \3 J| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */3 p- O" v6 S- C. u% @; y( Q9 C
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
( h, l* D' l' s. u| MCASP_TX_CLKFAIL 1 i% U1 d8 ?0 s' m; I4 v, ?: O
| MCASP_TX_SYNCERROR- C7 q% S7 w5 F. e q
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
; X" i0 `" w9 y| MCASP_RX_CLKFAIL) E' L% Q" a& S) A/ |
| MCASP_RX_SYNCERROR 7 @6 f Z( L3 @: N/ I+ Z$ H' K2 m
| MCASP_RX_OVERRUN);- m- K( F3 m* t2 q5 d9 z
}
static void I2SDataTxRxActivate(void)
) m8 w9 V' q5 `3 Y# |1 F{4 e$ X; w0 E9 i T( ~" Y6 L& h* V
/* Start the clocks */ R+ w" L9 N1 q* p3 R
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);0 W& u3 s6 v& t5 I9 W7 x
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */8 i" {4 g% L$ x/ D9 g8 P( H
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,7 P# o( g) I3 Y# r/ `2 @
EDMA3_TRIG_MODE_EVENT);6 L* W, W1 f; r( r4 C- C- s
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
. Y9 l6 y7 G) NEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
) O8 z6 f% |6 B( a' W5 f/ vMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);5 `. u5 o: q6 \+ ^; p4 ]; ]
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */ |' q! r# Q' z* a
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */! b# K$ g" z: k6 L& y. `0 A2 `
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
6 a, J* d+ t: U* X8 G- l0 c# pMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
/ s ]# B7 ^2 @2 c2 J) o$ G X- x}
2 ^) ?6 \4 q/ e+ l# ]
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
; i. b8 }# M4 Y3 S' D
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |