嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
! W( Z" p# R, J; T( }' e* N9 iinput mcasp_ahclkx," f" o1 s6 n. e1 M
input mcasp_aclkx,
9 @0 Q+ F: l8 u+ sinput axr0,
) E9 Q6 X, Y7 f& K+ A& Q7 B$ c% ], G6 {7 Y; B5 o
output mcasp_afsr,, i, T9 L. K7 _! i' Z
output mcasp_ahclkr,
; d8 u! W$ B- I% ?# G4 D Joutput mcasp_aclkr,
) T$ A7 h* G! t' J# T, _output axr1,
# m) i( U9 U' w' e, X5 E9 a
assign mcasp_afsr = mcasp_afsx;" d" M/ S w/ w. c, i2 }, Q
assign mcasp_aclkr = mcasp_aclkx;
4 a- V3 v* I# p5 \$ w& l% wassign mcasp_ahclkr = mcasp_ahclkx;
/ Q2 ^! s( D- Q& gassign axr1 = axr0;
# w3 G" x9 F! s
: v; q9 F9 m5 K/ L* Y2 R8 m {在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
7 A8 E' H; c( S
static void McASPI2SConfigure(void)
$ r. M0 u) Q% U/ O2 h{' a8 {- J1 j ]8 R( c3 g% o
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
q( ]) y* z& K: a+ N D1 tMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */0 _; G$ {: |5 @- B( [& z
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);3 Z9 z3 P3 L2 h1 G/ j0 ?2 i
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
8 p/ i* N& B. m O: G+ u. k; FMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,# W: d; n6 N; K! {+ ]" s ^2 J4 t
MCASP_RX_MODE_DMA);
& _3 K8 X, Y$ s' c9 |% Z$ V2 |McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,0 ?3 l9 t" W: F/ m8 j! {
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots *// C [$ U7 A( a0 [9 r5 F1 M$ i" J
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 8 S; t5 Q4 ~5 F1 B% _3 `: J! I
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
+ b2 {- C& t0 c4 J* `2 lMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
, v; n8 N! m) Q# \, OMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */! M+ {9 k1 d. S5 u' @# P
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
+ w, n: E" [5 ]McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ) \- [8 c3 k2 J
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
( W- r6 @' A$ s7 a" J& c$ A0x00, 0xFF);
/* configure the clock for transmitter */
+ u$ C6 [( Q5 C, x& q9 nMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
5 h8 ?- t0 Q8 P, mMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
& ~0 h6 q: Z2 P; kMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
* ^9 B+ ~. X7 b0 \0x00, 0xFF);
4 M7 l' g$ w0 `+ \2 n8 x! r# l
/* Enable synchronization of RX and TX sections */
; h' m- H. n& W8 }) |McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
, {/ A; y( Y) eMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
" R6 c4 P+ w9 sMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
, m, d* ^( `' A( }& d" R# `$ g** Set the serializers, Currently only one serializer is set as4 }* I% K: Y. u! `# L
** transmitter and one serializer as receiver.5 |* R7 ?0 L# i! `) A
*/9 [# B& ~; O9 S- F1 C, _8 u
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
0 _4 K! i* r9 CMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*1 ^' a+ U9 E& M- t- w
** Configure the McASP pins ' a0 ^5 l8 C+ B3 X0 M. K
** Input - Frame Sync, Clock and Serializer Rx/ r* [1 M) f" Z- R
** Output - Serializer Tx is connected to the input of the codec
1 u5 s. U p, @, E. S*/, L" r @2 `* }: W7 w* G
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
7 j- z( _0 [+ j- P# E) N- ?* ZMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
" D7 y2 y" N' H* ^* R; [McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
' u: L5 J/ V V$ `| MCASP_PIN_ACLKX
5 { K& B0 s; ~' i+ q P! K3 p0 r| MCASP_PIN_AHCLKX" p4 W0 q) D3 b! O7 n
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP *// J9 `+ ~- D* N( w3 W
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
4 Q. \( \7 ^4 E, Q9 T z+ Y2 c| MCASP_TX_CLKFAIL & o/ B; ]3 w L; S+ e! w# ~: ^9 u
| MCASP_TX_SYNCERROR
5 q+ ]# e6 O4 t/ M6 E# T| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
6 G, p8 h2 K" _. ^| MCASP_RX_CLKFAIL
. M* Y. u3 C: u) n) L" U! ], Z| MCASP_RX_SYNCERROR
8 V( i9 d+ g- U$ {, ^% k# u5 _| MCASP_RX_OVERRUN);+ `. e9 |3 c' { h2 h& m) P* \
}
static void I2SDataTxRxActivate(void)7 [+ i9 ^% X9 ~# V- M/ b
{1 W3 y9 X) m9 b G9 ~/ u
/* Start the clocks */1 X* C; x' B6 @+ b6 M
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);2 K+ l+ t- Z+ u) Z# H: u/ z
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */6 N/ C& e+ ^5 B7 ?5 p
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,4 ~6 o' a4 j9 x3 u5 R2 t
EDMA3_TRIG_MODE_EVENT);
2 m- U+ a; ]9 r" P5 x2 F: k1 W+ ZEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
% E- Y9 g4 B1 }: k) ~EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */) F& g5 T4 x. D% q) q
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);* b2 k% t2 q, q/ p9 K, `
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
. G; X9 o# o- n! n/ S; \while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
; U+ j! t/ p5 k: m) D( OMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);1 K3 A6 m1 y! A, W: P: y5 p* t
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
4 s# |( _. Q. j( N/ v8 Y: o% G}
+ z, ^& o- m- J w请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
+ `: Z% ]/ b! u% J& |5 d- P
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |