嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx," K. V5 }6 {0 L, C8 ], J% x4 |
input mcasp_ahclkx,' \' k0 ]9 W1 N+ y2 v
input mcasp_aclkx,: \3 [$ S( q. j( [" g% D7 C: P
input axr0,
2 e9 F$ [& Q0 b& a
, I8 _8 A. M, soutput mcasp_afsr,
8 n5 s% U8 }. S7 P& C6 q1 Ioutput mcasp_ahclkr,- k3 H, ]- O; ]2 b' l) w2 M! K0 x
output mcasp_aclkr,- m5 k9 |8 Y$ |' ~. [3 L# R
output axr1,
+ m% V# X% i; o
assign mcasp_afsr = mcasp_afsx;
' \: u/ H( E' t- C: D5 oassign mcasp_aclkr = mcasp_aclkx;
; M3 J6 s9 e- l: W8 C+ Dassign mcasp_ahclkr = mcasp_ahclkx;
% W1 a+ O! E0 fassign axr1 = axr0;
9 O4 d! F [1 |3 a: M) l( [( K: @
3 P0 x9 f7 |1 l5 M4 L在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
* {8 h" a$ h [# u# d* p+ tstatic void McASPI2SConfigure(void)9 v/ C2 C+ A) j! X6 F
{. E# O% t% E+ [; h, x; K
McASPRxReset(SOC_MCASP_0_CTRL_REGS);- P z4 K* z; B
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
# N/ K" W9 Y7 |7 _McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
" l9 Q, C: C6 G" G0 I9 n3 bMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */' R( y/ G1 \# b3 V$ l( c6 ^6 c: c
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,( h9 {6 w) r4 M
MCASP_RX_MODE_DMA);( ^& \* S( ^2 C* F4 p- e% E4 Z5 g
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,+ C; u4 `& r: H8 z
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
0 N5 h: K5 h# W7 D0 A* GMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, $ `+ \3 P Q6 B
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
% P7 [2 T2 d2 ~& xMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
- v5 L" K1 [9 b9 g: xMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */. P+ c$ X5 m/ d; Z- N
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
, E0 _. ?2 z8 e9 T6 |6 Y1 \0 h! lMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 4 l2 B7 v) ?1 O% p& R+ U
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,8 r0 ]3 z0 B7 e2 h: c$ c, R$ @+ N
0x00, 0xFF);
/* configure the clock for transmitter */
: A: L6 F) F8 RMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);0 ]- E5 m$ C7 E9 m# B9 k$ i, F
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 7 |% o' `) W, q" g! j$ L& i
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,( @( D7 ^! n# z+ I I: J
0x00, 0xFF);9 s- N/ q8 b) S2 F4 Y0 g. u7 W& Q
( R8 G* `( F4 ]+ Y
/* Enable synchronization of RX and TX sections */
. ?8 T; Y6 ^ `% M3 ^+ K/ VMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
+ W0 B9 [ d5 r# b9 ?* x/ HMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
% S* \; d/ t" g4 @McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
# j( D. ]- Q# u5 H6 ]** Set the serializers, Currently only one serializer is set as+ L# `* z; g9 C. x
** transmitter and one serializer as receiver.
- e" e3 c: t5 _/ O5 N7 C# ^% L3 z! c*/
" k1 `2 o9 | t! p* j% N# KMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);5 X1 f7 u! j- e" U; R
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*; v* p; U% o8 x* f: z9 g' @" Z9 @
** Configure the McASP pins * m0 R; `1 M- b. v/ W+ E3 A; v
** Input - Frame Sync, Clock and Serializer Rx
+ I1 {% `. v6 n$ D( h, r1 z** Output - Serializer Tx is connected to the input of the codec
6 r- A$ P4 |! W i# q! t9 G*/% h% ~. @0 e; N, U; z, [
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);1 ^( e9 Z- Z* ]$ P0 a
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));+ J% K. n0 T% h3 g1 l9 K2 V. R
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
8 p) n B& `6 q q+ l; V! {5 a# d- h| MCASP_PIN_ACLKX" |2 y9 `. P7 z; x2 x* H
| MCASP_PIN_AHCLKX& S, G7 E/ i) `. B$ _7 [$ r8 Q T
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */7 Y n* M8 a) |: I n! G0 M. y
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR / K5 s7 h2 H, k4 p8 D9 f
| MCASP_TX_CLKFAIL
3 H8 X$ c" S0 N5 C| MCASP_TX_SYNCERROR
& n( Y; h# w+ f2 l N3 ?! n1 V| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 3 b/ f7 ` `. v( H' `# u7 c
| MCASP_RX_CLKFAIL
1 U* M- z+ D2 W& Q6 t- D| MCASP_RX_SYNCERROR
& u& R1 V# S# ^6 m3 D| MCASP_RX_OVERRUN);
0 E) k! N8 e# }" y, f}
static void I2SDataTxRxActivate(void)5 u1 {5 T8 w6 o) p
{8 }' T# [% }- p, F
/* Start the clocks */8 W9 l& o Z$ s! @% f7 K2 h2 L
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);1 N0 A) \! B5 E
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
- U# N8 M8 q% H! }/ F+ XEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,% D/ P# c: w6 S, l$ ^9 q( `
EDMA3_TRIG_MODE_EVENT);
+ D5 O2 ]" b5 ]; [" ^EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ; z7 C: c) v" J: H
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */4 J. p. H& {# d5 T: _: n
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
' ? {9 o* w [McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
3 M) c3 C6 n4 t4 |5 M# gwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */8 n( `: E2 N) q$ n8 W2 M- q
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
z0 o7 C# |$ R) b6 e! j8 EMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);- o2 k; S% J! _% d
}
/ Z8 h' ?7 ~) ^, w' P7 T- p+ x请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
' K+ h$ x% a4 P. J( v" p$ b' D
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |