嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
7 G( T3 U) r5 Y: ]/ binput mcasp_ahclkx,
( n1 g1 N7 o& q9 linput mcasp_aclkx,+ b8 B' k& \) p/ P
input axr0,+ S' L  d: `. _, {( @4 o! a

% ~. n- P% i+ q) F/ o" moutput mcasp_afsr,
/ H6 O: w* G; ~7 l! Ooutput mcasp_ahclkr,
/ D  j- M7 I. R3 noutput mcasp_aclkr,
5 ?# H$ S/ W% i  Coutput axr1,/ Y/ i2 L( p: Z: s5 t
assign mcasp_afsr = mcasp_afsx;; f6 I$ o$ X" }" n
assign mcasp_aclkr = mcasp_aclkx;
! z* i+ U6 X2 i. d6 j4 tassign mcasp_ahclkr = mcasp_ahclkx;
% P, o; ?& h! I. Uassign axr1 = axr0;
" U8 J4 Z- t# _& A7 @% K

3 K* N5 t  U1 J$ [- z
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

$ b5 f+ D8 a  l! ^! B4 W
static void McASPI2SConfigure(void)/ I! J. v+ f1 f% Q
{
, h4 u. b# U) D& I& ZMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
! l, {" t! W( ~1 k8 i  NMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */, K9 G" n# H1 f7 A
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
, l. C+ o3 \, T* ^McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */; h  f9 n& R% z0 Y
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
" }1 c! b- X0 W9 X! A- Y9 j* ?, X. R+ tMCASP_RX_MODE_DMA);! n- w7 x5 z* B- }
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
9 z  X+ w( d; y. s$ EMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */6 E$ f$ L  P% q# f) K1 D
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
( r) z- z! d7 ?3 f' r" e- {" z" BMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);$ M+ t6 g) E3 o/ n( ?; o% X6 H
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, / ]) P3 g) F( R7 P" F# g! `
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
. s* U, j: B9 LMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
$ Q' l6 i" g: m2 b5 o) O; ~$ L5 fMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
: |9 q6 ^0 |: d* K; ?3 ^McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
; ^7 Z2 ^5 X5 l8 A/ l0x00, 0xFF);
/* configure the clock for transmitter */& n0 i$ Q" A# ]3 d8 r
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);9 J8 T- M  s8 V* w1 ^, q% T5 @
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
) l0 x5 l7 r% _/ S% g+ Y! g* pMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,. T& k3 B! d! f* Z- |: v
0x00, 0xFF);+ c& i2 ~7 ?% u' ?) z& t
$ H9 [6 m5 B) R$ m8 j
/* Enable synchronization of RX and TX sections */ . H3 K8 f; w8 {1 r; |, U; P: E+ |
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */# e4 G3 L* [4 m  c. ]* k
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);4 X, f# \) n& n3 w$ C
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
+ M  O" G& B4 G# ?* I8 h** Set the serializers, Currently only one serializer is set as
5 v  G: c+ J$ E, k0 l** transmitter and one serializer as receiver.
' F" X0 J6 ^$ @*/
# j1 l" [; p2 o7 i1 |% @McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
9 W& F+ N& s* l4 C% _McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*3 \7 V4 P- Y8 u) `0 N" p  @
** Configure the McASP pins
3 ^$ f8 R% W  q  s9 V** Input - Frame Sync, Clock and Serializer Rx% Z* T& f9 U6 E& d7 {
** Output - Serializer Tx is connected to the input of the codec
% k5 |/ X( v' O/ U3 |*/
3 }: y. D9 e- X$ \( _+ s% tMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);' j5 a5 {, W' R1 Q  h
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
6 z- b5 N9 ^* MMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
+ s: O1 a/ A! B! z9 R9 {1 t| MCASP_PIN_ACLKX7 ~- H% f7 u6 q" O- Q5 Z% ^
| MCASP_PIN_AHCLKX
  H% {( |1 h/ d' z9 E$ @  J| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
3 J5 V8 S3 J! D2 Y, `' kMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
. \& b$ e% K! r| MCASP_TX_CLKFAIL 6 U+ a$ l! `5 F
| MCASP_TX_SYNCERROR
9 t: X1 M1 T( u| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 0 D3 q  ^! b2 x' o$ q
| MCASP_RX_CLKFAIL/ J9 y, k' R/ Y$ ~4 f1 q
| MCASP_RX_SYNCERROR
* w: c/ S1 G1 m| MCASP_RX_OVERRUN);- Y, E. o) H/ ~, u/ @5 j3 h" a
}
static void I2SDataTxRxActivate(void)
5 w* o8 {$ t6 \) y7 m' Y{
: j* C, R9 J' @& `; J4 O/* Start the clocks */
* q2 I: Q6 Y) a- ^$ `McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);0 c' q" f" S5 Y
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
$ i: P1 D4 \3 n7 T8 v( K) yEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
: T# L( t  s' V) i5 y. }EDMA3_TRIG_MODE_EVENT);
8 J7 ?0 f( j. ^( CEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, " J* e% g- U: }; R7 J
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
) W. d( R  f5 uMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
" Y. q5 Z; Q/ t8 \1 nMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
  e$ \4 S! F+ f1 @9 y" E: ?while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
8 m" F- B, l5 C- g/ d% L4 ~& S; aMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);, d1 A0 T$ W4 I6 t1 P! N$ [
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
/ S8 i. i. u6 C7 ?}
7 x+ ^0 b( \: Q8 q: h3 ~2 w+ c$ b
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

0 w/ v4 y& k  q  `: [  M0 V




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