嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,+ s4 _& H, z' L9 Q  `
input mcasp_ahclkx,& c5 n) g. J- y
input mcasp_aclkx,
' [# ]9 j# H! X! v, K, I3 R4 _input axr0,# G; ?3 [3 b: |9 ]$ B) ]

- }5 F. w7 a! E4 r  }output mcasp_afsr,
" V( ?* F7 b1 I! `9 toutput mcasp_ahclkr,
' L" a- x5 O3 d3 O, Uoutput mcasp_aclkr,$ f5 Y+ i# \! g
output axr1,
$ U9 i& c5 P( {, E
assign mcasp_afsr = mcasp_afsx;4 [0 A2 d5 F+ f3 t
assign mcasp_aclkr = mcasp_aclkx;# b1 g; g. E5 j1 ~9 U
assign mcasp_ahclkr = mcasp_ahclkx;
8 T5 h; O2 H/ X) s2 h5 a6 m# i, R1 Zassign axr1 = axr0;

# N/ y1 _$ h; Z, K8 e4 ]4 a  h3 {% {, p1 A) S; ?$ r
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
$ ~/ E- b4 @* r2 U1 |* B
static void McASPI2SConfigure(void)
( D# I, m* K, Q( f4 y  w{
! s$ K3 ?: ]9 v* vMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
8 ^# t" }& h0 ^" M/ V  ~" T( A$ I" GMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
8 E+ Q2 B$ h9 l, g3 fMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
9 k+ g* N2 U; xMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */$ r) U9 P1 ]; t/ [- i9 `
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
" r" t; k- ]8 w% O0 uMCASP_RX_MODE_DMA);( h. }3 n& t, j) _& w7 u
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,; M- P( k. Z7 a; ~4 }
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
, m9 v3 k8 [( H( M( rMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
, e+ m+ h' p2 c" h! O. XMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
9 \2 ~- d0 F  [: TMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
7 L$ [6 q- A7 s" `: F; e8 f! U+ RMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */; m  o) D+ }# t0 B/ S
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
" w! ?. i7 X+ t% c# `& _McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 4 ?8 j: I, c( y8 P
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
( I9 |/ z( g+ v$ q5 z+ X0x00, 0xFF);
/* configure the clock for transmitter */$ f# R* u; F8 {  J0 R/ m( y! G
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
/ J! X0 i$ ]# WMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); , X% e5 p: n8 {" a: @0 k$ f
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
/ _3 Z- n: b8 ^  e* e# q0x00, 0xFF);
1 x4 j# Y! s: \: y- S1 J, G! t" S% f) X: ^4 y& d- b' h. Q
/* Enable synchronization of RX and TX sections */ , t) L$ a. o- `. \3 ?  A
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */4 M2 h9 v: E7 S" W, c! f" L2 }
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);& q5 s3 m+ ~* T; `
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
$ N5 }! |/ o# X' P$ W, @* f4 z** Set the serializers, Currently only one serializer is set as
2 G4 U3 }5 t0 [3 O0 `. ?* h** transmitter and one serializer as receiver.
# L: M* }" y, k' }) I% b*/
5 w& R% j2 Q8 S0 K+ PMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
* i* |- `& p" QMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*% k+ G5 U+ |$ L5 h' q& C: \" c
** Configure the McASP pins
3 L3 o( w2 A$ `/ F5 x% q; w** Input - Frame Sync, Clock and Serializer Rx6 S7 ~7 j( e/ N( }/ Q) ~
** Output - Serializer Tx is connected to the input of the codec " ?- j$ U1 L9 ^/ K5 V. Z* A
*/
, q( ^- U; H, K1 i6 YMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
, p! u& f7 ~, ~% l3 h' \. WMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
9 l+ u# y, x: H3 \: KMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX+ F  o' Z. A+ C
| MCASP_PIN_ACLKX
2 b  U9 [6 g; }| MCASP_PIN_AHCLKX- v- x/ n( V5 U1 P7 V4 C
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */7 F9 F' n  f1 B& t. f) V2 Y+ a
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
. _" y7 C7 h8 K; j- N| MCASP_TX_CLKFAIL 8 u) o  I% }, N9 H- C
| MCASP_TX_SYNCERROR
+ b% q% M( R2 |# E( `2 i| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR - j! g+ z- _9 {/ D: J" |
| MCASP_RX_CLKFAIL
6 D* V# R8 K0 R5 Y- `( D7 w/ L| MCASP_RX_SYNCERROR
2 c- H5 v  p7 g: ?' C8 z; u| MCASP_RX_OVERRUN);
3 y" F  V- K: l1 f" k& i0 j# t}
static void I2SDataTxRxActivate(void)
! X# w# n! J0 m2 a% I7 K2 g{9 ^: j- y) L( ^% t+ n* W
/* Start the clocks */7 `$ F! }" n; }
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
+ G2 D: v' V! D1 `$ N, A5 R. b4 uMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
7 T; d8 k) T; {# }2 p; DEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,8 O- X: [" j/ S& j# u( n0 S. }
EDMA3_TRIG_MODE_EVENT);
6 k1 I/ u+ d. A; y$ `EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 2 h  V) x: w7 y% J+ o8 E
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
) m2 Y; B8 O0 t' i- g9 qMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);3 Z8 E& p' K) c
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */' P" Z4 x5 r7 T* d9 ~
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
9 Z9 \9 G$ v5 i, s/ K2 ]1 sMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
; |. h; [& Q$ @" ]( Q: `" fMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
# s: x4 A4 t: C# N# w9 V}

% T/ E8 A4 l- {
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

- x) G1 b( @; s1 E




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