嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,: G  o! n/ [* F" P# t  ~$ P9 V
input mcasp_ahclkx,) ~/ ?2 ?* O) U, K  s
input mcasp_aclkx,. n& @  U, ?/ Y6 D6 E
input axr0,8 P" S7 {* q8 q0 F. g& p

9 m- T$ W# G6 B1 goutput mcasp_afsr,, ~$ K" Y6 V2 b" p. U
output mcasp_ahclkr,# c: D4 h6 T8 e% H9 X+ @* |
output mcasp_aclkr,
9 w5 G. R' G2 b/ P5 Noutput axr1,
2 C! D$ B) [1 L7 Z, T1 W$ S
assign mcasp_afsr = mcasp_afsx;
( A9 W8 M1 s, h0 w' kassign mcasp_aclkr = mcasp_aclkx;1 t7 D( o7 F( `" _
assign mcasp_ahclkr = mcasp_ahclkx;
/ |- J$ E' `# d" x$ wassign axr1 = axr0;
7 v& e& N1 N  g* U/ G6 f
4 \) }6 d8 H: D
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

8 R5 l/ A  m5 r3 A' |
static void McASPI2SConfigure(void)2 u5 L( s0 H" a8 x; |8 i* L! [& ^; x
{
# ?2 Z. B/ u/ I# E$ ]( u$ u& p2 oMcASPRxReset(SOC_MCASP_0_CTRL_REGS);$ d) R, r3 z. A3 d  x3 \, U3 a
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
7 ^8 _) Z0 E" d# U- F: y1 f6 p, y, XMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);' a$ i3 g3 h7 S8 S. [7 N
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */8 D0 e" L1 @3 Q( y0 s1 E
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
4 n# o5 e7 s% D: L% Y2 EMCASP_RX_MODE_DMA);5 W! n2 n  L5 a/ i  O
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
/ R& V9 J' Y) ^: T9 xMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */& u2 F& ?3 z* I; Q8 l
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
9 I) U0 ?7 H4 {1 u) m1 a5 `8 ~MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);( T; U8 t. o. P: |2 a5 ~! \  g
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
2 u( k8 }+ X2 d# }6 `. V0 g/ Y6 uMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
0 l+ Q% a, N9 J# vMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
  C/ t" {! _; m  \( ?; M8 Z! dMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
8 U, ]3 @* E5 |1 j! `4 A) BMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
5 c4 m3 N4 O8 F0 c& f; E8 F1 ]2 e0x00, 0xFF);
/* configure the clock for transmitter */4 W  {- X% R3 i: L
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
% P  w3 e& G9 e  y( fMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 8 [7 H! y2 i! P
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
7 _, b9 k8 `4 F+ j, y; G0x00, 0xFF);3 G4 g# |, P! p# c3 W

: j2 i( s( j* i* e' Q/* Enable synchronization of RX and TX sections */
& h2 @& S2 e- V: i; Y/ kMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */: n, T5 H/ I) ~- i- ~9 G- N3 z
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
6 v1 C2 z" [- ~1 k! SMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*2 O( s- z& M4 U
** Set the serializers, Currently only one serializer is set as6 t* s5 d# y5 h8 A
** transmitter and one serializer as receiver.
) `. o( H4 \- P! y2 ?* U" M+ S+ H# q. {*/6 w4 c2 r( R2 L- u: V* m7 e) `
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
3 f9 w' Y: N2 xMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*! i6 t4 l& H+ ^# P! P) P. R
** Configure the McASP pins
8 M7 {. r* @7 b$ T** Input - Frame Sync, Clock and Serializer Rx6 h$ K) `; V9 i3 G3 J
** Output - Serializer Tx is connected to the input of the codec 9 f+ S) p6 I; u, @# w
*/
$ c2 N: k1 E2 ], x/ \7 C$ T4 MMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);% o  p/ i1 v- ?& ^, _
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));4 H' x  w( x( t- Y
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX& P! P5 t* G7 r
| MCASP_PIN_ACLKX5 a& B3 S+ S+ u( g# q9 d- W! ~' b
| MCASP_PIN_AHCLKX
: d  @- M& }. s| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
5 Z, F3 h2 S$ SMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
/ z0 e% t5 M, r$ ]; Q( u) q| MCASP_TX_CLKFAIL 9 W7 a0 F) }; y6 Q( A6 L
| MCASP_TX_SYNCERROR
# I9 U- I. Y( E5 d' i  i0 O( ^6 ]| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 1 Q- `. |. n& c6 V2 {- q9 B
| MCASP_RX_CLKFAIL
: V5 d; d# p9 U| MCASP_RX_SYNCERROR $ `  o3 Y. d* B
| MCASP_RX_OVERRUN);
) p2 I2 @+ [9 A8 L5 W}
static void I2SDataTxRxActivate(void)
3 h3 x3 p4 `7 D/ _8 G4 H- i{
* _3 K4 e$ \# @3 i0 K* w, B- Q/* Start the clocks */3 s$ ~3 Y; J1 W3 b
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
7 `8 x/ a) Z' z& n1 T5 q: SMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */3 z; a8 h) W, f6 l
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
( x; F0 G9 k- l$ IEDMA3_TRIG_MODE_EVENT);
8 A1 o! x0 j0 d8 h+ T; bEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 4 S9 k4 C" G+ u6 u9 W. p
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
+ h) P' Q5 c0 J9 VMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);' n$ c* S8 N2 A2 @, D9 W
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
9 g6 n4 F" }7 c/ n- ]: o' }while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */% w7 X8 N5 K6 Q6 r4 I+ J7 ~/ m& {2 M
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
% \3 {- H$ ^: |McASPTxEnable(SOC_MCASP_0_CTRL_REGS);: l  O0 ?5 ?5 D* k1 A7 R
}

3 M: Z* F* V! V4 c& a
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
6 r4 s% i1 R  A1 V3 F





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