嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,# _* W- R2 O  O) ~7 B2 M
input mcasp_ahclkx,% m0 |3 G! A% m  E8 h* L
input mcasp_aclkx,) n0 }# d" \0 H" `
input axr0,: f- }) d8 A% V- s4 ^, i0 b' p/ e

% o: K" n3 a; N$ \- @& Koutput mcasp_afsr,1 l* H3 v- |' x8 z) k  c- s
output mcasp_ahclkr,% p( c' D# b/ m6 ^. x2 g# m. B
output mcasp_aclkr,
# {5 E. g4 Z) A1 c5 J6 e6 noutput axr1,
  j7 }/ l1 G( `0 F+ \/ R5 y0 v
assign mcasp_afsr = mcasp_afsx;
; G8 _( J# _6 l$ l% Bassign mcasp_aclkr = mcasp_aclkx;5 {5 F& x- D! `8 f
assign mcasp_ahclkr = mcasp_ahclkx;* m* J  B( u" w4 U
assign axr1 = axr0;

6 o/ O0 {% x, K# E2 h, g8 W, u$ e- [, F. N: [" _  o
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

! `. Q& R2 z3 x7 {! y& z
static void McASPI2SConfigure(void)
5 D6 a4 E9 r: L4 r1 A7 C{% n0 O3 f( [  n
McASPRxReset(SOC_MCASP_0_CTRL_REGS);9 R0 J5 S  Z6 N( H0 b( T9 A0 m- m
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
% C/ y+ {8 ?% Y/ f6 h! B: A6 B& f9 ~McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
8 p$ t" A. n- Y8 JMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
  T3 Q, R( L% {; M; BMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,( u% X  ^. [6 F8 }8 L& d. G
MCASP_RX_MODE_DMA);
' l+ ]. y2 ^& B+ @/ v1 rMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,2 X# `& ]: {6 E
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */2 [/ c4 a% ~# n( j% J( C
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
, }/ d. R5 M! ?: `MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);( Q6 B* q5 }$ F; r6 X
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
0 |6 F: @" c  M: S+ q8 F5 wMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
( E9 _$ C) W+ ^! KMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
9 r7 k0 n) g8 U# HMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
/ p5 k! H: y# b' vMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,+ `6 d  Y8 s  ?% I; d
0x00, 0xFF);
/* configure the clock for transmitter */
3 |# V8 E8 T7 ?0 d* ]McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);- c: ?- W8 ?  I' ?
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); , e2 E: U6 O1 Q8 j. k
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
/ r# E/ y% f* \0x00, 0xFF);
; J5 R9 R0 D8 y/ ^9 k( ]) K3 H4 o% V. L+ L# }$ r/ c
/* Enable synchronization of RX and TX sections */
- G1 w- _" {1 j! o! R0 c9 j: ?McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */7 z. q; K4 b% M7 [2 A
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);. J+ w; w. k8 y4 n) u, ^* S/ N
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*- n" w: }  B+ O
** Set the serializers, Currently only one serializer is set as
& W' q; ^! h$ g% j* M  |** transmitter and one serializer as receiver.% ]  S/ B! L. L" o# I. J
*/
6 |% u' u/ @# s( v. JMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
7 g& e- i: X0 y$ `McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
& c4 ]) Z- }; ]& J: R1 c** Configure the McASP pins
: ~- u- k# n, y' e** Input - Frame Sync, Clock and Serializer Rx
# P" z  x8 Q: V5 q) W0 l! \5 m** Output - Serializer Tx is connected to the input of the codec
# c, ?; n7 ?/ L*/) V: [2 I) V  }) E) K; r
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
& G, q/ Y  F. s- B. dMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
2 r7 K$ X) H3 N* T6 fMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX1 Z( u7 P+ b% x/ c
| MCASP_PIN_ACLKX) ?+ w# p$ a/ o& ~6 z
| MCASP_PIN_AHCLKX3 _" G, K, e; @" G, H* C' b. k# g3 e
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
, `1 c: I9 I8 UMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 6 h) j2 U8 e7 i1 c- r8 D
| MCASP_TX_CLKFAIL
& A' b* v4 c' ~$ ^6 v| MCASP_TX_SYNCERROR0 ^6 z3 ]2 {7 I' b
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR % C) h. [+ s9 t$ c& ?
| MCASP_RX_CLKFAIL$ W) h3 d$ O4 x! G$ U1 d
| MCASP_RX_SYNCERROR
* g( C* h; C& X9 s9 \7 h* k: v' y$ l| MCASP_RX_OVERRUN);7 Y1 t; F% s$ K5 e& r
}
static void I2SDataTxRxActivate(void)7 F4 C" W! E  o' |9 \
{) S* G# V) _/ u1 L+ X% M
/* Start the clocks */& c) ^/ _2 `  q' \$ v; B
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
: i  D7 B6 f% i- }. Y+ ^/ xMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */% W, ^3 a. e0 b' _3 T7 L
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
  C! K* j( z& r+ lEDMA3_TRIG_MODE_EVENT);& h4 ^* h3 ~2 F! m- t' k# w* R
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
* n+ B. X2 m& oEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */0 ]* W% d5 D. L# X" }0 f
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);, y. f: Q! H2 B5 G
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */8 F) |& X' t: A6 ]3 `
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
9 b2 k" Z5 c: i9 d" f- {McASPRxEnable(SOC_MCASP_0_CTRL_REGS);1 L9 E$ z9 V" f4 B
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
6 J, j$ O$ ^  y9 S7 ^0 L}

9 N. w! X# A4 n  B! V
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
/ y5 ?. z4 F+ W6 T# I; D





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