嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,9 g: D% V  h8 t' U& `6 `4 h
input mcasp_ahclkx,5 a( p, W* D# ^9 r1 L: l
input mcasp_aclkx,
# g; @/ I8 I' F! sinput axr0,
$ |& ~6 ?6 \: \( n$ X; I  X8 v* t" V' k) b
output mcasp_afsr,' z3 q' H  P% {3 X
output mcasp_ahclkr,# f  Q* f4 s* ~5 ], e
output mcasp_aclkr,
$ F& X! ^" {! }output axr1,# |5 ]: [' Q3 i9 ]8 @' H
assign mcasp_afsr = mcasp_afsx;
9 {5 h# n8 ^+ w5 k- \; c4 d4 Hassign mcasp_aclkr = mcasp_aclkx;
. n; S! B% V, n, s) o" x! |assign mcasp_ahclkr = mcasp_ahclkx;% T8 @; Q/ n( l4 G' W$ E+ x" w
assign axr1 = axr0;
' }: ]3 l% I% h8 z, ~4 x
5 E  V2 g! L+ c8 C8 K
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
+ v2 F# G7 @# P/ C6 J4 A1 Y2 Y0 I( b
static void McASPI2SConfigure(void)# X) r( Q, q$ ^/ J* p+ q
{
. k. B6 B0 M7 b' BMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
& U9 O2 O2 B5 O: P& PMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
/ E5 `5 v" }" ^+ I* F4 KMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
' a  C1 i. c! s4 \McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */5 O; Q  Z3 A" o" M* Q
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
/ {9 ~$ y! X& v7 E% F$ V  i" hMCASP_RX_MODE_DMA);
" J+ c* D7 Y+ SMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
0 l8 h5 t( I" q/ GMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */! A2 W. m' @; A' Y
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, " X* c3 @9 Q9 s7 Z4 g+ w
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);4 [- ]: W8 X: x" ], L# c
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, # l$ A  u, r4 A# X. H
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
; s5 z' Y! r7 E8 ~7 f# y) u7 SMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);4 F! z$ X/ ]" Z: ~8 O
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
+ F* Q/ F. W- B5 z% X+ A! mMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
# p1 s1 m/ U$ e2 U, t, X; D0x00, 0xFF);
/* configure the clock for transmitter */
5 X! A9 N4 J, R, D/ E  sMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);7 M  s1 Z% F$ d3 f& `
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
4 c/ `- \$ m0 i  `$ FMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
: [& v% K1 q( W( |0 e# f0x00, 0xFF);
3 _! j) g3 v; u, C% }6 |
7 W6 P* @# h+ I8 Z& S* C/* Enable synchronization of RX and TX sections */ # |+ h2 _$ j$ i7 Q, E
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
7 v: G) _* o7 p9 Q: [McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);/ z- B( i* b5 D; a6 \/ H
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*# K8 q, i& [0 ?/ j
** Set the serializers, Currently only one serializer is set as9 Y+ H3 r  F- `3 E$ s- O6 ]
** transmitter and one serializer as receiver.. M5 \, l! B$ v' y- i
*/, w  a+ m& R& t% H' l7 h( i' Q
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
- R: n3 x; B5 Z: I* ~+ YMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
# _% l! n0 h. f) ^$ F+ @3 j' P** Configure the McASP pins - L' z* ?6 P  f+ f
** Input - Frame Sync, Clock and Serializer Rx& G" q: Q2 X6 j7 `, w2 Z( C2 U
** Output - Serializer Tx is connected to the input of the codec * T- O4 b$ N7 @5 r
*/3 {6 f8 k: M: o; Q7 R' H2 u8 _5 ]: ~
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);; t" @* o: V2 u; M
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
, t  I  r6 i- ~- g& }2 P5 O5 x, oMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
7 S3 }" o" e1 q3 o' h4 t2 R$ g| MCASP_PIN_ACLKX4 B6 l, [; p" }! F
| MCASP_PIN_AHCLKX, d& U* x6 h0 W0 L0 [( X* c; O  E
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
3 s$ n6 R# e( K) v6 f+ DMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR " u0 W) G5 ^* x! `4 m
| MCASP_TX_CLKFAIL
: N- B# u6 [0 \| MCASP_TX_SYNCERROR
" K) c( B. x7 a% }| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
, T, }% I. n7 i1 e| MCASP_RX_CLKFAIL
0 @$ B4 o$ T$ p! Y* C7 w| MCASP_RX_SYNCERROR
3 D( R; ^5 K" f| MCASP_RX_OVERRUN);7 |$ c$ c2 |2 y: X) F  W
}
static void I2SDataTxRxActivate(void)  {& ]& L" m2 ^$ z) G6 Q! c# k: O
{
! C8 A9 f1 M6 [# P# H) Q4 r/* Start the clocks */+ D1 y2 x% z' p) V, b- F4 j
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
4 [) A9 W- L1 ^* a2 u' y& JMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */: {9 V7 N0 v2 s" \& S7 z! }% @1 Q  C
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,5 [# v. H2 a% U# h% {' b0 ^2 ?
EDMA3_TRIG_MODE_EVENT);
! H1 ]% e$ z- i" P: e% ?* |EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
1 T  s! d1 a  X2 t# D% O/ y, b8 ]EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */$ ], O0 n4 f% b, r! q* q
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
8 G. M, N! A* ]- x1 s7 OMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */; \! M5 r" P7 |" w+ z
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */, D9 Z, S3 \  F2 N9 A8 t! s
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
; U; |# v7 P3 @7 N" ^& V  sMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
* Z" L) ^* Z! M}

/ W6 X" B1 c8 I
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
7 m# K0 q2 w6 v3 n( F/ O





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