嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,2 F4 r  {0 Y2 P& x
input mcasp_ahclkx,4 d5 h+ \# Z; T% H7 B
input mcasp_aclkx,
0 G8 ~/ e% V$ x+ r8 }' R# Pinput axr0,! t9 v2 s7 @+ B: r) W7 [, |

$ p# y9 Z/ }: w0 h$ Joutput mcasp_afsr,
# \' B  V: S5 j& t2 {6 [output mcasp_ahclkr,
$ b$ j  W7 b: N& foutput mcasp_aclkr,2 I. |/ Q3 i% H6 |# y) K) ^
output axr1,
+ u4 O! y6 l$ o+ G! G
assign mcasp_afsr = mcasp_afsx;
6 B1 ?- o1 T! P! S% b7 }assign mcasp_aclkr = mcasp_aclkx;
& D5 D; h, S# R+ Yassign mcasp_ahclkr = mcasp_ahclkx;
: \4 D0 {* c1 c- s/ vassign axr1 = axr0;

) A3 @$ f& D, f7 B0 l; i" |8 e$ e  z) `
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
" G' n( D3 N. \) H
static void McASPI2SConfigure(void)
* q2 s* R( E5 H( F- U{
" g) m- H$ W/ d" {McASPRxReset(SOC_MCASP_0_CTRL_REGS);3 s" t& n" n: Y# Q  b: |
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
- w3 n3 s9 l2 \McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
) ]3 ^6 H- m. i' d6 KMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
# S9 v- V- B* f$ q; xMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,& f6 N! H, Z* x5 W3 z
MCASP_RX_MODE_DMA);. }4 U" n* f8 c/ ~, ]& n4 u4 H
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
6 D9 F- n+ u3 N5 o5 O5 VMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
" d  d" P* r; e  [9 ]$ d3 G* X. SMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, # _" g6 _9 o) Q
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
+ e$ `4 Q: o, M8 R0 `( t! @- f+ rMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
7 n. b3 P5 |4 e7 ~7 Z% Z6 JMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */5 O; R6 s/ b3 u$ U
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);4 S7 ^4 e4 X/ O. ]4 S
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
) K7 j6 c. ~  D: n5 AMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,0 |" e( p6 d& @( m5 F! k. q" y
0x00, 0xFF);
/* configure the clock for transmitter */: [' |) t2 b2 Q3 Z8 ~
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
6 @8 n* I6 V) q: |: sMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); : }4 H( R. d9 U* S+ ^% l- s
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,: F% T3 i2 J# U
0x00, 0xFF);" R7 E& A' }; m7 U* e7 b

  O% S4 Y8 l7 w* p6 \* x/* Enable synchronization of RX and TX sections */ * {' ^( |. L6 K& r4 Y
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */4 o% y6 x! o4 B0 s6 D
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
* y7 m7 ~. o# v, k  Y$ J. R& Q5 FMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
+ K: v) G& {  o% [** Set the serializers, Currently only one serializer is set as7 Y8 {  G2 n; d2 K; D# N
** transmitter and one serializer as receiver.1 d, w! E4 r$ k/ V3 h3 V
*/4 Y/ T, W- s: B8 j% J5 G. {
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);; ~8 L9 A  ]  I9 S# g; q
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
. Z* T1 M: v9 K** Configure the McASP pins
' B. ?: M2 }9 K) E0 E** Input - Frame Sync, Clock and Serializer Rx
6 m# G: j1 a: w- ^** Output - Serializer Tx is connected to the input of the codec
, }' X# p- [0 M7 @$ e! ^*/
8 x! ?( b  J: M/ g0 A! M$ [McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
" K' h2 ~% M* jMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));6 B$ g$ s2 R( \
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
, c$ b/ j: K' M* ?  ^5 q! h| MCASP_PIN_ACLKX
4 V: o; s  f* ~| MCASP_PIN_AHCLKX
# z6 w. e9 d# i: W( c7 e+ Y| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
) S: Y6 U4 l6 z' gMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 9 n! r# ]3 o9 ?2 y" y) R; O
| MCASP_TX_CLKFAIL
% g. i9 x" x3 [2 f9 V% \. J" W8 `9 _| MCASP_TX_SYNCERROR
' o' d4 \6 P* |. j& S9 ]% D* `9 d| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR " {9 r* W. a3 y, b, p3 x( f7 w' K! ^! o
| MCASP_RX_CLKFAIL, e) K+ ~7 ~8 c9 Z
| MCASP_RX_SYNCERROR 8 i2 Z. f0 H2 n0 b+ u4 C
| MCASP_RX_OVERRUN);
, @: a% k+ u" q) H" J* H$ ]}
static void I2SDataTxRxActivate(void): n5 W, O/ x( }  H1 A5 L
{6 i2 ?- D: X6 s, X+ f7 k! @5 s# Z9 l
/* Start the clocks */
- j/ e1 p' f% q: z4 m( `; ^" VMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
1 U9 N5 P( Z- i" xMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */( F+ j/ K+ t) i  [. E) l
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
* r" U0 |. y* ~& A' l/ j9 wEDMA3_TRIG_MODE_EVENT);8 ^8 ^' A2 Z5 [% u
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
/ S2 }3 @  v0 r1 s3 ^$ X3 s8 B# JEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
- X, M# O. R  @% w. M* V0 d9 HMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
" {2 t6 }# m( B3 u- e$ ~McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
+ }# h! W) _; J! b5 q: Kwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
  q( f: H! k( E, B0 c. bMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
/ v) `+ Y, L4 o( v3 YMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
- n- O8 R; r) R) @* p8 [}

3 Q5 C3 b3 U) u1 A/ q
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
% r# j  A5 x) m* |* Q





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