嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
* |0 |; U" Z/ p6 minput mcasp_ahclkx,
5 o8 n4 J$ `( T& `' k2 {- Tinput mcasp_aclkx,
3 ^- g; Z" l  L  Z8 _input axr0,
9 ~1 A, w2 M1 |. S0 ?
# C4 m% B- Y! o  {, qoutput mcasp_afsr,
3 j9 h) M; j7 w4 T( Eoutput mcasp_ahclkr,, ]! U5 h6 V7 t) [% u! ~0 m
output mcasp_aclkr,
. ]9 [, A, P* P0 _! {$ Toutput axr1,2 E( E  x- k: @* C  Q
assign mcasp_afsr = mcasp_afsx;, C" b- `8 l. E; I5 ]+ n9 W: u
assign mcasp_aclkr = mcasp_aclkx;
' x' {7 g1 H, Eassign mcasp_ahclkr = mcasp_ahclkx;7 o) W- h6 T+ J# U. h1 V7 C
assign axr1 = axr0;
5 D& a( @& G) K7 ]

# m6 m, V/ m7 O' A& b
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
2 Q' v& v9 G% }. u# j' J
static void McASPI2SConfigure(void)% s5 ]& o/ m4 \9 q3 a2 f
{8 v1 ^3 z! M( F  I8 ?2 f* Q
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
4 [) e& }+ H6 l/ U+ oMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
: N/ R* C# o+ S2 K; |7 |# Q" ~, FMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
9 Q  J7 @" V& L$ ZMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
$ G5 ^/ r% x+ n# f2 J' Q# BMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
/ B( f' G& r  ^) V! F9 a& wMCASP_RX_MODE_DMA);
% e* m4 K! a& N! D: uMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
0 ^( c/ n: h& O& e$ k* sMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */+ [$ f8 Q. x$ n+ ~2 F6 ?7 E0 A4 N. d
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
) ^+ Q" s, L+ q% Q) [MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
# D5 b1 _# l! F* K3 N& XMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
- o" \) @/ T0 n% L2 q8 QMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */# b" |& Q3 ]. X- c6 n$ h
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
+ X' K  n* ^& a+ x' x6 BMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
+ U7 U. M2 ~& g0 ]McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
* ?' O$ F7 B, p, S: `0x00, 0xFF);
/* configure the clock for transmitter */: M& G, f0 X7 B+ _# L1 B
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);% C( s3 c( [2 j
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); " k4 i* T1 [3 X( Q' O
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,4 S* U, J4 w6 o( K5 j9 _) y
0x00, 0xFF);
) d4 ~) z, `0 h$ Y0 L/ [" q; n" b, N4 ^* L, v+ A) E
/* Enable synchronization of RX and TX sections */
7 o4 H4 k, ^8 N( VMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
& F2 g2 ?3 r2 @  T: `McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
! C  z  J  `9 e) I; i0 D! AMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*. ]$ I# e; u( @- q! m! @
** Set the serializers, Currently only one serializer is set as- F' h) e. @  z0 v
** transmitter and one serializer as receiver.4 Z" E$ t) Q5 W" f
*/
+ @% D8 ^! d  k( [McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
# u0 Y+ Y$ B! q# B1 jMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*& s; r6 f5 r$ ?( v# F
** Configure the McASP pins
/ O. @% }1 p8 v3 U+ _. [7 |$ N** Input - Frame Sync, Clock and Serializer Rx: o: J- k" ?6 Z2 @, f& \
** Output - Serializer Tx is connected to the input of the codec
7 Z3 ~0 c& D" ^+ x. r" K. B*/
* E/ P* w0 ]- NMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);. C& d/ P' e6 \$ ~
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));0 {* f2 ?* p4 z3 R" m( J
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
# H* O4 `. s+ D' K| MCASP_PIN_ACLKX
. t0 r3 Z4 s( t% ^  X0 e9 T| MCASP_PIN_AHCLKX1 C+ e& L1 C$ Q3 V, j9 r
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
" q6 J. B& N" A) `McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR & c8 ^0 s. F1 N3 [% ~' g% D( O
| MCASP_TX_CLKFAIL
, y: A5 O; F2 u0 T2 o| MCASP_TX_SYNCERROR
3 n3 h0 {" f" ^) k$ e| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 0 A/ f" A( P. ]$ S
| MCASP_RX_CLKFAIL2 A# J/ m6 ]: d  k8 K
| MCASP_RX_SYNCERROR ) W+ H7 P) G1 i( u
| MCASP_RX_OVERRUN);
3 b$ ?7 U3 |+ U: a& Q; A6 f" {/ ~2 O}
static void I2SDataTxRxActivate(void)
* w& m( c) r; Q# D{
8 i( y0 A( ?# N1 S% Z* I& X+ c3 M  |7 W/* Start the clocks */. C8 V! V; a- H9 j/ I, a) u4 o
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
4 F) R7 s/ i5 O+ |: n  g! [' ]McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */3 Z# {' B0 `/ m1 {3 i/ T
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,! A) Q1 ]9 ]+ u( b
EDMA3_TRIG_MODE_EVENT);
/ [1 _' t0 J& E0 DEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
/ i4 ~5 H; a6 w3 ~2 h& A1 Y! ZEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
& o+ Z( ]& m# ]1 v: [/ B' DMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
+ N! [9 ~- C: p: c, AMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */3 z  n' f8 w, s/ K! z+ ]
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
  K' d6 Y0 `* p& b7 IMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);) q3 A  V, h, f  N3 [1 W
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);( J3 i9 k& v; V% F- |* r3 i
}

9 P; Y- i9 Y+ N: y: Q2 Z
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
* B. o9 |/ o( E5 v8 }" I7 Q





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