嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
. v6 M( \$ y1 ~& D1 z  C  f+ |input mcasp_ahclkx," U2 i' ^! x# I' J8 f% l* C9 H
input mcasp_aclkx,
: b6 k5 L! k! v& J+ ^& U& Minput axr0,
" i, k  Y+ o3 E6 u4 ^
4 m4 O  ?0 D1 Q5 @output mcasp_afsr,
6 ^' B6 ]0 [9 w7 L" ?$ @output mcasp_ahclkr,' u" M: }4 d8 S- n0 ]1 z
output mcasp_aclkr,+ O9 V7 P/ t+ T1 V1 O7 U1 z9 w: S7 L
output axr1,
" T5 ?4 F! C% \" e
assign mcasp_afsr = mcasp_afsx;, m' d/ N2 s) s! G4 W- @3 d
assign mcasp_aclkr = mcasp_aclkx;
6 w- H5 f% I& g. ?# _$ _, Vassign mcasp_ahclkr = mcasp_ahclkx;& D% A  [! D  O* w7 J
assign axr1 = axr0;

1 N+ x* p5 O& a: g
; e! F( @6 j' n$ g! h0 R* O8 c
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

* ~0 p: z$ [' w
static void McASPI2SConfigure(void)
$ D2 X* z) u0 }2 C) G! s8 n! q4 v{: M# G5 t$ N$ A% x+ Z- H; }% K
McASPRxReset(SOC_MCASP_0_CTRL_REGS);& v2 ~7 G! j8 m: g
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */8 E5 K, b3 Q  f! g" e+ _  s
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
4 f. ]$ O6 U7 A$ w9 UMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */+ h' X. F( M, A& e: ^8 L
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
  Z8 C3 J# [" J* R0 w4 rMCASP_RX_MODE_DMA);% T, b! d# G: M4 g& P+ e4 N; w
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
' l2 H; e: e7 H4 l/ F2 }MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
% |9 m  y% {  v5 A7 E! KMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 2 }: @4 p" @; u
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);, [/ K4 e. }$ z+ M3 U& J, h' {6 R% E$ Q
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
$ T8 G: U  I5 Q+ B  Y9 y( GMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
4 k: \3 Z7 X( l! X; Y2 ?) hMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
6 ]. E+ D+ `+ u/ X4 x( }5 \McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
9 r& V. |( o. E3 K5 n1 YMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
  H% J$ @0 R  @3 h: D2 \! P0x00, 0xFF);
/* configure the clock for transmitter */
, I2 m* g* y. ]# U$ OMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);& D1 I$ F6 w" W* q4 f  O
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); - f$ \$ i$ s1 w: n" m
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
2 ]7 v3 I& s3 s+ a- i0x00, 0xFF);
  N, l6 o: v; G) {5 F6 I3 k. |8 t: ]% y3 q9 W
/* Enable synchronization of RX and TX sections */
* o4 K; }# q; n" E/ v# QMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
- l2 w/ h' ?0 V9 M3 zMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);2 o' v: T5 r  d9 @5 a% ?
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
4 Z1 `2 z0 F1 D2 v** Set the serializers, Currently only one serializer is set as" ]7 K8 a, \+ Q: s
** transmitter and one serializer as receiver.5 X# k0 |; p/ o0 A; ^
*/' W: X; G( t* ]. t* m  t9 i
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
5 Y  g2 C5 M: J+ T' k/ Z+ ^McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
4 C; `6 O1 [( Z5 `6 e** Configure the McASP pins
) O6 K, B3 T: o; l** Input - Frame Sync, Clock and Serializer Rx: k+ f$ i; K$ H
** Output - Serializer Tx is connected to the input of the codec
- `6 M5 i/ r- n! k*/& Z/ L; _" S! v4 i6 Q7 }$ _5 b- @
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
9 K4 x0 z7 n( F; m, FMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
3 l. z! B3 @$ a9 w& hMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
% R: w9 {* n9 U( e! _| MCASP_PIN_ACLKX, Z  M! a4 k4 c: ~8 Z1 {- a
| MCASP_PIN_AHCLKX+ o2 W, i4 ^" |5 D
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */9 w- E# o2 L4 a7 c2 F
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR * J; \: {" m; [/ r& T, n# O/ G
| MCASP_TX_CLKFAIL
9 T0 X6 L# b$ K| MCASP_TX_SYNCERROR( I0 ^% T2 i( f- C" Q( W
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
1 T* h1 D- P" N1 u, G4 j| MCASP_RX_CLKFAIL& I! e! E& c. y- W2 i2 ?# H5 v
| MCASP_RX_SYNCERROR
" B4 |+ N& j' Y$ B. z& t' ?; z9 i, J| MCASP_RX_OVERRUN);' @' f, w8 C8 H0 {
}
static void I2SDataTxRxActivate(void)/ z) |) F4 |% Y( C. R% q/ {( B! J; Z
{
5 F4 P/ I8 }* v4 Y1 t+ ]5 U/* Start the clocks */
! D3 ?; G" K' \. a- A# y. L. g- oMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
) Y. K) g. y: P& R' x6 E- LMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */% U" O8 s# |0 F6 H' u9 ]
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
1 V( A- \. e0 V! d% ?$ L5 ?9 GEDMA3_TRIG_MODE_EVENT);
( |9 Y9 K/ c9 O, H& t6 R/ |0 EEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, & U# W$ h& L* o. |# C
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */' s) G; w- M( B" {% _
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
/ H0 Y, D0 n2 D7 s8 i( I2 Z$ {McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */" u$ w4 C5 A0 i5 @
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */. B" q3 y5 g% t' |% B
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);2 [$ R: u1 R* R* x) r# F
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
$ h# D0 B. L1 r0 ]5 n4 @}
8 x0 {: K  J( k* H, k0 m+ V
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
/ H$ M' M8 T7 `$ J





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