嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
/ ]; v  G3 h+ Vinput mcasp_ahclkx,  c5 ~. ?& n& T4 s+ t- T
input mcasp_aclkx,* u9 `5 j4 U% V5 Y/ t) i
input axr0,
& p$ ]% V9 J' r" w- B7 k) ^8 G$ b: ^' H1 P( x) `; j
output mcasp_afsr,! L( l$ {* Y& T
output mcasp_ahclkr,( p4 Q1 r7 j$ w" _. Z" c
output mcasp_aclkr,
" U# z9 |; a' ~6 D2 _/ C: L$ o/ ioutput axr1,! P. Z2 d7 v0 f; j; V
assign mcasp_afsr = mcasp_afsx;8 b' z; E5 w3 o1 G- f  G- V
assign mcasp_aclkr = mcasp_aclkx;
8 ^  Z, U! b% t6 ]+ m8 k8 ?assign mcasp_ahclkr = mcasp_ahclkx;- i9 t& I! K2 `- c7 ^4 g, _0 p
assign axr1 = axr0;

+ y* \! Y- I! ]! ]: S/ x
9 K8 _  Q5 H0 _/ X2 f7 l
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
% D" k' D. D, s$ w9 I
static void McASPI2SConfigure(void)( [6 K. I# E1 Y+ n+ u
{  A, f  x" F  `; \! D7 o# R: U* @
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
  G8 t9 p; b! N# c" fMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */$ V( ~: V8 w% ^
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
7 H: m# c4 F2 h* HMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units *// \0 {* B6 l, ]. n9 d3 P; l" A3 P
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,$ k, k+ A& Z- C2 W2 P  S/ P
MCASP_RX_MODE_DMA);
; r% Q& m1 q. A" @McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
( |2 j. r  c* J9 D. sMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
1 M2 G  z; @4 QMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ; Z3 w$ ]0 S: w
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
9 m# {4 n0 p7 t+ G. l& UMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
# ?; w/ \8 ?- L0 e# O/ q1 z) oMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */, I0 \' p/ c$ t6 E; [% u" O+ `! ]
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
* j* [0 M) f! _# L6 b& }9 f! vMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
# N4 Z( k: ?& @5 h4 SMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,! j" ^$ n6 x* @: K! x: {
0x00, 0xFF);
/* configure the clock for transmitter */
" T) `! H6 P/ B" g4 J  hMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
6 ]4 c" v; k* U) A# h, l( oMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 3 B! }- x3 T2 q+ r
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
: O* @9 L9 x, G" s' k0x00, 0xFF);' r9 _* n+ a! @' {' t% L, y

% u- O3 [; v5 h/ e. v1 b/* Enable synchronization of RX and TX sections */
( ]% I3 Q; N  S2 c2 t2 F) X6 NMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
" p/ Y- ?6 \" M, W6 J3 YMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);. @% n' M1 v# y9 \' ?$ {% Z
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*( A3 J, Y2 d0 [' v) `: `
** Set the serializers, Currently only one serializer is set as2 X* N2 W* l9 N+ }5 t
** transmitter and one serializer as receiver.
- [* ^" X! U& H" v& o  ^*/
+ L9 f; v) T" F& C& ^& g; wMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
6 b2 b6 s0 H2 _/ |  }4 C3 }McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*! F! R. J8 j% s8 B0 U0 g8 x& d$ h
** Configure the McASP pins
4 n( S7 W: N6 C5 J: _3 d# _) `' M** Input - Frame Sync, Clock and Serializer Rx2 c$ d; N* h/ a4 J( b" I3 ?
** Output - Serializer Tx is connected to the input of the codec
$ S  }  \, j0 Z5 Q* S*/
0 p4 a) g( Y4 X8 \0 v/ pMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);9 t& b1 @! @& _
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
8 D  o. |+ q; mMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX) z* D$ e! @" J3 j5 o4 A8 g# c
| MCASP_PIN_ACLKX3 Q% d& ~; g& x, V% |: E: \% V
| MCASP_PIN_AHCLKX9 K2 R' _* _9 F4 X( d
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */7 }/ T6 r. ~0 y4 v$ i
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
3 U3 Y# K1 k& I8 a; k" Y) T4 b" b| MCASP_TX_CLKFAIL 4 W0 z: L* w7 m7 V1 S  U" }
| MCASP_TX_SYNCERROR$ G0 A. b+ R; e. _" S: i; H5 e
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 9 H/ P' C0 k/ V1 u* W0 V
| MCASP_RX_CLKFAIL' y" o6 @7 E* W8 G( r* y
| MCASP_RX_SYNCERROR
" b0 {) r" z' q5 n9 |, _& ?| MCASP_RX_OVERRUN);' |7 [+ [- C% l  c
}
static void I2SDataTxRxActivate(void)
+ W& y9 @# ^9 |, S  Y{
8 n( L! H6 n/ H+ W1 v% S/* Start the clocks */
' Y$ M6 J2 ~% i( P! p1 _/ I2 n- cMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);. |7 u/ A, e2 V) e
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */, r; t5 s$ M) d8 a/ P6 n
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
+ |+ r. k% m0 l6 `9 m! X+ k" YEDMA3_TRIG_MODE_EVENT);1 b! l9 N+ F8 J$ p
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
8 W8 N% N# ~0 b8 I% e4 CEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
3 n- E1 t! [0 ]) _2 b0 hMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);" I5 P4 Z# j# N: q
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */# n! O  T1 |3 i
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */& h3 u( V9 o/ x
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);: }: s% J+ k) H4 }5 u
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);! J9 E/ T' P0 k9 A: B5 _
}

$ P7 }; F. Z  l1 ]8 n- E) A9 s  D
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
( g( r0 G! P1 v





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