嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,. N: s/ C# c$ H. C) u) I
input mcasp_ahclkx,4 D+ b, z7 w/ m6 m" I
input mcasp_aclkx,
7 f6 Q1 |1 H3 j9 vinput axr0,! Y( a1 D5 t0 v1 ?3 X$ W- Y

5 M  K: b$ }0 ^5 ?+ W+ ~output mcasp_afsr,
) u2 l9 [2 |5 b% d8 J9 C  n- d4 routput mcasp_ahclkr,  ^$ E5 R6 w: e! f+ c# [
output mcasp_aclkr,% h3 ^8 Y2 d& K8 s& @# S
output axr1,
2 |/ g( E* S3 e9 B
assign mcasp_afsr = mcasp_afsx;
/ \9 V0 T: ^; L3 w8 m: G: ^assign mcasp_aclkr = mcasp_aclkx;
) d' l" `# W% `6 k' o0 [assign mcasp_ahclkr = mcasp_ahclkx;  k- Q+ l$ n8 X9 F- [
assign axr1 = axr0;

6 l8 l; Y8 V0 J) J+ X/ \4 k1 r. u( g: g0 u$ t
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
; }2 W+ c9 U! f& {$ G0 r
static void McASPI2SConfigure(void), p' ]9 a/ G  g; p) n
{3 x8 T( d9 Q" l. J
McASPRxReset(SOC_MCASP_0_CTRL_REGS);! H/ J' c+ [0 [5 v# I# J) {% P
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
3 X# |$ M4 c1 {6 B: J5 R# RMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);) n5 u/ U: u, ^5 h6 J9 q& f9 S# R
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */1 e8 G/ C* F, s$ k1 i  {  O
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
8 E+ u  e/ S* K2 Z* g2 c. BMCASP_RX_MODE_DMA);
3 }0 T# P: A& s! @. _* M$ {McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
4 E+ R5 T& E9 n1 c  j$ @MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */- W+ u2 x# Y/ p. V
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, - L8 F# H0 G% Q6 _
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
' S: {# v# r' e& ~( BMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 4 I5 V3 ~! D- F. R+ V2 |1 I: {1 Y9 h
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */* k, s+ u6 a& t+ ]/ b, m
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);& ~& Z1 j7 x% r! U( [8 D
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); . N, D4 a) Q4 A
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
: _9 u  L7 q3 z5 q) X4 r4 A0x00, 0xFF);
/* configure the clock for transmitter */; V5 b' N8 m  g' I! u
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);- E/ {  r7 \4 Y4 {
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
% l/ C6 o, P, b+ d8 ~( tMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
% J; V5 m8 U: x4 k3 Y  b! ]/ S! F( u0x00, 0xFF);% r8 a2 e: J3 J6 ^8 ~

' N7 O+ t1 W& g( q" {. Y/* Enable synchronization of RX and TX sections */ 7 c  c  I' ^* S6 Y* A' l1 \. Y# g
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots *// X: Y/ E- q, d: {) H. F+ M
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
8 S' z; |) ]6 S: @McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*3 K0 Q+ m2 \) L, f5 S; n
** Set the serializers, Currently only one serializer is set as
* f6 Z8 g( k/ X  W** transmitter and one serializer as receiver.* P% G+ U# w, y- q! |3 ~2 g
*/) O  j/ V- y9 ]
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);) w% B: u8 a2 ~% I/ V: Q' d# u) H. D
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*; B& m- I" f; i8 [
** Configure the McASP pins + ]2 w8 ^* x7 G% {
** Input - Frame Sync, Clock and Serializer Rx- M* t" W2 j- i) l0 V! _# h8 E. m" H. k
** Output - Serializer Tx is connected to the input of the codec 8 i1 e8 b1 g. u0 I
*/
0 m7 V; u7 I! g; V1 Q" tMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
6 b6 t& V6 B, Q- v% Q  z7 R( q; sMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));5 _. b+ X  T+ c
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
" D5 |! V$ g9 }+ }" e1 d  X# H| MCASP_PIN_ACLKX* O* G2 N7 l4 C, m9 f3 S- x
| MCASP_PIN_AHCLKX1 M1 y, T0 z5 g0 C# }4 o
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
" r4 x4 ]/ S: |, W. P$ _) UMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 3 i9 \1 i( a- H! B, r
| MCASP_TX_CLKFAIL ) g- }, b* _" ?( j( r
| MCASP_TX_SYNCERROR' R' ~) u( C  f% J8 N: [. M
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR - w5 n- A" a, B" r1 ^2 |; j
| MCASP_RX_CLKFAIL
9 ?9 G; D+ W. R" y/ Q8 r" _3 v" P| MCASP_RX_SYNCERROR
: l; a: |7 O9 b3 _| MCASP_RX_OVERRUN);
6 m! C3 w- O. [! P# ?' W( x; H}
static void I2SDataTxRxActivate(void)2 p5 s* ?* o+ T- R2 A
{+ k  U7 s: ^3 a/ z, J
/* Start the clocks */
( G8 l+ _6 b5 s' F3 ^. e  YMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);* L/ D% O6 _' v$ X  F: g
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
0 ?2 u  w% B- u: ]4 G2 G! DEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,* w' y) L* m( Y& }+ B
EDMA3_TRIG_MODE_EVENT);
0 Z* e9 d  l/ C+ |$ _& cEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 5 t7 q1 Z' w% K2 R; M
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */+ S5 [/ }3 ^) ?' j2 m2 N
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
: y" {+ _5 \; g+ I/ c- m5 uMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
! z5 n! O6 _/ ~. Uwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */1 f# [3 I- Z; |) R* w. U
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
) ~8 T: W" g) \" i6 x6 o1 SMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);5 ~4 v4 z$ w9 W! K' O5 p5 X, Z: D& G
}

# x! b9 k1 K7 R! L7 O: f! `
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

7 _4 k( G( B: Q" d8 e0 l1 T9 [) U0 p




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