嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,$ ]  ?: X! o9 @8 U) {( t- D
input mcasp_ahclkx,# N' _  L; I# u; m% N
input mcasp_aclkx,
% x- U9 P' }5 s& jinput axr0,
( a+ L) S+ m) `! g5 y9 [
, F2 b( M, S8 X- K( ?output mcasp_afsr,
9 z9 ^& ], d( u( `) eoutput mcasp_ahclkr,! W9 a) h. ?! i% r. z0 T$ b" A. e! m
output mcasp_aclkr,! h% y, ]2 w' u8 i& n# x
output axr1,
! y+ o. m2 Y! z/ o
assign mcasp_afsr = mcasp_afsx;+ a& d% X$ [7 W
assign mcasp_aclkr = mcasp_aclkx;. d5 S4 m- }. W) J% Z0 T
assign mcasp_ahclkr = mcasp_ahclkx;! d  B" I/ [' A% d- O3 {$ n
assign axr1 = axr0;

% }' P8 R: \9 y  Z
' R) G- ]6 |$ x4 Y3 ?8 m* i3 k
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

2 h* b: s- x" `, f. i' I# g8 ]# k0 g0 `) D
static void McASPI2SConfigure(void)# z; w# h  w. o  E
{
+ t; u- [* Y0 I5 Z4 s* QMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
6 ~) b4 G" w3 ?9 e8 tMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */! J6 o4 J. z* ?: e' _: O
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);+ n% @2 B8 x! {; p8 p; T
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */1 i7 o3 L/ C" r6 V
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,9 D2 W& r/ L! D$ a, a. `
MCASP_RX_MODE_DMA);' Y- a+ B2 T8 F( _) R% ~# {2 l
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,: E; G" t+ X9 o
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */# n' f1 B3 A+ f* C
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
& o$ E  k2 Q: G' ^/ [4 RMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);/ ^4 y1 U& h8 J5 I  v5 R5 _
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ) j" O3 H# X: g6 i- N
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
* x2 b2 O) k7 o# D8 oMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);- h2 X  |2 ?; m. x4 h: X! `1 @
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); / V% n( V" B" j% w. ?" A  V
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
2 ?! e1 D6 x6 G) n+ f; X% q1 R0x00, 0xFF);
/* configure the clock for transmitter */5 w8 V( {& L6 I4 ~
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);" D" B' U! t! U& E( u
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
5 h" a) O3 Y) T- V. m. tMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
- @7 ]$ y9 P1 D% y% C( |0x00, 0xFF);  Q8 P3 s+ j" }8 t! ~/ {
" q6 w9 o6 q% q% U
/* Enable synchronization of RX and TX sections */ 1 ^1 X5 `/ \' k4 c- b& _
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */1 d$ T% \6 f; T: V8 N
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
5 V0 n+ _3 ]7 ?" |  xMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*7 s- T. ~- f6 E1 O8 S7 p. F
** Set the serializers, Currently only one serializer is set as* d8 X8 N9 L, J1 i- h( M( w
** transmitter and one serializer as receiver./ Z; N  r3 A, ]
*/
9 V2 ]$ S4 r! ?) Z; u! \McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
+ g+ a6 T. N' b# }- lMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
: f0 i" i( F: ]7 ?! e' r** Configure the McASP pins
, F- X& G8 V. ?** Input - Frame Sync, Clock and Serializer Rx
+ {  u. q3 |$ r  a, u4 i** Output - Serializer Tx is connected to the input of the codec
4 @8 x" X: t5 f: r" q- Z/ J' L*/
+ l! `+ O$ y4 ?% w$ N2 KMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
  j, M% t% y- J" T# D  k$ V& cMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
& k$ l. A, Z6 ^0 C+ f- cMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
+ G  |% p+ S5 B| MCASP_PIN_ACLKX' Q0 Q, W, E9 B3 @( s
| MCASP_PIN_AHCLKX
) E' Y6 \7 F4 u! v; m7 P| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
3 S9 W+ t) f6 _McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
. u7 B+ G  b) Q5 ^; h3 y' F| MCASP_TX_CLKFAIL
: _) Z& [' n! _5 Y, r| MCASP_TX_SYNCERROR: D) L* @4 b3 Q& k
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
$ [; A# [' Y- e4 q| MCASP_RX_CLKFAIL) A  l: o# G1 m
| MCASP_RX_SYNCERROR , d: o' J0 a2 q. _
| MCASP_RX_OVERRUN);
( J7 u9 |  r" d' h" o- n}
static void I2SDataTxRxActivate(void)4 [: Y: E) G3 \. _
{! k* n! e( L: A) i
/* Start the clocks */
# d- y9 p% q2 ZMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
, l* ]6 H1 Z/ V" g  H* n8 p& V$ r9 _McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
( q" O! B& C- kEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,& M3 @0 }6 T4 e+ K. r$ l# D
EDMA3_TRIG_MODE_EVENT);# a. Z8 ^0 Z9 j4 O- |8 y
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, " r! e4 k  I1 s. ^* B! f8 I2 }
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */$ h. \! t1 l: R: d7 Y
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);3 w1 ^; @+ D) Q7 B! l7 ^
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
1 w1 U; i" N  W3 U6 V" G. Z  w6 uwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
# e7 \5 Y, j) \) ~; b) MMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
4 V, ?1 g/ {9 E, G1 `McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
( O- U! D7 o) v$ [- k- {/ F9 h}

  P" k7 v! d; D/ m6 I
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

4 E, ^6 t  a$ x; s0 |& i9 `




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