嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
# N; S% z: O1 z* rinput mcasp_ahclkx,
0 q: m4 R4 F5 S6 I( _+ S( Ainput mcasp_aclkx,
8 c, n  }9 q5 h7 r& R( Sinput axr0,
! ~6 v9 T' t! Y/ t
  G/ {  H/ W) b+ G5 h3 O% Soutput mcasp_afsr,: k" [9 ~1 W& R
output mcasp_ahclkr,; f" n' e! Z+ g5 G) J9 u3 B  S  e/ N
output mcasp_aclkr,# r7 j4 s+ e+ o7 i" Y
output axr1,. N$ \) p% v) ~; r7 F9 P
assign mcasp_afsr = mcasp_afsx;
% k, p( f( y+ tassign mcasp_aclkr = mcasp_aclkx;
& {$ |" g6 y* \- `2 Dassign mcasp_ahclkr = mcasp_ahclkx;
# S$ C; A" [7 dassign axr1 = axr0;

$ |* t% `+ H0 @8 i
9 e' ]* x* \( T4 c
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

+ @4 g4 X, ]9 s6 Z- U9 Y7 e- T
static void McASPI2SConfigure(void)
4 j5 j6 W1 m0 z! y4 W{
! O  \7 t4 _- S8 O6 k5 KMcASPRxReset(SOC_MCASP_0_CTRL_REGS);# j! S5 c" F' \  W) [7 n
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */$ s: d8 V" ~8 `/ }* {/ g. f
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);( w% ?" _4 x) A: B; {
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
+ p9 G* J6 `& b( O/ F+ r- E# D! PMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,4 u+ l0 f' D" h4 r& D  K
MCASP_RX_MODE_DMA);  S" _7 r7 E8 A9 C% l
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,1 t8 N- a- U, \/ a
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */. H/ T1 P9 v0 B" F8 |' b
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
- ^) M" {$ M. H% D5 ]; I, k0 IMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);, m, V5 R% I( j7 j
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ( `! Q% X8 ]0 A& t1 _0 C2 {
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */* m1 }. I1 ~) @
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
5 }3 l6 W5 Z1 b  RMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
0 _1 q3 m  L% ^( DMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
# @* c3 C: m0 Y) Z3 n& g& A7 D; i0x00, 0xFF);
/* configure the clock for transmitter */
/ n" e, }" m; M6 m& w' }McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);* @. K: c$ I* o5 T
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
9 [6 Z8 S( Z; r0 P0 {/ l  K9 eMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,' T3 }& x: N7 k5 J9 ?
0x00, 0xFF);' q/ z, f5 Q" E/ C

- t6 h3 r- a1 l( b" [  `/* Enable synchronization of RX and TX sections */ # R( |- p8 b) x: C
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */- w/ V+ t7 ^1 @! t# f, j
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
1 G4 H6 h! q. L* S- J( I( |$ }' _% e- nMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
1 k, i0 s. n0 _! r  q" @** Set the serializers, Currently only one serializer is set as) v: S! ?4 A4 `, K7 Q; n5 F! N* p4 h
** transmitter and one serializer as receiver.& a) m8 @$ w7 c' i* V# N
*/
( h& o+ w) C$ h  c! R) l+ dMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);: _! [$ i% w' B  }9 ^; b0 r1 h
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*5 A% ~* E, U. a9 d' ^( r5 S( M; i
** Configure the McASP pins
3 E7 y# E7 ~& P" }** Input - Frame Sync, Clock and Serializer Rx" l: D8 z/ E+ x+ W6 y0 V( ^& I
** Output - Serializer Tx is connected to the input of the codec
: a8 D  }/ ~; I( w2 }*/; e. B: c( c  u* b
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
* U9 `2 h& l& `2 \McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));/ r, {, e  H! @% V* {
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
$ V, W- b& \0 ?* R8 L1 L| MCASP_PIN_ACLKX6 F' q, R$ {; G5 f
| MCASP_PIN_AHCLKX% E( }0 Z6 V$ u* m7 T4 M
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP *// S0 ]( a. ^/ `1 J% Z
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR - ]8 A5 B8 ]  L/ J
| MCASP_TX_CLKFAIL
8 q3 q8 Q) X: ?5 M$ C& W| MCASP_TX_SYNCERROR6 I, }" g3 h6 j
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR . y7 j& u, y5 e
| MCASP_RX_CLKFAIL! E- Y5 f; y% O0 F9 y, o2 u
| MCASP_RX_SYNCERROR 2 \8 r$ b: P* r5 b, [
| MCASP_RX_OVERRUN);2 ~4 v- z+ t7 j0 h' v& ?( U
}
static void I2SDataTxRxActivate(void)
" O# q. F8 F5 K/ {$ w5 f' D0 Y4 A{
4 _- b  H0 ^6 _/ s/* Start the clocks */3 d  T: O: g& h, \" _7 j
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
7 M! Z/ s0 ^3 `1 \0 ^+ zMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */: P& C: Y' Y! ]) T
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
4 X+ b' Z# R  `6 k* S1 }EDMA3_TRIG_MODE_EVENT);
2 u5 Z5 g& ~1 `' M! nEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
- F( Q0 j# b1 C4 vEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */- t- `& c1 C, B9 \2 t
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
& K) T) }' l! ~  J! G* a% L; FMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */4 u1 J+ N! i! x" H9 r( [
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
* B) x. r3 O7 t4 I0 O. lMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
1 O; ~7 |7 o3 h+ _McASPTxEnable(SOC_MCASP_0_CTRL_REGS);0 V$ r) _3 F  K; m; Z/ ^% d9 D
}
% c- T; Q  U3 f9 z. g- k
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
6 H; P/ T2 d' A- D, c0 Y$ D" K; i





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