嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,$ n6 ~* m$ G# o
input mcasp_ahclkx,
( E4 P, \9 i9 A4 s/ e4 u* a  Einput mcasp_aclkx,
. |3 ^/ }5 y/ l; ^7 Yinput axr0," H# Z& p1 o9 `" q, ~- c- l3 d" z& A3 |

# c- f" q% Y* @# N( ]3 joutput mcasp_afsr,; t: U) q1 I2 {  B& d
output mcasp_ahclkr,
% H$ L  J" W7 G2 ?) i$ Toutput mcasp_aclkr,
' p, X" S: f9 Routput axr1," R+ D5 j3 D- W2 B+ R! E: j
assign mcasp_afsr = mcasp_afsx;9 _, ]. m. S0 T
assign mcasp_aclkr = mcasp_aclkx;. l: \: [% A4 q7 ~. w1 c; k
assign mcasp_ahclkr = mcasp_ahclkx;
; ^! m, Q0 a4 T+ h" m" Rassign axr1 = axr0;
* Q) H! h5 Q5 J. e/ X

/ u* l7 q# V- _: M! M2 u0 M9 U
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
* n3 f+ h# x5 N
static void McASPI2SConfigure(void)% H. e3 h5 i: L. w" X) E
{  T. j' Y" I+ F9 o
McASPRxReset(SOC_MCASP_0_CTRL_REGS);4 q! Q. r7 r8 O0 j9 F  I
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
1 t7 [5 N' Q, W7 i6 M3 `McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);# o; _: L. U, M
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */, w* g. ^" v- n1 ^* v! t
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
& M2 d% V( I/ w5 YMCASP_RX_MODE_DMA);" \6 s8 L6 n$ m3 e" f: y+ S. T
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
! S! S$ \3 @9 f( ?5 ?MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
5 n0 k, j4 v5 m' |& G4 {McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, + v+ g# a- l- V7 x
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);% D! m" Y) V4 J
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, - M3 h  h6 h# @7 H3 T! |
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */% k2 Q* E! Z; r! Y7 x
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
+ E; f' I+ s4 D* FMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ! n0 K' p& Q9 a
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32," N5 p. ^0 f9 s2 o) y
0x00, 0xFF);
/* configure the clock for transmitter */
& y% S4 i/ F* @2 U& T" u: T& T8 iMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);1 q7 p' b' i) V3 K
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 0 W0 S' V% ^9 I7 H5 E3 l7 J
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,8 P, {9 [9 {  u- T  Q/ g
0x00, 0xFF);
2 D9 V' J+ U  o: X: d7 X! ?- h* W* `3 i+ ~0 D! {/ t3 b9 p
/* Enable synchronization of RX and TX sections */ ; N: k1 ?# s/ j* X1 y- P) B6 }
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */% G# @/ z) w' m1 E8 w' y; X
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
. Y9 t% F+ S- C! m* Y- iMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*) s6 g1 ]3 w# c* w
** Set the serializers, Currently only one serializer is set as! H: R- V7 W( c
** transmitter and one serializer as receiver.
# D3 P& X' |7 h, U/ R1 [% g*/
8 d7 ^8 @' \0 V4 Q  T( h; bMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);$ j* k; Q  @9 J' s0 O; m
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*# {/ W) o1 \6 O1 C) H
** Configure the McASP pins ' \# G+ r  V4 t% Q8 k  E
** Input - Frame Sync, Clock and Serializer Rx
- p3 `) |- j" K' m0 F** Output - Serializer Tx is connected to the input of the codec
4 {! d) O. ]8 [, N, D9 H5 y8 y" o( W% x*/
) K5 G. q, Y1 y, ?McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
! A% K9 y2 e  w# tMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));+ q4 X( a4 B, E( P# l( S
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX$ o4 S3 _- f' J
| MCASP_PIN_ACLKX- N6 B( j& |, w( R/ a' S% J8 z
| MCASP_PIN_AHCLKX
- K/ n: q/ G  i) x8 x, i| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */1 T4 a0 A% x8 j
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
0 f# _* z: _/ G+ x| MCASP_TX_CLKFAIL * ^) J+ z& q) U. y* b4 G  i# s
| MCASP_TX_SYNCERROR1 V5 F2 X! L& h1 i
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
  s# G: w* }9 p| MCASP_RX_CLKFAIL
; a" l, X9 y% Y4 ]- ]' T3 J| MCASP_RX_SYNCERROR
2 Q9 f  x8 Y5 v1 \| MCASP_RX_OVERRUN);/ h% e; z& I! y
}
static void I2SDataTxRxActivate(void)
" [4 B- U3 `, t* |0 v0 ~1 V{, S( ^& R8 O$ j8 \! f( N6 k. W$ c4 P
/* Start the clocks */
( r% K/ |* S& m3 c* jMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
& w! D. s4 U# s) JMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */5 M8 ~1 q- e& w2 b5 f' s
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
  |3 Y9 T: N) Y. W! H# vEDMA3_TRIG_MODE_EVENT);
8 h1 q, x# A$ Q- d7 lEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
3 N: S7 I& X/ r: G1 tEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */6 d3 \1 C: j: R1 @
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
6 I1 a" C/ x2 b0 W+ z5 r9 LMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
- P# i' _5 b8 W# |) zwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
" \. a/ T( L1 ?5 H6 @: g- fMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
% _$ r6 {  S2 c4 pMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);" Y" \& M7 c- ]4 j
}
/ v" v- b! G! A( ]
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

, s% R* `5 [8 f9 _% O0 _




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