嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
8 H) J6 U/ J. ?8 F1 D& R' hinput mcasp_ahclkx,9 l0 a3 ^/ k& T# M
input mcasp_aclkx,6 m' X7 x7 V9 S) o
input axr0,
4 J7 ]8 c3 y7 E; U$ [2 `2 o) ]/ V( {1 s, [1 H8 N) m% Z
output mcasp_afsr,
( X; X9 ]: e( a5 g% c' Routput mcasp_ahclkr,& v$ r9 E3 ?; S( [* @$ N  J
output mcasp_aclkr,
& \/ M! @/ D' H$ X; b/ |, [8 Joutput axr1,
7 h1 T3 B* {9 a  C0 }# l
assign mcasp_afsr = mcasp_afsx;
# _, X% i4 p  ?5 R2 V0 {$ x, C* b) kassign mcasp_aclkr = mcasp_aclkx;
* O0 c; A( v! z+ U/ M/ y% s$ }assign mcasp_ahclkr = mcasp_ahclkx;
9 A; ~  V. x5 z/ f5 `assign axr1 = axr0;

  ]7 R: V8 y, F6 D
" ~# a) x! K! a4 F
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

7 p5 y, E  Z8 K5 y$ {
static void McASPI2SConfigure(void)1 m* R. k3 F: y  [& X4 C
{5 O' L2 E, `& s3 a
McASPRxReset(SOC_MCASP_0_CTRL_REGS);5 i4 w8 A* q% f2 z5 h/ J
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
  l- u) A4 }' p! F/ \% WMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
- e5 f! U* r( z% o) RMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
- T% x; e( x+ z9 m4 q% j$ l' OMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,$ A* m1 i3 x! V' ]6 v0 g3 G
MCASP_RX_MODE_DMA);' m4 A! e" w5 D: E
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,6 T3 r* e) [1 d" [
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
3 \/ Q# Y4 ~4 A. U) UMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
  c- z/ L6 c$ h2 k# `MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
* W7 `8 ~$ E6 F& E& qMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
/ c. F3 q: V; Q) b* c. ~' {MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */8 k; J# n6 U+ Z  d8 C8 b6 O3 B
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
8 n6 Q( x1 Y, ?) z. G0 n- o' |McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); $ d) o2 t, U5 b, E# q* Q" D
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
$ @4 c2 q0 g2 z3 H* D$ ]' s0x00, 0xFF);
/* configure the clock for transmitter */
/ u% _3 l! w% @! UMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);1 j! b4 g- _' P' h
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
1 {4 S& Y; m$ L- [& D( rMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
! o; @! V. U( g5 z, o0x00, 0xFF);' Z5 H! A% |* n- W5 V# }
5 A. T3 Z& `7 x* c8 ]0 |0 z2 d
/* Enable synchronization of RX and TX sections */ # }+ y$ w% F# \! w% F0 M4 z
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
  W6 }2 |6 f; \McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);9 S( [2 V. L5 y
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
# U/ e7 e" P1 b$ D. b9 k7 f# |** Set the serializers, Currently only one serializer is set as8 L( G) k  k, S3 [
** transmitter and one serializer as receiver.
, h# {3 L; I' T) _' K+ p' Z$ X8 e*/" t5 F6 L) F. |! I' }( C
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
5 F' a5 K4 ^" _! h! \McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*1 ]& n* c& K& \9 H7 a  T. X7 C
** Configure the McASP pins 8 F: H; E0 e  o  e1 K
** Input - Frame Sync, Clock and Serializer Rx
$ U* F! N1 @1 X7 `** Output - Serializer Tx is connected to the input of the codec
; g# K& |- R- S( h: c% ]  U- F*/
6 f& g0 C& b5 S5 a* Y0 QMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
# C7 i; {4 O+ S2 C  W5 I8 AMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));' |' C( t+ k/ H1 s1 f) J6 j* j
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
/ p1 \; n$ ^3 V! q( y+ E4 c| MCASP_PIN_ACLKX
' ?  Q# ~# w# [4 p" ~/ ?" _| MCASP_PIN_AHCLKX4 Q! B- j4 N0 N  Q. A* X. d3 O1 A
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */  V/ \0 N' j( n; [6 @
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 4 n3 r; k, T: T! |- Q% N. K) a: s
| MCASP_TX_CLKFAIL
0 j3 A2 }/ s1 F9 o| MCASP_TX_SYNCERROR4 E& @. S+ A4 M' r0 p
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR % W9 j1 o3 e; A# S
| MCASP_RX_CLKFAIL" Y+ u1 D+ B7 B9 U0 B5 ~
| MCASP_RX_SYNCERROR : g6 ^0 E) H) c* x
| MCASP_RX_OVERRUN);( C+ s% t' q: `% |0 j
}
static void I2SDataTxRxActivate(void)
1 H' A# \" v; |5 x: k{8 u! n0 E3 g8 L! ~! v8 m
/* Start the clocks */6 E$ A! N. T" n  o$ S% ^
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
" t- ~$ w5 ]; z1 T3 M- m; JMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */8 h5 `( }8 x( N2 j
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,( W/ @1 g) n. s, g0 r2 l' B
EDMA3_TRIG_MODE_EVENT);
  o3 c& l5 j5 m: C" _2 ~EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, $ [, t/ k' \* R: h* Q
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
' }4 @4 i' Z" d/ @( V0 B) i+ yMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
( M; s; S; J7 ~8 u# s6 ~/ U- ]! [, ]  `McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */- {9 J" E$ S8 F
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
3 ?1 s  D. r  O* y2 W1 c( _9 RMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
) ]; G+ G* Z. M' ~4 \; MMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);! ^& F- C; s( H3 y: `( G
}

% c3 s' m3 Y' ^/ A% L1 z
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
/ K4 D- H* E0 O4 t8 }4 J3 |





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