嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
/ D4 a; D( |; Tinput mcasp_ahclkx,
" q$ H3 P6 p7 k; jinput mcasp_aclkx,) Q7 h4 \* O: \% p3 ~
input axr0,0 {- x. n  a/ x& o9 d
6 ?7 T# m. g& S( h
output mcasp_afsr,
7 I' M# k0 F' Z  Toutput mcasp_ahclkr,
. r8 y2 g* f+ x4 _* Coutput mcasp_aclkr," S- C/ r- T$ ?+ J, k0 n
output axr1,
* Y8 ?; _" D& B  P: s
assign mcasp_afsr = mcasp_afsx;9 F# |6 d  M% u
assign mcasp_aclkr = mcasp_aclkx;6 _# v' Q5 i1 c  U5 J( u2 N$ a
assign mcasp_ahclkr = mcasp_ahclkx;" n7 ~1 R+ }7 g+ s9 z/ ~* o) [
assign axr1 = axr0;
: X2 ~( o8 Z5 m8 \( M; k
: J8 f0 C' Q3 @9 Y- O. n
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
9 F8 [7 U. r) H
static void McASPI2SConfigure(void)
: h9 b! Y" B4 Y. d6 W& `8 J3 K{0 F! m( c$ g+ _4 u4 S- U
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
6 c6 [3 M" e' b& y5 mMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */% b/ L* ?# g& o; R2 D0 y
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);8 {/ p( k# h0 h/ O9 c  @
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
$ K1 e/ _) Y! v! ]McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
" u" H& M% t: E! E1 t: M5 mMCASP_RX_MODE_DMA);
- T; i$ Z/ @9 _1 ~: s; D* h* UMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
+ I8 P# L( u( O# C+ `! E3 C$ r9 GMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
& S% T1 B+ Q7 N: }* v. P( J  xMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
# A" r. X  @& R: \3 DMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);' }; B: D) c. |& ?$ O
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ! k/ N7 e/ n/ ~  v, ^6 ^
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */) ^6 y* o% i+ f
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
6 X% P& v; Z6 ?8 F' x' ^McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); * U- V" ^$ A* [6 A5 Q1 W+ B1 ?
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,2 W4 C$ @. K3 G1 `/ @! ^, w
0x00, 0xFF);
/* configure the clock for transmitter */4 B$ r! H, B6 O) Z/ J% Z1 G4 C4 j
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);. k  M7 h& k2 q, M, g
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 8 T1 V, b" C. O
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
6 x% m1 q  [- n& u7 B$ ^0x00, 0xFF);3 D; Z# e  W. i4 V1 B/ r
5 _  c) B+ Q1 u8 x9 F
/* Enable synchronization of RX and TX sections */ - C4 L% {3 w/ Q1 h. s: u
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
! N& `, _  g9 Y2 t- ?7 l# o& iMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
. X8 M" {+ p- ~: ~7 T! WMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
' K4 E$ A0 N8 a, t& t** Set the serializers, Currently only one serializer is set as
# h& B, M  F% \# t/ {5 g, [** transmitter and one serializer as receiver.
% v9 H" x2 D: f6 i7 j- o4 b3 |*/6 o4 G5 L7 ~6 N, l
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
! ?+ M- U+ S$ w: U9 w/ M5 U- tMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*& W& G- d4 d, ?1 M
** Configure the McASP pins
! S' e. F0 p8 C** Input - Frame Sync, Clock and Serializer Rx
7 x4 R" W& l' r& l4 o9 S' y** Output - Serializer Tx is connected to the input of the codec
& k! m3 Z9 b' L9 h*/
, \6 }4 v7 s# R7 [McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
6 e- l2 Y2 x; U) W1 G# rMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));% i/ ?: n& V: @0 a- D1 |3 B( j
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
  _$ O4 {$ [! R/ @| MCASP_PIN_ACLKX
3 M0 d0 U; b: A8 T' c| MCASP_PIN_AHCLKX9 S  K0 {4 i3 K% _" \
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */- h$ t, ~7 H& [/ i/ Q
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
* ?6 ?7 X* @8 o7 R. h| MCASP_TX_CLKFAIL
* a9 I$ D8 i1 J1 v! o% S| MCASP_TX_SYNCERROR. B" Y- k' F+ S/ @
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
' C. Q& L% ?9 ~7 |5 H' Z* W/ i| MCASP_RX_CLKFAIL
4 p, S, {! j( q7 y. k9 U. K| MCASP_RX_SYNCERROR 4 l' k$ a% a9 H4 a6 j' @
| MCASP_RX_OVERRUN);8 {6 O; D6 U( P/ }7 w+ {: C
}
static void I2SDataTxRxActivate(void)
1 S$ u" h. v' x- N{1 {6 f$ P1 j/ t" u
/* Start the clocks */
4 E! l2 Y- g5 M3 o: O% YMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
% ]% |6 [5 f' ?, L7 g8 YMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
2 K8 o8 R6 J1 p) o1 d' dEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,5 }0 _: k, ]7 ?; `) e
EDMA3_TRIG_MODE_EVENT);6 B) o3 L" r; c) K; y
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, & l4 \1 _; i7 I$ y
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */3 ?6 \, X( w  i2 p1 J
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);" ?  ]; e  e3 _/ q6 g  J( ^
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */* f4 Z) \5 |0 z* T! z
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */! J8 s5 G7 C6 u* d! c
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
& k% Q8 G6 `' g5 X2 TMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);( u! \$ t9 ]  I7 v* f1 D% `5 \1 R
}
" \. h/ Z' d( D! d/ D* ]; t! ]
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
/ G4 g+ F( w9 Q: z





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