嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,! P- K2 Y C8 Y% P& f. E0 }$ F% y
input mcasp_ahclkx,
0 _1 ^! f* Q& E5 H1 cinput mcasp_aclkx,
( Z' }5 J- j" ~6 O7 ]) xinput axr0,+ L$ y0 [4 u# c" l3 n& R
. |5 V, y2 w! R! C$ j
output mcasp_afsr,
9 E. O" \' Y! {output mcasp_ahclkr,
% p7 p) m% V; l$ q5 Ooutput mcasp_aclkr,
/ \* ^0 q; S; I5 B4 uoutput axr1,
) v9 y7 B8 j# n$ Y: H
assign mcasp_afsr = mcasp_afsx;
0 W5 Y' Y6 D. v" N5 Dassign mcasp_aclkr = mcasp_aclkx;& V) `# s2 O+ i: I! z1 C" F9 v: C: T* ?
assign mcasp_ahclkr = mcasp_ahclkx;
1 \/ x' {& G, rassign axr1 = axr0;
3 [4 R( v( q+ A) A7 G3 l4 R; l; j" K/ P5 F& @# u, Z! Q/ b: o
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
3 _: D3 ?8 T! g7 w% Ystatic void McASPI2SConfigure(void): P2 r. J" _- Y8 Z2 B& B
{
. f" B% a7 Q( ?+ W1 ?! J. fMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
% M; K8 q* p" Z5 N: A: ]$ kMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
: ]7 B! [1 ]' P, I$ u) ?/ ~- P5 CMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
, W4 J( C2 H8 S5 JMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
0 E3 j' O5 d5 K% F7 T* o5 ZMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,+ `/ j0 t7 E& N
MCASP_RX_MODE_DMA);
2 T. W/ @/ X2 e' Y+ _. F3 RMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,& i7 b4 |* j% O# H. [* G8 b, i* j% M7 @
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */8 n/ f6 B" m1 k% z' N
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
6 Y2 d! ?7 U& D& c" kMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
, M; i" ^) G7 y# N0 EMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 4 t3 ~% C) J. g$ w8 f
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */0 A; M5 g% u! a
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);6 Z- f- u( f1 \
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
' y2 ~) q4 E8 t9 A& VMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,! g# l# q: m1 P& l: ?# l5 B
0x00, 0xFF);
/* configure the clock for transmitter */
; p2 l$ j& t5 S' [1 j! K9 F5 u# MMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);3 Q- C) ]& V; U* T. |; p
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
; R- T: v+ s6 M' r3 k1 oMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,' o9 L, _! G% a
0x00, 0xFF);
; L% I5 M. g" D. G5 Z3 i! n
: q+ b! r7 |- D* d) U' N2 |1 c/* Enable synchronization of RX and TX sections */
0 K, q9 i: K& @McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */! i' [. l% D/ G1 f. _" S
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);5 J! U* h% E* _. ?1 K: W7 r
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/** y" `. K+ l; U% }( u, W" d$ U* q
** Set the serializers, Currently only one serializer is set as5 i$ i. _2 h. B6 u& ]0 r
** transmitter and one serializer as receiver.
' }+ ^- q' P6 I! }: Z( M+ j*/& F3 [" S4 E+ O: c" b8 u' ^
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);$ U3 \) r4 P' L& T. e/ N& o0 t3 K
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*, S Q# n( k% @! h
** Configure the McASP pins
; }+ y$ L- F# Z** Input - Frame Sync, Clock and Serializer Rx
# V( G5 I) S' _4 i; O3 K** Output - Serializer Tx is connected to the input of the codec ) a. w2 o7 F2 x! I& I7 o
*/$ m- \- h2 a9 z* R* L f
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);- X7 z: s$ l. o' T$ R7 g
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
7 U; Z& S+ S7 h- O ]0 T& f6 v% bMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX% C' L+ K0 C" e/ y- A: W* L; n
| MCASP_PIN_ACLKX% d! C: n5 f3 r
| MCASP_PIN_AHCLKX
& f. z. v3 S0 ?& z. k: ^4 ^| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */ b2 i! |" {- ~& X5 l$ \ ] H
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ) m/ J n [6 }: b) a7 e
| MCASP_TX_CLKFAIL ' W; ^' r5 {% F, X/ H. C
| MCASP_TX_SYNCERROR! T0 }5 {! Y* e7 k |3 U
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
# s2 @3 }9 H6 `0 |! d! c5 w| MCASP_RX_CLKFAIL
& [( Y y/ \, L8 W| MCASP_RX_SYNCERROR 6 ^7 M) D! e$ P5 @% ?
| MCASP_RX_OVERRUN);
; K0 c8 ]6 q3 L0 x' p}
static void I2SDataTxRxActivate(void)
) E* m X& A. \) ~$ _{
: _7 I- r7 i( e/ F/* Start the clocks */. n' K9 [- a& l4 J0 X% z# r
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);/ B4 F( A. U2 `, e6 a3 U8 d( g8 z
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
+ \- P) P8 \8 YEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
7 N; Q7 k5 m3 V, e, tEDMA3_TRIG_MODE_EVENT);/ z% x; Q9 L& v" H% y
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
* Y+ ~6 v7 @9 fEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */7 x3 r/ V. a2 z* u/ t9 M
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);8 E: h" t- b: V" Z( l+ [
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
/ Y9 o' ]2 g0 {: \* U% Nwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
- [/ _3 W* t8 C6 \McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
$ W/ Q1 P4 ^) u4 D1 yMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);/ c/ B: }7 s2 n+ S' e# P. `8 O
}
: l# e) p% i4 ~# {( E# _; h, D
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
( D1 ~1 B# o* h2 J; S/ `$ m' ]
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |