嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
5 ?8 K: M; c6 Finput mcasp_ahclkx,1 [! ]7 V7 M: o' k- i; T I
input mcasp_aclkx,
$ l: r" l+ A; T# P& h9 |input axr0,
5 G) m+ p/ @1 b/ U6 o2 [5 y. l
output mcasp_afsr,
) B' x4 p1 t0 I' x1 Qoutput mcasp_ahclkr,
0 A6 ]8 e; A. Goutput mcasp_aclkr,
2 U7 }2 W& F6 A9 o# Routput axr1,
7 a L7 q- g) {3 { I0 V1 D3 b9 {
assign mcasp_afsr = mcasp_afsx;
8 a3 `) s) L6 p, A5 n9 \assign mcasp_aclkr = mcasp_aclkx;
5 M# c8 R" ^( y* Xassign mcasp_ahclkr = mcasp_ahclkx;
" k9 G2 K) b6 R4 f' A6 M4 |( oassign axr1 = axr0;
7 n: W4 i7 ?5 k
1 J2 ?; W( t6 x9 `1 N) s在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
( N+ _- T, h1 [( k. ?static void McASPI2SConfigure(void)1 S2 ]/ w+ x- J! t+ ~
{ b4 V3 [4 t; o: ]7 F
McASPRxReset(SOC_MCASP_0_CTRL_REGS);( x' R( f9 g1 \* d
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */* M* F/ h( M7 N! T! ?; g0 c( l4 W
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);6 w( ?1 i5 B$ R9 {' y* t# V6 _
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */7 H) J0 I% U: n' @
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,5 ]1 j' N/ l, X
MCASP_RX_MODE_DMA);
5 Y+ j3 G# k( T. B8 c4 q! A# aMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
! u& y/ u/ p: J( aMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
7 |' y1 B. r7 \McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 9 A3 t/ x$ L8 B* ]; C- K9 A1 A
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);" k% W6 o. V! }5 z4 W
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
8 w5 E( N, u0 T' ]& `MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
* T6 J+ u. p. c9 f! jMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);3 e9 T6 O5 _; _! N- v$ H
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
! d5 C% Z" @" l. q+ D8 w# X8 wMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
' n" ?7 Z K0 M( B7 k2 F0x00, 0xFF);
/* configure the clock for transmitter */
* ^" Z# U+ |& ?( u0 y3 ?/ O* gMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
) K' c/ Y8 ~- y. X5 [# R# K" dMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
% j; G8 P% l* p2 w3 @$ d5 qMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
2 M+ |1 e& y/ D9 g" w$ X$ }: C0x00, 0xFF);4 f9 f3 ]6 O* m
: H; V [7 e5 i) m8 Z/* Enable synchronization of RX and TX sections */
, ?' c _0 X: ?& [: \ e2 QMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
}, U& T& |2 U( ZMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);. T e3 j% i3 r( |
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
$ W Q8 T! y3 n6 P; @* q9 J6 ?** Set the serializers, Currently only one serializer is set as5 T; ]) [: r: J8 P: w
** transmitter and one serializer as receiver.; g; J* E* D2 { X6 ^" |
*/: }; U4 A4 x/ Q: `
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
( @9 l4 J! J( eMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*3 D3 P8 d3 k( R% K1 d# _1 m
** Configure the McASP pins . q6 g- B+ k& H: L/ K- A
** Input - Frame Sync, Clock and Serializer Rx
2 @/ ^3 p% ?, R: c- p' V% m. t8 s4 k** Output - Serializer Tx is connected to the input of the codec 4 j2 k! v6 P4 n
*/' N# e4 \( g& y, C2 s
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);: f4 Y/ U9 W0 y$ ?
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));' W$ q" l( m5 l. M# \8 `1 e
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
* p9 j6 \3 C Q5 ?0 H$ z| MCASP_PIN_ACLKX
2 p' J' S( V- F7 I| MCASP_PIN_AHCLKX% o f# n5 d1 @* V4 a
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */" l- T, ^3 m% b% j5 `
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
+ ]# p% h$ C6 {| MCASP_TX_CLKFAIL
3 H. G% m% ], Y1 r+ Y- x| MCASP_TX_SYNCERROR
. {+ C( k/ j) {6 L" G9 ^| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
: S7 ^4 D3 ?: }8 Y- q+ `| MCASP_RX_CLKFAIL4 E! w$ U6 g* S- k% G
| MCASP_RX_SYNCERROR , ^7 d5 ]. X: S: M; C' _7 ~! R
| MCASP_RX_OVERRUN);
+ E! {$ S: Q4 }8 Q, V: g}
static void I2SDataTxRxActivate(void)6 O3 N% F7 E8 }: h. g" ~
{3 @' B" ~. B* }/ | R
/* Start the clocks */
# L* B3 R% a! `. n b; \; C- AMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);7 k! } ]6 q+ L# b3 q; U; F U
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */! d8 L6 M% t) B! M, o5 v
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,4 [- _; i) {6 m, |8 c: U* k
EDMA3_TRIG_MODE_EVENT);
: Q5 V/ a5 b. S6 _2 H/ mEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 5 G0 U: ^7 C2 }9 N4 m
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
( D. {* z- M) d# T: jMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
: K4 e9 D6 _$ t$ S2 Z) WMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
) l1 d6 R4 ]8 n4 \7 m: Qwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */' N; }7 l9 y* @) `# W! Q
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
$ F5 V5 {- Z7 Z& R+ q! N1 ZMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
2 b7 \* f; o M7 b6 M$ Y}
- v( W9 i2 k$ ^ X请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
5 L/ [% h; r; A' v: k$ ~0 o
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |