嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
9 ^9 y" N1 G0 G4 S" r- xinput mcasp_ahclkx,) p# |, z* I5 `) o
input mcasp_aclkx,: s) m8 _$ U4 ?" ~
input axr0,
3 ^' D( h! \) P8 S- ?/ H+ \# D8 |: Q
output mcasp_afsr,: t; W7 ^1 M- I5 v2 ^4 b
output mcasp_ahclkr,
  b0 X. b% _4 X0 p  Loutput mcasp_aclkr,$ f9 ], z) w+ @9 _! S; k
output axr1,
' W& \: ]) q4 n' {' A
assign mcasp_afsr = mcasp_afsx;2 _, l1 U, s! O5 M. A
assign mcasp_aclkr = mcasp_aclkx;! H& q8 R& W% Y9 M* c  `+ X
assign mcasp_ahclkr = mcasp_ahclkx;/ N( h3 {) F" Y0 V# k; {& I
assign axr1 = axr0;

) v) p9 d0 v7 o' i
0 a! ~$ [* x' g6 x) o) g
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
( C3 f. `1 [" h# }) ]: e
static void McASPI2SConfigure(void)9 v" `7 e; l& Z! g; l
{
2 t7 \; N5 L5 g7 }5 w0 Q3 |1 v7 hMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
0 L6 {5 e" t& ]# F& ?McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */, e( s3 f4 a* t6 G' e) {" Q( x
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);0 H" Y- X, m& o9 b0 y1 n
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
7 z; ^8 D- W9 H9 |# F- xMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,6 r; v9 A! o, d, o6 W: g
MCASP_RX_MODE_DMA);  t6 s# v7 N5 ]1 K. L1 X
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,8 W9 m8 i# u6 C* L" ?, D
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */: L& ?% s0 S$ R% [3 x& v
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, " s# \; P+ F& h7 G6 H
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);7 q" \3 h" a$ d" l: I
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ' H$ T: F4 ?4 e8 ^$ y5 ]( C  _5 ?
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
; z' r% x! w8 R8 N8 S" h* rMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
; J* j5 }0 P6 `( ?8 ]McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); # i8 g/ \% e8 j% ?# d
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,4 J6 x3 `( ?; i. m- a- k3 N
0x00, 0xFF);
/* configure the clock for transmitter */
5 o3 M! Y& L* }  XMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
" s- F5 {2 F' O& O: BMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
% C. Y4 \6 Q0 a0 lMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,+ j4 N" K. k2 N2 j9 ?$ Z/ ~
0x00, 0xFF);% r$ @. L7 ^+ g! q$ i- o
; ~$ y2 _; C, i- X3 l  Q
/* Enable synchronization of RX and TX sections */
* G  h1 L, B1 q9 t* e: ZMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
+ p, ?  ], D% g+ p! U( y. cMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
: O4 `$ G' S# R6 G/ OMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
8 o) o3 n* K' f$ B# B; B** Set the serializers, Currently only one serializer is set as" K& Q" c6 \" u( y* P
** transmitter and one serializer as receiver.
2 E3 E" `( T( Q; R/ W, a; P*/
6 d- F( a8 n3 r/ X6 N6 U% PMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);1 b. n. S* a% J* o, r- @
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*. a  [( ?: R+ i' g
** Configure the McASP pins 1 L9 v5 h% U+ s( U" r) U) B$ g: M
** Input - Frame Sync, Clock and Serializer Rx$ I: I# E$ x8 K
** Output - Serializer Tx is connected to the input of the codec
! {$ y2 l5 ~" O# _* f3 t: M* F*/
0 v% K9 `. h6 }+ w* F, qMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);. Q( b  ^$ r0 L. Y. e1 H
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
7 _! f- J4 U/ G- `; W, e" GMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
4 B" P, o/ X! v6 e$ U| MCASP_PIN_ACLKX
. ?3 ?. W& P$ f" e| MCASP_PIN_AHCLKX/ K+ }5 {0 u- F5 M7 ?! N) f
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */. R1 v- B9 f' j1 }; r1 r
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ) n* r! x6 c! v; e1 s) C; `+ |
| MCASP_TX_CLKFAIL # Q- @" ]8 X/ X
| MCASP_TX_SYNCERROR
2 k. R( {5 w5 C3 C1 H, I| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
6 X; [6 ^0 c% S7 m7 t| MCASP_RX_CLKFAIL
" m/ [: D1 V8 r6 f4 i# E| MCASP_RX_SYNCERROR
+ J- t8 a8 T6 z5 Y0 u| MCASP_RX_OVERRUN);" ^& ~* J! u) {( U6 V
}
static void I2SDataTxRxActivate(void)' ?& A2 K* e" S( p+ b2 g
{, l- D, O/ \5 r5 I; y3 ?
/* Start the clocks */, m6 J: z/ {: E9 z) X
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);$ m8 W& a% c3 F# a# ~* H
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */5 E# o  M/ Y; v- @
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,& {: j/ p& U# X: C
EDMA3_TRIG_MODE_EVENT);
; i+ u, |  |4 K% gEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, " {6 r3 U) j3 G3 M$ f8 H! V
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
! S1 Y$ A6 |" HMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);8 q) e5 s7 m8 ?( T8 f' O$ G' O
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero *// r# c6 V: S: I. Y( Q
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
- G  e, Y5 H$ V8 j! f& yMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);8 u  p' S; a, W$ Z
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);7 J& g& Z$ s, P7 }; ^. [& [' K
}

9 [( ~: {4 I4 S' n# c5 P. k. w
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
, w  x5 n+ l+ V8 O  z1 s5 M





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