嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
2 F* |2 w* g* X0 k4 F' F0 finput mcasp_ahclkx,
' h: ?7 R+ [! M; y8 W% E8 c4 ^input mcasp_aclkx,) M5 V- ~/ a  E, f1 D
input axr0,
7 ~. {4 q0 J; l) A; `& g$ f
' X# G+ O+ G. k& Routput mcasp_afsr,1 u8 C: B" G* M
output mcasp_ahclkr,) T0 t6 K( a0 y4 n
output mcasp_aclkr,+ ?2 J$ z( g4 K3 h
output axr1,
" d0 H: C6 s. q1 q
assign mcasp_afsr = mcasp_afsx;- w4 w" K6 p2 u8 B5 v% F' |6 D. H
assign mcasp_aclkr = mcasp_aclkx;; g/ c5 |) {$ O, `6 ~! {
assign mcasp_ahclkr = mcasp_ahclkx;
! r( Q* L; K* O2 l! J2 A" Xassign axr1 = axr0;
. {7 S3 ?5 I. y
4 @! k- o' U1 D) g* y6 R
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

% h" ~! Y) q; @2 X+ b  G
static void McASPI2SConfigure(void)3 C/ w* J  N' w. x: T
{- x2 i, @7 Z) z* ]& J& ?
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
8 h- A, w+ y( E" v7 jMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
8 K' K0 E  l3 l( C$ t" @' \0 P7 \McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);) K: |* r) p' }, W9 l
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */) I! D( c# w( R- Q+ S5 ]
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,# n+ h! w. ]! N) O* w* @
MCASP_RX_MODE_DMA);: t1 X6 e3 ~- F! F
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,( q5 g+ {5 |6 G9 Q' X
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots *// K+ F3 w0 m1 S2 `9 k$ d6 p4 z
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, . C( F4 N# k  U7 B/ i% e
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);' f" }# B5 e* h$ U
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
0 f% \- Z! y. U1 P; w4 `3 hMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
8 \0 q- t2 o) x+ J" U& M% B9 F+ U8 fMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);: ]0 g8 i- ^% J, ^5 }- P5 _" ?
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 6 B2 c  ~) M4 Z! J) m* l1 r
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,; q, D+ n' D. Z$ |9 |3 [0 U
0x00, 0xFF);
/* configure the clock for transmitter */- |: J( X5 }. M0 t: U1 G
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);. B4 N& }/ \2 A+ S  w- |* A% a. V+ ^5 s
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 7 j, V" J) q3 a7 N
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,7 f) [* i( Q8 ~. J/ ~
0x00, 0xFF);
0 k  n% F# g8 |! n1 S5 g
4 f, f/ V/ u* ^# {/* Enable synchronization of RX and TX sections */
/ F$ p% @7 M$ NMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
. w! r& \) L6 J9 z) L9 uMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/ o0 d+ p$ M3 O5 B+ A) x6 P! R: s2 KMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*/ l7 p; A5 n+ d! f, y
** Set the serializers, Currently only one serializer is set as
, b, d' U! A" }' V$ f! ^8 a$ C. r: N** transmitter and one serializer as receiver.6 S8 ]5 |2 C2 z6 c# {7 Z
*/1 K) @, R8 q/ T8 b) `  @
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
4 U6 O  [! J5 }McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*( I4 T3 R6 r( N3 U( m
** Configure the McASP pins
* j& I0 N* J/ S( Q  n1 C/ [4 \6 M** Input - Frame Sync, Clock and Serializer Rx, a/ c: K* o  ^( H/ ], s+ h$ Z5 j
** Output - Serializer Tx is connected to the input of the codec
6 p' F' V( D7 b( Z# m! e- n4 ~*/
1 R; |! k! O) @, J" p3 U+ \McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
/ k. [0 c$ M; g0 m# f, u( VMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
4 o  j, ^& E$ E5 K+ D5 M1 B: cMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX4 ]# {! Y  h; ^
| MCASP_PIN_ACLKX/ K: C4 X# c5 d0 u7 s! L( q
| MCASP_PIN_AHCLKX
9 {3 A9 M! _; q7 ~& `9 y| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */- b/ [( S6 O: Z; \; D: e2 P
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 5 D3 P* a- }$ C  s: i& J3 U
| MCASP_TX_CLKFAIL
& k; {, C0 O% [  o- o| MCASP_TX_SYNCERROR
/ T- y! j# V1 F/ H' C| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
! ~# m4 Y# p# O| MCASP_RX_CLKFAIL
3 u& }7 r$ Y2 O/ \" g3 I| MCASP_RX_SYNCERROR
  q7 \6 L) v: k, X| MCASP_RX_OVERRUN);1 z. L  t* K7 B, k. L
}
static void I2SDataTxRxActivate(void)) o' ]) y+ {6 c: o% F
{
% ?, R) v  @  W, F/* Start the clocks */5 ^$ i3 V" t; i4 ?: l) }
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);4 B3 e: L0 j" s9 w* Q, ~! N7 `
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
1 j' S: \" \" a8 z6 UEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,8 ?6 S2 w6 ~0 R
EDMA3_TRIG_MODE_EVENT);; ^1 w' b6 b0 }& K, O
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
( W  Z. N! {! p  L. C' @EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
8 j( x3 i3 T- x/ ]5 b+ h) u# T1 cMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
: }4 c4 X  C: V# o* NMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */5 Z# h- i5 W4 S6 e0 c% A) F
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */+ z3 i, G: [" G* U
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);6 k, ?! H. d1 M" n
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
$ l# H, M7 c8 O4 o1 i}

* _! \' H1 w% h+ w, r  `; x
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

# Q1 |2 M, C' C  {- C




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