嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
' Z" ?' j7 ]  |2 {7 finput mcasp_ahclkx,
: o& I! I4 O* c# |/ }. `input mcasp_aclkx,1 ~) Q" R2 O. e9 V8 v! N
input axr0,
# p' {" s' D1 H! F/ }: y. c. Y! S/ [. c8 T2 A
output mcasp_afsr,
, y( ]3 L" S3 j" h7 V* g* t) zoutput mcasp_ahclkr,
2 `; E4 L6 ]/ |: s5 {output mcasp_aclkr,
4 d" Y# a: }8 s8 }5 Koutput axr1,
9 J3 A5 @+ o' g
assign mcasp_afsr = mcasp_afsx;
8 y' g( d8 F" q1 f' f: a4 {) v& Cassign mcasp_aclkr = mcasp_aclkx;# @$ u6 v' z* Q3 _- m
assign mcasp_ahclkr = mcasp_ahclkx;/ t( M- Z) Q6 K
assign axr1 = axr0;
, l; a4 V' T- _4 P$ ]  q
" {8 b. l; j' \" l/ M) V2 ^
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

2 x$ i# e. F0 d3 C0 M
static void McASPI2SConfigure(void)
2 c# G4 N4 O5 F) J. J  U# b8 Q/ n{
7 ?7 N9 m5 b' Z2 RMcASPRxReset(SOC_MCASP_0_CTRL_REGS);" g9 Z; ]4 ~7 l6 |4 q
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */! ?" v: y( e" o& s' M
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
) m  H# m  ~( {, ~McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */8 ~& C/ l3 J" G6 z8 n# K3 ~  x% v$ H
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
3 L6 _* a7 P: ^/ SMCASP_RX_MODE_DMA);
/ D/ ]( d* m4 }McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
6 O& X' E# _- v  F1 DMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */* \" d& X4 e9 M6 y- R8 D
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
$ o. S3 m, p/ b/ J' aMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);8 z2 y8 d3 t/ F6 w# O  a  p
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 7 h" @+ w9 f6 O# ]/ y$ Y
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
% F2 ]; f/ }  i3 pMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
9 ~& w& @  U" N) o- L2 [& rMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
. p  x1 U, V) j/ a/ J. dMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,  S& j$ w* \! D! o
0x00, 0xFF);
/* configure the clock for transmitter */
* s' N7 @/ E  J& w8 vMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
1 W# ^# V- o/ ~McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); , R( o; M0 Q" R& Y5 f2 C2 Z
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
+ P4 C) G' }; ?' q% N: d' E0x00, 0xFF);
$ G; `5 ]' l  L: C3 W3 ?7 a
+ M5 q6 Z0 `) v; P) |9 F3 G/* Enable synchronization of RX and TX sections */ 8 \3 A. l  H3 Z# t9 o
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */: O" ?+ w* i4 T0 y7 R4 s( Z, c8 W
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);' d& P) E% B9 n
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
( m7 K6 u( R! o; s** Set the serializers, Currently only one serializer is set as" R/ J$ ~/ q) |7 k: W
** transmitter and one serializer as receiver.# D/ C. r7 e: T( I  ?7 g
*/
+ D0 Y9 i& X, @6 R" B: pMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);6 G4 E# L# Q0 ]. P4 {
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
$ m8 b& {6 ]5 J0 p  L  [( E# Y** Configure the McASP pins 7 {! y* O$ T7 l" S" `6 K
** Input - Frame Sync, Clock and Serializer Rx
4 g4 g6 z  L  ]) z1 C! i** Output - Serializer Tx is connected to the input of the codec ! _) ]% \1 F- f3 A+ T
*/  D6 q4 ]9 a. e0 `
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
& l& `! |- H! v6 N# |% GMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));1 J; b5 h  K& G/ s0 @7 M7 _4 y* \
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX$ K1 N6 Y$ S- B- _( `5 H
| MCASP_PIN_ACLKX* @: @+ O( y& D2 o0 r
| MCASP_PIN_AHCLKX
+ |% y, c) z. Y* x" C' m& t6 z8 R' P| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */4 o% F, q1 I3 V9 q
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
. O% @: V0 x6 o| MCASP_TX_CLKFAIL
* s( }) T* m2 n  Z* d) d| MCASP_TX_SYNCERROR
( _3 H& K% \3 C7 C| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
( b1 V) E3 l: A| MCASP_RX_CLKFAIL
; v1 V/ D( D2 A| MCASP_RX_SYNCERROR
8 H2 m* P- E; D& v| MCASP_RX_OVERRUN);
9 d! N0 S6 e- T! t}
static void I2SDataTxRxActivate(void)& x2 M7 ^* c* \/ x+ g( v$ u
{
5 z+ c4 q2 Q: f3 G0 y* l$ C! J0 x) B/* Start the clocks */* @" k2 c8 Q9 U# H: M  Z/ x9 ~
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);& J. w; A5 F/ `) T7 Y8 c2 c
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */% {( e+ _! A% U8 i2 g0 o0 Z8 ~! M
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,$ K+ j1 L9 [; g7 J' R# Q6 K) K7 E2 z
EDMA3_TRIG_MODE_EVENT);
: x9 t4 x7 A: K9 LEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, & X! w$ i- }6 Z% P- K
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
- @- c( a, u# u9 m3 g) A0 o' S! Q3 d7 wMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);5 l& x& u7 ~/ O3 ^5 a
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */6 ^6 H* }- U7 V% n' L
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
  ~" v  ]* N& ~$ X4 W5 O! |* QMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);& H) G4 u% Y2 F3 l5 b2 o6 L: a& Y
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);9 u  a0 d" _3 R% v3 k
}
- f0 @) v0 j- ~; v
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

6 h! d% I6 f* O' L' s




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