嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,/ K2 |1 ~# T0 h, x
input mcasp_ahclkx,8 m; ^ d7 q2 L3 g: v! A5 l
input mcasp_aclkx,# p+ k9 c! B3 f& H# @
input axr0,3 H Z1 l& h& ?0 j
% ]1 K. K7 v: W& b k: \3 t: Poutput mcasp_afsr,( n& i- I; r2 B
output mcasp_ahclkr,4 x5 {" D5 H+ x1 S9 b
output mcasp_aclkr,
) U& P- P! [, U: C1 u5 T# C noutput axr1,3 \1 p- Z% w; z
assign mcasp_afsr = mcasp_afsx;2 \) }2 I" w$ H9 }( S2 x
assign mcasp_aclkr = mcasp_aclkx;
% O4 ^8 k0 D7 P2 \; `1 c8 sassign mcasp_ahclkr = mcasp_ahclkx; y) J7 T2 U1 U3 { j j
assign axr1 = axr0;
. X8 @% `; b2 V* m+ E
1 Q/ n/ w1 @" q2 S
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
; {, `/ T( J( {- x& I6 n4 ]4 \& Z
static void McASPI2SConfigure(void)
- z/ X, o0 Y8 z7 h{
0 \5 v3 {9 S) n1 n8 MMcASPRxReset(SOC_MCASP_0_CTRL_REGS);' ~6 B- |+ d* i" z- l1 q
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */& n: S$ u7 s3 C4 ]% Q
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
2 \. U# T7 W2 o: ], D2 L( PMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */3 u* \: ]( W: [6 @7 \
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
% V- \* _" F4 M9 u4 n) j8 rMCASP_RX_MODE_DMA);
4 s1 H) D( ?- j0 k6 p, s' kMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
- _/ c; N5 l, u" m9 bMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */5 i' g7 a. S. U) A( q- Q4 z
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
$ r- X4 m2 S5 t. o% g+ C5 I( `: mMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);3 n1 |% ?; P9 l) v- O
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
4 L( C' Y1 P, |9 j" p8 LMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */" V2 `8 d& J2 w4 @' I7 @ y* t
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
* O* s+ s. G( O eMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
) i6 ?5 t' r) M, m& J; x5 TMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
; F4 @4 c3 |: Y, E: z8 r) X. {0x00, 0xFF);
/* configure the clock for transmitter */; g, f' |! t" a
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
) F! E( G. {; A, D7 XMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); / m$ o- w5 ^; F; |
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
/ e( T& Q( l" C0 Y! {) L2 D0x00, 0xFF);
% m6 C" b& h' V, h, L: g. f/ X
+ l6 m S5 N6 a+ w7 i! _/* Enable synchronization of RX and TX sections */
) l8 u4 O" F# O) @McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
2 Q Z q3 F! P' d m3 ~7 t; MMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
! `" N* \ P$ D8 vMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
9 R+ J2 f4 N& S% ^, V** Set the serializers, Currently only one serializer is set as
" T% y. m! |4 ~' {! v** transmitter and one serializer as receiver.
6 g. T- ~8 |. y, ~$ S) Q' ^4 L& b*/0 m1 `+ ?7 M% I' p, {9 W
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);# T' _) D1 P- _. }
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
2 j. n% h' R0 ~' y: a+ _** Configure the McASP pins , s0 T! Z0 V: k# v4 F
** Input - Frame Sync, Clock and Serializer Rx0 J; n9 ^" M9 Q/ @! l) V3 O
** Output - Serializer Tx is connected to the input of the codec ) u/ K2 K6 _9 d6 x1 A$ i
*/
" n! K; j6 g$ F- O2 F: Z! ?) {2 oMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
" [! Y0 e" S- t/ zMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
5 }+ }! N- L' s' g* S% |McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
0 V" @2 E. Z) v| MCASP_PIN_ACLKX
; g: D- M! B* r( J! j9 F+ ~; L| MCASP_PIN_AHCLKX
! Q e+ s2 x3 g2 S% U7 N, A3 d| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
" h- G. I1 _+ l# x# r, c* T' p8 _6 OMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
+ @0 J8 `7 f0 r2 F+ |4 @7 }6 {| MCASP_TX_CLKFAIL
) r O4 u9 D" ~$ I| MCASP_TX_SYNCERROR
1 T: i- R; Y" s7 S* k| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
3 ?: t" D6 U& p+ k. U% s| MCASP_RX_CLKFAIL5 A6 r, P1 E E& ^
| MCASP_RX_SYNCERROR
) |' M! |' p# ?& x| MCASP_RX_OVERRUN);
. U# J C& p7 c5 Z* j8 b}
static void I2SDataTxRxActivate(void)
! m5 d9 [% [) H! v) v4 J5 i{4 H5 F; [8 X9 e* b
/* Start the clocks */+ ~, k, Q: c$ Q; O$ c9 ]
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);% F: j g$ `0 j, g# m% t% D
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */% @# q1 l- E& ?+ [6 Y8 v% g
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,& K' I) _1 A: i5 @
EDMA3_TRIG_MODE_EVENT);7 ^ n- j* E/ n$ @2 ]# }5 X
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
2 F9 L+ d: v" j6 D+ UEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
. \) o5 i; D( Q( Q% a) lMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);6 }5 K# A4 ~" ]: c
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
5 Q" v3 S( |3 v B6 k, Ewhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */5 h$ t1 |8 t2 b; Y6 w# t
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
. @5 F- h; T+ K' d, J% p$ dMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
* l1 f& n+ G$ ?% N}
7 I6 e8 Z$ n9 L9 ~1 x% }请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
% @# m. l2 g1 H/ ~
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |