嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,8 Q- K, a' y. N! f
input mcasp_ahclkx,6 |5 P" O# A9 q- n# J8 F0 W; D
input mcasp_aclkx,
5 _/ N- F0 j" ]  B; Uinput axr0,4 l, G) n2 a6 N. l, Q

& v  r" a& J  O+ {output mcasp_afsr,
' w3 l) g3 Y  V1 Houtput mcasp_ahclkr,
& z. u0 Y. [5 x  |output mcasp_aclkr,0 N( Z* k. k' X' e: U
output axr1,
5 Z2 {( E9 M2 h# l: ^% W3 X
assign mcasp_afsr = mcasp_afsx;; n9 u! n( ?7 Q" ^# ]
assign mcasp_aclkr = mcasp_aclkx;6 x# G0 H) E8 g$ D% f2 y
assign mcasp_ahclkr = mcasp_ahclkx;
8 m& [& J9 U* }3 Y/ Y, Oassign axr1 = axr0;
$ w9 H/ B3 r$ @- z% {8 T
1 P% P5 k* g% z* [- C6 @
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
( g* K; ?. k7 B7 c% C" C# l3 e  Q8 ~
static void McASPI2SConfigure(void). O# L% e' O+ @: L+ K
{
6 v% }" k  ^0 ?: D) w3 a( zMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
4 I! q7 N( C/ p' L3 d- ]' G& SMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */* g; V! G6 H! m, J/ f* \- Y
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
. j+ v2 a+ ^" B# R1 [/ fMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */3 D, w6 O3 w7 s
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,' E- ^( f( S5 j
MCASP_RX_MODE_DMA);. e- U- J* a7 N! H
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,( u% ]& _* w. ]- E) i
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */6 a/ X& r  S" l/ f
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
1 i- _  Z+ `: g5 [( rMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);7 c3 J5 U; t! Z5 O& u
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
2 J( H5 ~9 y! ^+ aMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */2 y- l& n: {5 C+ b
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
1 a  V0 n+ B2 A/ i1 a! d, GMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); $ e2 `! [4 h/ d7 O! C5 {$ m6 Q
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,1 N: m# G: I. C
0x00, 0xFF);
/* configure the clock for transmitter */' n& w& ?3 ~  t" c" r& x. R; c, q
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
# T1 U: [. W& _$ SMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
! ?8 Z" h& ?( y) _McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,8 J5 f4 g0 f* ]- b% l
0x00, 0xFF);: i9 s* T/ B5 a& n
2 t  I! c1 u( G' j) @
/* Enable synchronization of RX and TX sections */
. G9 }; ?5 G  `% ?8 F' IMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */% V( q6 d' L: b6 C2 \* F
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);1 l4 g6 |3 f! w9 H
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
$ o1 b1 a) D1 I" d, l** Set the serializers, Currently only one serializer is set as: ?6 F/ E2 v" \
** transmitter and one serializer as receiver.
) K! ?9 }" I) N8 x6 O*/
, |- H( N$ Q3 I- w; yMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
8 m9 k! O) }) QMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
4 s6 V; \# W8 R' i** Configure the McASP pins ( P, _& O! K/ }* r: f6 G
** Input - Frame Sync, Clock and Serializer Rx
) @6 z; x  c+ Y7 q! ?" E9 Q** Output - Serializer Tx is connected to the input of the codec 6 D2 h$ A* k5 ]) [" R- M
*/
9 V5 n. k( @, b7 \0 ]2 r5 TMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
$ t* e1 k' Z4 [1 e2 ]+ nMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));6 _+ h( v4 ~5 ~! d! U
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
( m# x# W) u% P. C3 o0 ?, ^| MCASP_PIN_ACLKX
* R* O  \$ k- ^, U3 {| MCASP_PIN_AHCLKX- {! X$ o! L0 a  s4 V3 F% G
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */" U$ F5 C/ ]. K
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
: \3 {( u% t$ D6 Q8 G| MCASP_TX_CLKFAIL # F. d& u! O* s1 `# x+ [
| MCASP_TX_SYNCERROR" I# v8 |" ]+ r
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 5 B  u4 j) Z/ B
| MCASP_RX_CLKFAIL
( M* |. K# X$ O0 ?  r| MCASP_RX_SYNCERROR ! c3 H" ]1 n! N
| MCASP_RX_OVERRUN);
3 X1 @) p3 i7 J, W}
static void I2SDataTxRxActivate(void)
, m  v( t6 G' ^{
6 H8 }* L8 y, _) Y1 z+ z3 u- D  Z, F/ z/* Start the clocks */3 j7 z  _1 @$ P; t8 b8 p
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
; S7 b* q/ V! t& X( e9 AMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */5 ~) L7 {' s4 ^3 g
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
# W3 b4 i, P; Q3 e9 Z: u+ kEDMA3_TRIG_MODE_EVENT);
! I7 s: {1 T1 Y3 tEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ( z2 v. r: h# ^9 ?) W9 F
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */+ P5 X; [1 j0 D; d0 a8 f% ]% w
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);! ]2 j& A. r6 W# E) o% [
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */( t5 z+ o+ u4 ~
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */- D9 G. G# E/ P- R
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
1 p& B3 R, A8 N0 F" h& {McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
7 p, y( B6 x# U& u) n}
5 `, I% D3 v  `9 O. u. g
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

( f, p; h) b  M. h( t% c




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