嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,! u; P  D( y, f2 a; M8 V% t
input mcasp_ahclkx,* E9 Z* k5 q2 S0 ^
input mcasp_aclkx,
4 u4 A* W# e: V: |9 u! t4 V! ?input axr0,
& s  ?2 a9 V# `: a8 C
0 K! w4 n* `  ]+ ?1 _output mcasp_afsr,7 z  l! d# i5 p7 l2 @' G+ _% m
output mcasp_ahclkr,' b! w5 R4 b' V! ^! E" y; M- J9 u
output mcasp_aclkr,, X* Y" U" }! c) Y
output axr1,
8 N# o! k7 A( Z: q- G5 \$ r
assign mcasp_afsr = mcasp_afsx;" M# Z8 p$ z6 j3 E  W3 ?
assign mcasp_aclkr = mcasp_aclkx;- H$ C& K" L7 I1 |. E+ J: ~
assign mcasp_ahclkr = mcasp_ahclkx;
( G( R. q+ j0 @4 F+ c7 N# Sassign axr1 = axr0;
( s* F9 y( X- c5 p+ J$ u
6 e4 [8 n9 V2 h2 b; Q
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
  {- L6 w7 D! A; f( f1 h5 I5 W6 \$ @
static void McASPI2SConfigure(void)
% q" j: L  c) v/ C& c{
& _$ u/ n. U* ?McASPRxReset(SOC_MCASP_0_CTRL_REGS);
( G+ }" P6 i; h" BMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */4 D, X% [" [# M' |$ R2 j
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);* n$ M8 K" e8 a, s0 k7 e  l  N1 l" E
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
* {: z3 e" V6 OMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
$ g0 \4 k: N' a: ?MCASP_RX_MODE_DMA);% [  [! K& R, @( S5 I  Z
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
8 p4 W! X8 _7 J( @- Q! wMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */  c7 s! G, o; n; {+ L3 q. v1 s
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, - E9 [, @9 |" s$ @4 D2 \8 S: g( t
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
' r+ g/ i. q- m2 ]; D( |McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 8 o" y- n: \! o  U! ~. b
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
4 \$ K" h+ @3 Y# YMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
8 Z8 T/ N) z  I! J. Q. W+ D0 \. p8 ZMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); # F  d0 ~+ B* d
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,. c3 {8 [- O, ]- J) X3 |( S% [! U
0x00, 0xFF);
/* configure the clock for transmitter */
  O/ m/ k4 Y/ y% O; \2 E5 RMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
6 K% u. O4 r/ V0 X8 mMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
6 H, x/ J( A. {. R: _, l# ?McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,) x3 g! I0 f) @9 p# z* V  ^, s) t
0x00, 0xFF);- t$ {) I- f! n1 E( \% _
7 n$ u* ^' v+ B8 y# Y
/* Enable synchronization of RX and TX sections */ 1 k$ k* T) }: ~, I4 T
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
6 v, T* ^; T5 e2 H- }+ `+ kMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
6 ~! d$ b! [/ S+ u! P% NMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
9 r+ Z* [' }6 i  _** Set the serializers, Currently only one serializer is set as3 p, [$ j$ V2 B0 m" u4 }. g
** transmitter and one serializer as receiver.! h7 [' M9 r4 l( h2 t' _
*/4 v1 ~4 N6 d; |: ]' R
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);6 y2 J& K9 W4 h7 ?9 l7 B: k
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
2 z& @* s4 r& r- t** Configure the McASP pins 6 n% K% }5 [- ?) p8 L5 [" I" D+ z
** Input - Frame Sync, Clock and Serializer Rx4 E9 \3 ~# C4 C7 M) L/ P* q
** Output - Serializer Tx is connected to the input of the codec
3 u$ s! a. j) t! c2 v" Y6 D*/5 y0 ]5 I: b* B4 w
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
( w, X& G% y/ t7 x' i8 V* FMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
7 O" t( J! g) w) ?! _McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX7 k3 x* f3 p1 i$ _
| MCASP_PIN_ACLKX2 Q9 E1 f2 {2 K' d3 w
| MCASP_PIN_AHCLKX
' U* z7 c) I, [: |( k& r; w; `| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */( d  N- E5 p+ @4 A( V+ Z4 ^
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR $ s- G; w. ]0 D
| MCASP_TX_CLKFAIL
' }% C1 H$ N5 ?3 s8 P| MCASP_TX_SYNCERROR/ b1 a# n, S, Q0 X- c
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 5 Z( F* k2 N) {. ~1 |1 [. _
| MCASP_RX_CLKFAIL
6 v) m. T5 ~/ o| MCASP_RX_SYNCERROR
4 m/ X( p% n; G0 ?; D. f| MCASP_RX_OVERRUN);8 J) D/ @* K: \! P) c' b( }1 ^
}
static void I2SDataTxRxActivate(void)
; ^" ^4 L( |9 V2 b- V{, Y: r/ z! C$ Q2 j! {% O+ M
/* Start the clocks */0 r2 i, I) e' q& `
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);8 ~2 V( ?4 M( j' z, Y8 A' L
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
* @) Y1 G" ]: x9 KEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,  R' T+ f* e: z, k* G* u
EDMA3_TRIG_MODE_EVENT);; b( G6 E  l4 y' Z* d6 `! }
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, - ]; o1 N3 L1 b, a8 ?
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
: ^  G* y( M( M1 S  fMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
3 t, `0 \+ M0 I' u5 T2 W; KMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
4 O9 d# _; s' A* f; a' ?% `$ [$ o& Mwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */9 H% n7 p- T3 j7 @! [: R5 K  J
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);, T; I2 O* |. p5 V4 S
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);& z7 U* j- V1 u) d) D9 V
}
' y1 b; Y9 e% i1 F# c. i
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
% i8 Y) @; Q8 F* l





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