嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,& y* ]7 B% ?6 N# t$ l6 F n6 v6 J1 r
input mcasp_ahclkx,
; G5 C* Q3 W" v0 g/ k$ j$ kinput mcasp_aclkx,
/ a( R; r0 h2 O; w- tinput axr0,
6 g2 o0 q: [; D8 E, j3 a7 P0 F( Z3 X4 F
output mcasp_afsr,
5 d0 G+ Q* s" qoutput mcasp_ahclkr,5 Y* v3 l5 r" Y+ _) C
output mcasp_aclkr,, B8 ?3 ?6 x& W4 U( X
output axr1,& k5 K, E/ M* o8 f8 B+ `8 ?* O$ c
assign mcasp_afsr = mcasp_afsx;0 [9 ^# Z; X) w/ W$ _
assign mcasp_aclkr = mcasp_aclkx;
5 ?% _ F- w% E9 T( B- O) fassign mcasp_ahclkr = mcasp_ahclkx;+ D) i2 x" u A& o
assign axr1 = axr0;
& N1 E+ [: g* g$ u+ l
9 E( L% M* j# d% g在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
9 W: E, p/ J" J- H+ A; Fstatic void McASPI2SConfigure(void)
- W, K4 ~+ ]: J( W" I% \3 z# W, [" B{
( G! v2 `1 v+ r+ bMcASPRxReset(SOC_MCASP_0_CTRL_REGS);5 o& u' j% \+ {! H7 P) I- i6 o9 ^8 i
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */4 Z. j; W+ i/ ?# L. V( ]5 J
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);/ w! n$ Q, h# ]. Q
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */, H8 J% k& Z+ |( B
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,* b: R+ M$ r0 v/ y- h
MCASP_RX_MODE_DMA);1 l) q( a& Z- X! O4 q
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
. W( B0 I* i: _0 q% RMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
' Y5 S; `" f0 a$ u9 h( } NMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ! {" ^# b. I2 a7 c6 E
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
9 Q" h. _; c/ o `McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 7 z3 |, Y: I5 z0 H% R
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
# E& p+ S" y1 N4 R' {McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);' B/ ]7 k7 ]/ }( ^+ U+ a
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 9 K9 E7 W! Q* o, [" S
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,' d8 c5 ]5 c l
0x00, 0xFF);
/* configure the clock for transmitter */( E5 F* S. X/ y" [9 O7 t7 b* b6 q
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
( ^% Q. e7 i! u! D( f1 k" HMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 5 y. R: Z5 H# u9 B
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,7 l) C$ [) N' o* ~3 a
0x00, 0xFF);( C& B( M' c. O, y; @
# C+ {8 o5 u2 ~; N! h/* Enable synchronization of RX and TX sections */
) S' Z$ H- |$ z) R2 sMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
" K9 k3 i: [* _& t9 IMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);9 g( n" e ~# s! A" s% u- d! W
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
( C {3 T& o# ~. j L$ { m** Set the serializers, Currently only one serializer is set as
/ U2 d3 c% d% z! @, g F** transmitter and one serializer as receiver.
) A& n% j- \9 P*/. W$ e$ A& X- ] |+ ^# h
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
9 A+ D7 j# W) l- k0 s, wMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*# L7 M" \9 W* J. Q( B
** Configure the McASP pins 4 ?& N, @# L# x/ e" J
** Input - Frame Sync, Clock and Serializer Rx
& }8 L+ W. b k# T0 s/ Z** Output - Serializer Tx is connected to the input of the codec
5 E: C' {$ {0 ^. @# i+ ^*/ o2 M& Q' {1 ] X8 O2 F. L; \6 l
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);: w% C/ J. r, K3 i* h! e* j
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));' `' V1 n# o; V5 {! B3 n$ T
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX5 X% F1 t# K$ j5 f
| MCASP_PIN_ACLKX
# [ l5 A" y6 [: c+ V1 Y2 ~| MCASP_PIN_AHCLKX9 E8 H+ b* {/ P0 \% ?- k9 `9 Q4 T2 `
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */% ?$ [: |- e9 r) V
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR " Q0 C( v+ ]1 \- {9 f1 E4 u: a" A
| MCASP_TX_CLKFAIL
# Y: m& o& T5 }4 \9 C1 K1 N| MCASP_TX_SYNCERROR
) V9 Y8 }) ^, r' y/ f* R4 P| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR $ j ?5 l8 v* }( c5 ]* P
| MCASP_RX_CLKFAIL6 y: R+ J* j7 O
| MCASP_RX_SYNCERROR : U0 S$ w2 q0 i# Q. o
| MCASP_RX_OVERRUN);
$ q8 [" m, O) Y4 C5 Y0 y}
static void I2SDataTxRxActivate(void)1 c9 ^# @3 J8 q% |. h, |8 n( o) w
{
+ c/ p' X# x8 _# U5 }5 s/* Start the clocks */1 W. v) v" `- Z: X
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
6 i) w3 q' O+ d, |7 e% gMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */6 w" i. l! R& h! b) T' V/ w
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,9 g' ^7 c2 ^9 V5 y/ G
EDMA3_TRIG_MODE_EVENT);
7 g. |& Z" ]5 w& p- m* z- bEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
" N4 k+ m) n0 y! g NEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
9 \# K8 H' A6 y: t+ w+ `McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);! d U9 s: A) r' c
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
* V" x, T" Y, T8 [! [2 f+ awhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
) X a, S* F; J+ {: e) u, n3 QMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
7 e+ h2 d4 ~8 a; C! _& tMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
) Q% u5 E# r+ J- l- g! h}
. O2 U& s! X* m- c; t. ]: R+ I请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
' S7 Y4 {; b1 S: T5 n* ]
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |