嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
4 I( i2 f: U' t+ G  C( o) m3 J( oinput mcasp_ahclkx,. o2 t+ s# `$ C8 P3 _) R4 D
input mcasp_aclkx,
+ b4 N% H/ L) Y& o) Kinput axr0,; V% N$ n0 A& G0 H; n

4 w* E9 \; i! T# [8 Foutput mcasp_afsr,
) \2 q8 ?# |* ^' joutput mcasp_ahclkr,
" X% m2 W! g/ |' l2 Zoutput mcasp_aclkr,/ J& Y2 v5 A& Z  o- l0 X$ v
output axr1,
6 z& C9 U; x3 O
assign mcasp_afsr = mcasp_afsx;+ v3 Q5 n* e' o/ }3 Q9 c
assign mcasp_aclkr = mcasp_aclkx;
9 O7 Z; d) i$ o1 l8 Yassign mcasp_ahclkr = mcasp_ahclkx;
, G) A& ^6 i3 j0 ~$ E* {assign axr1 = axr0;
; |& Q0 m1 e: H% s

1 Q& Z1 Q( V. I' b- {) w
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
8 E# s- z8 {1 x5 c
static void McASPI2SConfigure(void)
6 K9 K9 X; _% B6 C{$ m6 C9 h* _3 |6 @' [
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
8 p3 E6 C, r( B1 W2 n2 rMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */7 s2 Z3 `5 Q6 Y* w: U' ^9 k+ ^
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);, G0 C3 A4 N! ^. W# z
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
( o- _3 e( P) b5 s# EMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,1 f. W1 \9 S  `. z
MCASP_RX_MODE_DMA);
4 l9 P  L# n2 }. E3 OMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
& b$ E* C* b' |- s6 o% C$ E8 pMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
& K. V1 |0 Z8 }0 G& @McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
+ {5 J3 U  s2 \2 ]# NMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
" a  E; f2 }" x9 N  R5 {McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
+ U* {% [  m, `% D5 S- J0 E& H  fMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */  ?0 A% O: a" [
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);. G/ c" Y; g* N- I2 t
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); * i5 {9 x# d  X- F% i& ?
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
, z1 p3 A) B4 e0x00, 0xFF);
/* configure the clock for transmitter */) w" y1 h8 ^/ ^
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);5 K6 ?3 x. f1 R1 H( _/ i& e
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);   t& i. f# {9 ]
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
2 ~' A. m, A! }( \2 {6 F: [- J0x00, 0xFF);
7 y) q4 r7 G, w# [
$ q9 i  [6 w) Y+ R7 q/* Enable synchronization of RX and TX sections */ 6 o' y+ q0 j! j
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
  E% Q8 C0 F/ G, aMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);  n# C7 a4 U! ?' M
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
0 r% l: v2 N. f** Set the serializers, Currently only one serializer is set as
" L8 l! V5 q' s8 i. E, ~** transmitter and one serializer as receiver.
3 ~1 V/ y/ s$ Z' k*/
/ f8 _2 N% L  Y. X* u4 LMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
4 Y: l: p& n8 O- pMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*8 r" v7 t- L8 A8 X4 P
** Configure the McASP pins
- Y/ K$ k  d" U' {5 G3 j9 Z** Input - Frame Sync, Clock and Serializer Rx/ ~8 N6 ]& {9 J8 q" E& A* z8 I0 l
** Output - Serializer Tx is connected to the input of the codec 9 w; R0 E1 v+ l, w; s
*/$ z, r4 v1 j* q4 f9 s8 Z
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);8 F. v1 I. v! m! u6 f# L
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
; b: t2 R2 F4 g# ]5 R9 QMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
5 w) U! {/ T4 x+ b1 z: _0 V* t| MCASP_PIN_ACLKX
' A; z4 H: J4 ?, l' L8 z) d| MCASP_PIN_AHCLKX
. d) F0 e5 t/ u2 q' f) Y/ z| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */# y, n# G) V# R8 x
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
: I! V& O2 K2 R* Y9 ~" q# i* G0 U) J| MCASP_TX_CLKFAIL , E- [* D  i& d6 T
| MCASP_TX_SYNCERROR, `# ~9 b2 |. W" y9 b. N
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 3 i8 {/ u- b$ N7 S' J7 v7 J- r
| MCASP_RX_CLKFAIL
( `% |2 @/ w" j* _% E| MCASP_RX_SYNCERROR
1 y0 o% g. v/ [8 y| MCASP_RX_OVERRUN);# K+ ?. G: U: E6 @6 d
}
static void I2SDataTxRxActivate(void)
' ?: m/ j8 Q$ _% B; F$ [{
" n2 M; Z6 x- p2 G  a( R/* Start the clocks */! M% _& {( x# d8 s- _! k
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);( q: D5 [; F% L0 k/ G% |
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer *// S% ]: S+ i5 W/ s* Q; f
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
$ A  L. E7 r. n+ a4 w' }: \EDMA3_TRIG_MODE_EVENT);
4 v% s4 |* {4 k: oEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 7 W# Q' ^! g( r& S$ `
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */1 w) p6 ]+ S8 C2 g
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
$ C3 E( R. d0 u$ l4 |McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
1 L; V1 S2 R& Z. Z! [2 Uwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */3 [5 d  P2 R8 x6 k9 b3 U
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);8 J* K- a, O! x) h" C4 H  G3 _
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);0 @3 f  Z1 I' z" ~+ V
}

( W( F% [+ t5 `- S) i# Y1 X/ H3 [( z
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

5 Q% J4 ]( Y3 B1 c5 S




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