嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,- R0 a! P2 t) S. F# B  E, [
input mcasp_ahclkx,/ y8 L/ ^; n; {0 D
input mcasp_aclkx,3 Q: ~1 i; s2 I6 D+ U7 |
input axr0,0 m5 @; p4 [4 g3 V9 }1 b
( v- P3 ~7 i6 C) G' l2 S/ B# M
output mcasp_afsr,$ Q1 W2 ?* j. j2 W
output mcasp_ahclkr,
  S( q) b, r& l/ S$ k2 Uoutput mcasp_aclkr,, K& t6 a" q" U
output axr1,6 j( Q% o" C1 z- j7 X$ P( D
assign mcasp_afsr = mcasp_afsx;
& ]& m& p2 S2 }) Qassign mcasp_aclkr = mcasp_aclkx;
! e/ x$ D3 S/ c4 j, {% Yassign mcasp_ahclkr = mcasp_ahclkx;
. E- u; Y" `" e  }' h( m; Z; [  {assign axr1 = axr0;
3 H: Q1 G5 ?. {7 N2 v  M
) T$ f% m3 l! z& B) S% k7 C
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
# n8 ]2 R- D' M1 j+ h" I; \, v
static void McASPI2SConfigure(void)
3 v' k2 Z9 K& c, K+ y{# G( E# ]& C/ |  x) e6 ?6 S
McASPRxReset(SOC_MCASP_0_CTRL_REGS);8 ?- B2 P" C/ V
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
% E, v) e) @' o8 M9 rMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
% ~1 {# r9 J2 Q* n0 AMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units *// K. ?; ^( z. S! X/ Y/ s/ `
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,2 P3 \' H6 `' Z
MCASP_RX_MODE_DMA);
+ P, [2 B# ?% P  i, {& aMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
& r" s3 [* ^; A9 l4 YMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */( j! U# J  k' C9 f9 |
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, $ f  q. i. t0 o% d5 ~
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
, C! D3 C/ }6 D$ zMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
* l% i5 _/ I" }; T" _6 CMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */- I7 X# z4 g# h! t4 u. |5 Z- c
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
0 N# d( n; m# V* v) D( Z) S) aMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
5 C; [* E9 Y  d* N) O3 H, L/ U7 VMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,+ c5 K9 A5 [7 k2 O: }& K
0x00, 0xFF);
/* configure the clock for transmitter */
; i/ |9 q! @# x3 ?McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
& `8 t: p* J# _# Y) I0 t6 uMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); " b& {2 q1 d8 i3 d' _& J
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,1 P7 E& H+ T. Y
0x00, 0xFF);
/ n# Q6 N; y! C) k4 e$ t. i* v7 {! K* H. d+ B
/* Enable synchronization of RX and TX sections */
& H0 B- s2 {; w/ ]& S7 d, mMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
$ w# O2 F0 j+ F) LMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
% a" ^3 `% ?/ B# f1 T" TMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*) a$ [/ X2 B6 X' N2 q( [
** Set the serializers, Currently only one serializer is set as& B$ L( b- R4 \$ V% ~% L9 E
** transmitter and one serializer as receiver.
' Z* g6 q) B+ L*/
( m! O* A( l* u; P: o0 P5 O4 G& X0 lMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);3 Q- g* H& ^9 L  H" E" Z" F# u6 z/ ]( [
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*/ K& G# m* s: p& l  V! }  C
** Configure the McASP pins " T" M  R! U& F0 S
** Input - Frame Sync, Clock and Serializer Rx) h+ v1 z' E; J2 V
** Output - Serializer Tx is connected to the input of the codec 0 [- W3 n- N6 z5 x+ z( N
*/
1 Q4 v* y3 _  z: a! F6 n# MMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);& Z4 q; u' {6 F4 @# q" x
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
% I: E4 h  K. EMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
9 U5 A8 K2 v5 }/ N2 f' e$ @% {| MCASP_PIN_ACLKX
# q: o) d! v9 h$ q0 N. U% ^& Y4 _, h| MCASP_PIN_AHCLKX
; v2 Y6 q8 |3 a! B! A9 z5 t| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
0 }0 c0 p% C7 D. q7 k3 B8 QMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
% y2 A, D! s$ r2 E+ V) O7 _| MCASP_TX_CLKFAIL
) |" {$ m! Q1 Y" X- l8 e5 ~2 @# D| MCASP_TX_SYNCERROR) C- V5 T  h9 ^) |2 G) y1 H
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
8 `$ k% i/ g, U* ~) Y. h5 Y0 j| MCASP_RX_CLKFAIL: m( U, `' P& D' T* E3 c+ f
| MCASP_RX_SYNCERROR + y1 T7 ^- B7 B
| MCASP_RX_OVERRUN);2 l+ L3 Z: i4 t. R0 q/ p, g
}
static void I2SDataTxRxActivate(void)1 g% n. r6 j& ~6 S" E
{
. H% q" F' ~- }9 _  _/* Start the clocks */
* p2 E. n" Q4 b2 x. UMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);2 I( T" r3 u1 I1 D
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
* w0 \" M, h! y/ zEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,# F3 l5 |$ I6 G
EDMA3_TRIG_MODE_EVENT);
$ E+ D) g. q8 M& o9 CEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ) e4 y: X- J0 X! C
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
0 w  J- I. u. k, bMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
- ?  N8 V1 B3 c# C' f' e# oMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
( i* P: F, s5 S9 k) w$ Cwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
2 p+ h" e% A# I( EMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);5 |; _& _$ e. @. ]2 U
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
+ W  G. K) M& ?' Y2 q% \9 U7 j}
  \- P& P1 ]  Z2 F
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

* {* L" @9 r' S5 a! k




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