嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
- `3 K. ]3 y2 B" ~input mcasp_ahclkx,
+ Q" b0 U, z! R6 _6 _8 E; D& @input mcasp_aclkx,
' r9 q% m( Y1 u/ k1 }. rinput axr0,
" o. ^: ~5 {+ H" k" H5 N9 h- F5 e) a) h: j6 Z
output mcasp_afsr,
! s9 V* h+ n# R5 l2 `! b7 woutput mcasp_ahclkr,  Q# J" j, L% G( w* g- B2 T4 ^
output mcasp_aclkr,; J  f& Z2 r; b8 o1 ^) f) d$ z
output axr1,8 v* D7 Y* _$ h+ ?! z" o
assign mcasp_afsr = mcasp_afsx;
) r! @) n* q0 |' ^8 p, A2 ~0 [assign mcasp_aclkr = mcasp_aclkx;! c+ F0 Q% M- v5 t
assign mcasp_ahclkr = mcasp_ahclkx;, l1 e' H% h' C6 ]% @
assign axr1 = axr0;
9 [% V' K( W# i- W

7 w1 ~8 R& Z1 Z6 e0 g! v0 a7 ~
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

' _+ ^* h$ v/ A' J
static void McASPI2SConfigure(void). ~. Q' w! Y- `1 Y
{
/ t3 m( ~0 B8 Y( \; C1 {8 N# X+ XMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
; K4 t( Y4 T- w" p0 O* [/ mMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
+ }# k3 N/ p5 s, RMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);3 r& ^& x; M8 C
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
$ m; _# y, K8 J1 b& }4 T$ u# BMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
* R5 s; g' Q$ |MCASP_RX_MODE_DMA);
- \& _( ^$ ~( J# e; jMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,: H% l* s; M1 S. U7 P
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */% P* n8 A3 z' }3 [
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, # Y0 i$ r) y2 x( i( b/ ?: \
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
( u+ k, Y: }4 |/ H7 UMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
, l: V. k1 L" E, `9 M5 \6 JMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
0 ?2 c2 u( M7 X% b$ S+ h0 j9 v7 OMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
7 n$ k2 U1 J8 W* U( QMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ' V, |$ M1 X; N% Z4 J& j# ~
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
2 M2 y4 v; m# M! w2 h% G0x00, 0xFF);
/* configure the clock for transmitter */3 u( N8 K$ {- x
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
) {4 U8 U4 E- \3 ~3 C, gMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ' e. Q  ]# Q; T0 y  Y3 M
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
; U& ?* E- i7 d( w, h! ]5 r8 E  R0x00, 0xFF);
+ a4 w. G% ~) Y
1 Q% _5 M3 i8 I/* Enable synchronization of RX and TX sections */
) r" @' C) |+ A- \5 s+ qMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
$ z6 F: B6 b5 Y. @McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
; d% C# a# j* X7 z4 J; o7 b; S. wMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*4 ?, l! s! I3 i. [1 _9 e
** Set the serializers, Currently only one serializer is set as
' `+ b' m* i2 g# p  C" a- z: N** transmitter and one serializer as receiver.
" d  U: H9 k9 T$ P5 s- }*/! y; s% K5 N2 v; A/ R) {0 T
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
5 d# e* W" J  p- X* Y. q3 W; cMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*' W/ R3 b" U8 n( X7 l
** Configure the McASP pins
0 l( g' r: Q5 E" \' i( a9 q. D& e9 }** Input - Frame Sync, Clock and Serializer Rx2 W1 j5 d" r  ?: T4 ?, V
** Output - Serializer Tx is connected to the input of the codec
7 U7 S1 F1 [. y+ e$ J4 l*/" d4 |( Q4 N) \& H* ~; z' k: g
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
- i' V6 E5 x/ V* M' CMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
* K8 ?0 t' |0 P8 b- D( @McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
; F: H4 `( _, @; F# ~* h6 G| MCASP_PIN_ACLKX
6 X; M! B1 r/ }! z/ O" `| MCASP_PIN_AHCLKX
  L* p. R% S/ L, s7 s; R2 h| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */5 P3 x2 T! @* M) f
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR . x0 G+ h; R! _# j. Q* g/ r
| MCASP_TX_CLKFAIL
0 e& C" O: a0 w5 J| MCASP_TX_SYNCERROR
% D  y" |6 Q: M. d| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
/ w/ E0 u, B+ w. q) \& V% n| MCASP_RX_CLKFAIL, F9 D. f8 K% W: ?! r2 r- q5 ~
| MCASP_RX_SYNCERROR
; n( o0 x- `  i! E| MCASP_RX_OVERRUN);
4 X0 c+ K: Y7 [; m/ R}
static void I2SDataTxRxActivate(void)
1 Y1 J/ B( B2 w1 X- i: \{
1 O  C( W+ W* S' H& e2 T1 e" V4 }! c/* Start the clocks */' O8 k6 I% E& w1 h4 a
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);2 _. P! O" x+ d4 h0 h4 F
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */6 x- R# N7 ]) w. t$ S7 T5 H
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,$ D+ U$ `4 @) h$ f9 k9 Z! n% Z  ]6 B4 l
EDMA3_TRIG_MODE_EVENT);
( L' y6 F8 L9 UEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 2 t! a& {3 ?( G( v+ n1 u5 r1 t2 {
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */- h  c! Z5 \! k9 h' P# D
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
) V5 e- V6 y- S7 ]* n' m( cMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
4 U$ Y/ O; |) g, V; I1 N( Y+ p& Twhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
; m' w, R& j& T+ lMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
9 X' v, o2 l* RMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
" u: y2 y# t  S$ N}

' r5 b- T+ n, E" J9 G' ?3 [
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
# j6 `$ g. V0 _+ o' s0 o$ Z





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