嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,( Z( x; J9 R, R( z4 n0 m" |/ T
input mcasp_ahclkx,+ r. N/ q  l; j5 z
input mcasp_aclkx,8 k5 Y! W# y2 @2 |8 s! O. M* ^- X
input axr0,3 B8 z- T' h- x
, M8 [& T6 X% Z" B7 D4 U
output mcasp_afsr,5 E. t- k8 f5 v4 q
output mcasp_ahclkr,4 ]) W# n( ^, v0 N
output mcasp_aclkr,1 `: v$ x7 K. \8 }. W; N" a
output axr1,3 K% u' k7 y* l' @6 i& ~# N
assign mcasp_afsr = mcasp_afsx;- U* @7 s7 I) x" S% z0 F- p
assign mcasp_aclkr = mcasp_aclkx;% K9 A: @, \! W, F% ~
assign mcasp_ahclkr = mcasp_ahclkx;
/ b: O- b4 K6 e8 Xassign axr1 = axr0;
( ~4 c% s/ L* r3 |4 q6 A# e
8 E+ J3 _9 E  o8 q" h9 Z: w
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

2 Y' T2 `  X/ D+ \- n
static void McASPI2SConfigure(void), \+ ]5 ^9 p- J& t  `" p
{
. N- S' ~9 N* N0 qMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
2 o3 o( p, z/ Q/ b9 V$ cMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
2 D1 ~5 r& V0 t4 yMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);) N7 T& B& G! A1 u
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
5 \( W4 j& l( N0 L* @2 ~McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
- k7 x# r  N4 |8 AMCASP_RX_MODE_DMA);
# }% G: |* w1 F, |) C/ A& nMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,6 s' v6 b1 Y$ y( @
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
- ^( M) _7 i3 G, B. M( T6 UMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
* p& }' s; G% KMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
$ }" v" f+ @" N% ~3 D" ?) gMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 9 R4 O! c+ d% D' R, O9 h7 _7 ~. z" w
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
( f9 K& }7 Y. G' g& qMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);9 F3 K9 Y# F" k! a" p0 C
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); , j1 f9 }) h) f1 ?- L8 e5 R
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
4 \& C: `+ M+ g$ ~$ Q3 |9 o0x00, 0xFF);
/* configure the clock for transmitter */
# U% p8 @5 Y$ G/ Y, Q+ Y" ?7 JMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);3 z9 C* g7 E9 V
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); . j2 r1 c6 t$ k  {
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
0 R% y6 M8 m5 a' a3 q5 D# v0x00, 0xFF);
- D' c) R& q5 U6 r) _8 \
/ d8 j9 y! c5 \/* Enable synchronization of RX and TX sections */ 4 L2 a. P1 V5 r2 p) ^9 Y! I* ]% M
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */( B% r: W( \: s1 h+ `# s3 C
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);% e3 ]7 J  O$ n
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*8 W7 W, Q# w  b" N; b$ s* ^
** Set the serializers, Currently only one serializer is set as- L9 u; G6 s: n1 f/ f0 h
** transmitter and one serializer as receiver.
% q8 q! L' m* o  \" R*/# W2 }2 v. J9 [
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
* C% d3 n& d$ F6 HMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
, Y1 \5 X% \$ ~' l; d. H& a4 v** Configure the McASP pins ! A7 @2 c& W# `2 o
** Input - Frame Sync, Clock and Serializer Rx
* D: V2 ~& U6 g- F3 _** Output - Serializer Tx is connected to the input of the codec
1 H4 [7 a5 t! ?*/* e; F, V  h" {7 G0 I
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
5 `% o" z: I, \, z4 |McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
+ D3 G$ ^& A& n- xMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
$ ?2 D* d7 C7 r, I| MCASP_PIN_ACLKX: p4 M1 n8 j: c* F. q1 D3 r
| MCASP_PIN_AHCLKX
0 J* H4 d. o! p/ F| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
/ a3 X9 g4 v' Z9 [McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
. S& S) B- W9 g8 h) e, m5 e| MCASP_TX_CLKFAIL
+ q8 c' w5 P0 d* y% T| MCASP_TX_SYNCERROR
" ^. h8 v& W7 Z# B| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR * c7 t. W7 d' |2 X. K1 h
| MCASP_RX_CLKFAIL
% U& l, {1 y5 ?6 Z  e| MCASP_RX_SYNCERROR
' |* A$ q5 w8 T5 E* K0 Y+ @, v| MCASP_RX_OVERRUN);
$ V3 S$ ^$ b3 m1 U1 q2 X& Z}
static void I2SDataTxRxActivate(void)- U+ \4 _) G8 H+ [
{
; z7 N8 I' ?  D4 f/* Start the clocks */. X( Q; b# ]0 G' {. h0 }
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);3 j5 d# b7 }# V1 I. [
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */$ f2 O  h0 j) y# m" g
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
6 v+ a; I9 Z& s* I/ qEDMA3_TRIG_MODE_EVENT);
" A( ~, ^* ?  \# O/ b! AEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
7 z3 Z: A* P8 L. x; B6 @! gEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
  H) w1 A, B7 A" ~McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
/ b2 ^0 {* T1 b* ^/ w+ ?4 EMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */+ J, G& @& G. F$ Z! E
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */& l, B* y" |3 k' C3 E7 t: |
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);. U4 U# w+ Z: G. U7 g6 j+ a5 e
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
  t5 n3 U1 B# A6 }}

" N, n% `5 {: l) U$ l
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
- H  t- _  H; a





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