嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,. F. b0 m7 x1 ^8 @! `
input mcasp_ahclkx,7 t! P. K" g% [4 Y: M# d
input mcasp_aclkx,
: F( e& P  {$ r4 Z9 V4 s) q3 C5 u: }input axr0,0 ~2 V4 E, H4 @& c8 y6 i1 _6 c' G

6 G( e" _9 i7 D) Z3 O$ N* A8 |output mcasp_afsr,+ I, O( x/ g8 @" U' g
output mcasp_ahclkr,# q# u& t: u$ H9 G& m/ t
output mcasp_aclkr,
3 R5 l8 j% B+ coutput axr1,/ h% p8 o* G6 b$ p& _0 O) ]1 H
assign mcasp_afsr = mcasp_afsx;
6 W! N+ {, _4 N& Tassign mcasp_aclkr = mcasp_aclkx;1 g! ^5 q  E) \. m! m* v, J, D
assign mcasp_ahclkr = mcasp_ahclkx;$ }( Y9 b& D, c) q; j8 p
assign axr1 = axr0;

, R. ~& ~* X1 n
0 U9 z( e$ r) n9 t( z1 {
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

+ O/ g( l$ N5 L' C
static void McASPI2SConfigure(void)" D% h$ x8 K0 W! _- S' E
{
, O- B4 t& s/ `  |& zMcASPRxReset(SOC_MCASP_0_CTRL_REGS);/ W6 N# y6 P9 V* J
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
0 x, q- F) m8 F3 w0 J) nMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);. @, w- l7 ]/ ~1 w3 x4 u
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */6 n% f$ o% J# H
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE," z* N( \' z2 W% [) t
MCASP_RX_MODE_DMA);
. O% @& j9 E" W. x: L% MMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,( V% n0 ]: M2 j1 ^* ]
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */  w# p! N) t7 F$ i4 a# q8 M4 D0 j5 Y2 U
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 6 u* y: Z8 p4 w0 G+ w, `+ d
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
9 m4 [& X* D4 s$ FMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, & Y" m, T. l# X, m+ E& q5 r
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */+ _2 c/ Y+ i3 B, K( D& ^8 J
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);+ z( I1 x3 p9 j
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
  Q4 ?7 P, D( k! MMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,6 z* {" i; _0 M% L" t; ~1 ^
0x00, 0xFF);
/* configure the clock for transmitter */8 A$ @( V$ l( K: U7 ]% [
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);: @  h! b, j9 V6 l0 m7 M
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ' z' P3 m- t3 J4 ?
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,7 ^+ j; P9 X5 u
0x00, 0xFF);
7 G  A: x+ Y. j5 u1 A
4 e' k0 t( p. l: O. ]  A( f  l9 I/* Enable synchronization of RX and TX sections */
4 a' @% \5 V$ b1 T/ D4 r9 nMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */. ^' E) Y2 ?9 z) q/ W  u8 y
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
' y& A) _% Q: P3 l, s( r( hMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
5 g) B7 W- x( M6 s' v# T! P- [** Set the serializers, Currently only one serializer is set as4 r: G- \9 l( V# b
** transmitter and one serializer as receiver.
  F6 s6 K7 M) E  F3 T/ q3 B2 B*/
% ]3 [+ a, ?& q- F3 A7 PMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
! w1 ^0 m* @8 o; Y2 w* jMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
' G: N2 G; X" c" Y5 ^** Configure the McASP pins
+ `4 i3 L* I$ G** Input - Frame Sync, Clock and Serializer Rx
! P; s( }) r7 K" I  M8 n( r" ^** Output - Serializer Tx is connected to the input of the codec
8 p( c. J6 b: J$ q9 Z, z$ ^, T4 h*/3 ~2 y, o  s7 b! G9 r. w
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
# ^3 _4 d. d  wMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));  O" h, n3 W. E
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX4 r# m" y& Z% s; P
| MCASP_PIN_ACLKX
$ L& v' L- C! l5 j% n& o| MCASP_PIN_AHCLKX5 u: C4 m1 i" l7 j/ v
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */% a. A' \  l( }+ a
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ( U% G- C  B  \$ V5 e5 E
| MCASP_TX_CLKFAIL
2 B6 D) i1 x# r3 n: e: h! y| MCASP_TX_SYNCERROR4 j: m! g3 h9 C. e% [2 i+ A  f
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 3 R7 ], z5 L* T; j; r* Q5 |
| MCASP_RX_CLKFAIL' F3 A' U% V. b- v/ A
| MCASP_RX_SYNCERROR ; n; z  i3 k# V# W
| MCASP_RX_OVERRUN);6 r2 r- @) D; E3 N
}
static void I2SDataTxRxActivate(void)2 P  `) p& ?$ I. |
{
! u' r& L0 r0 j1 s% D3 s/* Start the clocks */
; T- G6 {) h, w, B$ G1 N4 xMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
- Q( p. S! l5 S) hMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */$ `  T: }  T/ h/ n% |$ t. N2 N
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,2 w8 ^; {" V& P9 c# @6 Z. ~! x) o$ W
EDMA3_TRIG_MODE_EVENT);
6 ^% Y, E! V9 }1 c- H( B: QEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, & o4 R1 T6 q) J# p# N8 y( N
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
' X( n0 I$ a! h7 e' p5 kMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);4 w- @# t" h3 B0 C; u6 A4 e- @
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */9 z/ _, u1 x- r# w7 @( X* S" W
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */9 e5 _8 D$ U6 {: A# j. a
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
0 N8 B' ~% M' ?3 {! JMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
8 x- y/ J4 O. k% ?8 n7 `+ |}
8 u5 c! i: p: v! C* M; T1 V0 A, C
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

  s# R% {# ]" j' L( I- f9 d




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