嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
5 S! b; g8 T9 P. n& s) O" b4 @input mcasp_ahclkx,; e( L! O6 U" G0 F" ]
input mcasp_aclkx,. V# {) {2 S, w$ Y
input axr0,
7 F: l( A- N8 g; w% r
, R# J9 g% p: c+ t1 D6 M" k- E* houtput mcasp_afsr,
m5 B, Z' q. B9 routput mcasp_ahclkr,
) `/ R, M7 |( S, D7 f. T3 Y" p0 soutput mcasp_aclkr,
$ v# G a! P- P" e3 g/ d7 \output axr1,- M1 Y: Y) v* {: ~" C
assign mcasp_afsr = mcasp_afsx;
. q# D) l# |: k' [' A9 C- dassign mcasp_aclkr = mcasp_aclkx;
; R2 T* m8 |8 `! h3 o6 u0 jassign mcasp_ahclkr = mcasp_ahclkx;2 W- X" U0 S$ S: M+ H
assign axr1 = axr0;
( n/ C3 e8 ] ]% T1 F5 Q) W& @! k i x
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
( k) a; Z( D* e6 f- B
static void McASPI2SConfigure(void)& g) R. d; @& Q- T0 X
{2 g/ m E. g1 c
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
8 b3 ^( n5 [+ l$ ~( W1 k2 L; j$ sMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */) L3 n7 T+ n- B6 }" U; B, w9 `, L
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
* h4 X' M, F3 o s# ?McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */0 V9 W7 o* d6 n5 k. O, v" O7 [8 h! n
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,6 \3 \! o; ~7 o Q( X& i
MCASP_RX_MODE_DMA);
$ |* u8 e' f0 UMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,9 f7 ~, Q D+ t5 I6 v# u- U
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */, Z, B7 s4 j1 y$ K
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
1 V; u {, I x/ |, [% DMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);5 H9 ~8 I0 M% q6 q; |6 G, S* q' q
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
' g5 K8 x. ^% z/ ^$ x0 ]MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */+ X& ^7 K; R& V8 j& r' w" p/ M
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
( a9 e* j. V+ CMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); # h9 o7 `8 [5 ~
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
6 y! g' h1 b; E y% T" ]0x00, 0xFF);
/* configure the clock for transmitter */
" v3 S4 H) q% AMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
3 ?) L1 t$ Y/ u, Q; B% @# l: X7 UMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
; a; v1 s. P2 c: GMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
4 a, O* |0 H& ?, C0x00, 0xFF);) V9 O! ^/ T) N9 |$ w$ s, n
' y9 z8 {) o2 o# \/* Enable synchronization of RX and TX sections */
8 j1 ]4 y0 a0 e4 D3 x1 U$ [McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
: j6 ]: ]! M& d8 Q* IMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
+ N/ e; t. W4 @. F" XMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*/ K3 s2 M5 J2 U. T3 E; [) |
** Set the serializers, Currently only one serializer is set as
8 o: B9 }$ Z5 U- C- d, O** transmitter and one serializer as receiver.
- N5 E8 K9 f8 U' X* R. I*/1 f# J' _: i# c8 y* @" ?
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
/ T& r5 [( p# ?+ a. {4 O8 V4 ]McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*. d3 R( a! R' ^7 E* I, {
** Configure the McASP pins 6 G! f% ]3 `, E% \, p
** Input - Frame Sync, Clock and Serializer Rx* ~/ I- V: F7 P I
** Output - Serializer Tx is connected to the input of the codec 5 ^; B0 K0 z) K( [
*/
+ |" R7 y) A a; f& B0 O9 R# e; B$ }McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
$ G0 G% j3 [$ }6 eMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX)); Y% C- B7 M! f0 ?. {' _9 b7 E
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX6 s8 A& q7 R7 C! |7 D% N3 R4 G/ ~
| MCASP_PIN_ACLKX% y8 N2 p! }1 J- U- |1 A6 J/ ?
| MCASP_PIN_AHCLKX
0 e* O$ A" g0 n9 [- M* j- u| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
3 x& S0 N$ |) w! x& g/ MMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR " ~! w! c3 x( s# s
| MCASP_TX_CLKFAIL
8 Q& M9 E) J6 m# [8 L3 [/ B2 t| MCASP_TX_SYNCERROR
- l" K1 x; v; R* Z1 G& @9 M5 g7 E| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR ! |6 ^6 K( Z$ e0 m: h( n5 }
| MCASP_RX_CLKFAIL" h9 O/ q& ?0 j j) _
| MCASP_RX_SYNCERROR
9 n- }- m p4 s& s' w| MCASP_RX_OVERRUN);
* V' V; K/ _3 D4 {; Y8 T}
static void I2SDataTxRxActivate(void)* \! B+ Y3 E* [* s: g
{) ]/ q' ~5 x* t) b7 j
/* Start the clocks */3 Z) ^7 b0 i7 J# l
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);( X) L$ s4 s/ _5 G; h
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
_& w' `2 n4 M& _" lEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,2 y7 G! `; o1 l+ a) q( T f
EDMA3_TRIG_MODE_EVENT);
! Z3 k7 v+ R1 ?! B1 g6 O' T( xEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 4 L5 x: A4 o+ T% `" G! }: M
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */8 J0 y# i& P. A
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);, m e6 r( ~+ l! }1 S0 `# c
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */8 G7 A$ X7 {9 b) n9 |8 ]
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */4 m0 t B$ }3 f! i- O- Q* Y
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);, l( L; l) K- L
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
6 _5 f1 m. O3 t `5 q6 A( i}
( T0 \8 n+ Q7 @) ?9 ~" ?2 {
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
$ b/ y. K( b" ]9 c. e$ ?
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |