嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
5 }1 G; R/ P5 n# d0 b" Sinput mcasp_ahclkx,
2 z' E1 H. [- E3 ^: [input mcasp_aclkx,/ D. d) o8 a5 K& b3 w; B
input axr0,
" p; E8 r; i% k3 D' c, F/ w3 G, x/ i3 H% e! P. p8 _! L
output mcasp_afsr,
1 _- ]6 e8 q/ N" B6 l: coutput mcasp_ahclkr,, Z) C& i) M/ {& A+ @
output mcasp_aclkr,
4 w4 I( q# O% n4 `& @; `output axr1,. H5 }' `  K6 O. f. f) C- t. l
assign mcasp_afsr = mcasp_afsx;
# s! t+ u( _" l+ oassign mcasp_aclkr = mcasp_aclkx;# j/ G5 h# F2 E
assign mcasp_ahclkr = mcasp_ahclkx;
+ e2 f9 P/ Z+ H2 }' ^assign axr1 = axr0;

/ f  W9 k" y4 Q" V0 y3 ]1 n' h: }( O6 H
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

. e) ]- N: h: A5 o" _! q/ k
static void McASPI2SConfigure(void)
: [8 t0 Q9 p) _, v{6 j( b) p' M1 T/ Y2 y: U+ J& S
McASPRxReset(SOC_MCASP_0_CTRL_REGS);- ^  J+ o; V( Y9 |1 I/ }1 \) p
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */% I- a, ~* b" F3 s7 s. M
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
8 f1 _/ R. p4 |! c# MMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */; T( }, I( B3 n" |7 w
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
- g  k  S9 z; G' _: U: B! I4 U! p- p. v  kMCASP_RX_MODE_DMA);2 ]1 l0 R* h( E6 |! f4 M2 H" T
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,; T$ B- E  \$ l2 z8 g8 A) T
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
) i3 n% h; }: N9 D' GMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
. d" d; G% Z% q- O- F6 oMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
) \, j; ^) y0 v* M' S* `( eMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
* ^% f0 V0 [5 q/ DMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */; q% v; v' @+ C* f- x8 V) c9 k8 E
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
, Y+ q1 R9 C2 y! U. s" xMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
# D& K! R5 n5 YMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,0 i5 M1 Q" C) d, F4 w4 ?* q
0x00, 0xFF);
/* configure the clock for transmitter */
% p+ p: ]7 ]. w2 ]McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
+ ~# [- r# D3 FMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
" E' r$ V& Z6 a, _McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
" P! [: t  u$ V* C0x00, 0xFF);3 [& a5 h6 [- S# @

; C' O. r0 Q# s1 P0 U/* Enable synchronization of RX and TX sections */
* @2 s2 I% m& F1 v/ JMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
' w* K& ]6 b1 r) T1 {+ {3 gMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);2 m. k) s5 f) U* B; n
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*0 @; N. J5 \5 }1 q: m; L. `
** Set the serializers, Currently only one serializer is set as
: d3 }+ P# k6 H/ s/ P9 w1 k** transmitter and one serializer as receiver.0 u) F5 ]1 R6 N; s
*/
$ o: k; L; a* M! `4 q( ~: KMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
6 D* t+ L  f0 g* e( Y/ ^McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*' Y& T8 [* c8 t; g
** Configure the McASP pins
" S8 k4 h0 I5 P: |** Input - Frame Sync, Clock and Serializer Rx! l3 T: W7 {; S
** Output - Serializer Tx is connected to the input of the codec # e; F; ^4 f$ ^4 K* e
*/
) a9 S6 z6 S/ ~7 \- }8 M6 s' l4 c& ?McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
* _! a4 ~5 q* H1 e1 y9 M+ s0 N' M" O2 MMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));2 C) L. I$ x4 L9 P: M! k' V  i
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
1 }/ p4 @1 {' p| MCASP_PIN_ACLKX" C( g2 M' w; k
| MCASP_PIN_AHCLKX- e" U# j8 L3 l
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */1 M6 q$ x* c# ~, U' }
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
. i. e0 o( [/ L2 c6 G3 F% ?| MCASP_TX_CLKFAIL
1 Q7 b3 ~4 P8 `; E$ [6 G+ ^| MCASP_TX_SYNCERROR5 M3 n$ t5 k$ Q: B; Y* m
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 0 d- x: H. L$ D5 z
| MCASP_RX_CLKFAIL
9 m" c) _/ S; G| MCASP_RX_SYNCERROR
2 S6 G2 P7 {- d( K! R| MCASP_RX_OVERRUN);0 Y/ H" y- ~' d0 K0 s2 w
}
static void I2SDataTxRxActivate(void)
/ ?. T# q9 b. {  R% t7 v3 V6 c7 w{/ j3 ~& Q$ [" O5 ]0 \& h
/* Start the clocks */5 @8 Q6 ]; Z$ O, w* Q
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
/ h  {+ A0 w- @& h9 s7 jMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */: {$ O2 f% D5 o' N( V5 Z
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,; t; Y, g) q7 W! ^( w9 Y4 {
EDMA3_TRIG_MODE_EVENT);
( L" _+ Z$ k0 G9 [7 B+ ^, I" BEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 0 V$ p3 c5 E' x8 W0 W
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */# \5 E) C+ |( P% O, |/ K
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
* l/ g* |$ S$ {. IMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */2 V9 F" W8 s- ~
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
) r1 U; c# X9 S& q6 x) LMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);! O; W8 C/ ]8 o6 G  n" N* d+ Q' O9 {
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);# `1 W: w  p8 \- E' ]4 e
}

- V* D. {& L  ?1 j% L1 |& r  z
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

% V4 q, _$ x; m  j; T7 f9 w7 G




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