嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,7 u' G0 D4 M6 P* I" ]6 N6 t2 v/ m" V
input mcasp_ahclkx," s& o& k6 O, k S+ s7 D" I/ [
input mcasp_aclkx,4 b/ B2 o& v* G, I
input axr0,
) |" F/ p' \( m- I9 F/ j
4 R. n: I: ]+ V' {" s1 _. ]( d# H1 z' `output mcasp_afsr,' y! W, f8 C* e$ o4 u
output mcasp_ahclkr,, T9 Q3 b& {1 ]6 l) ^' ~
output mcasp_aclkr,1 y9 p t0 n( a; C# V4 ]# l1 L- [
output axr1,
* ^) B( O- u9 E. \
assign mcasp_afsr = mcasp_afsx;. C7 s) J* l, D, V; ]. j
assign mcasp_aclkr = mcasp_aclkx;6 z% I, q4 F( E( {9 E, H4 o, ^
assign mcasp_ahclkr = mcasp_ahclkx;
" P' Z5 F& T. l! Vassign axr1 = axr0;
# |% C7 |4 M5 G# }
9 L. o6 j/ p/ i" h在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
5 L( L; m: w Y& e* E
static void McASPI2SConfigure(void)0 t6 ~/ H6 v5 J
{! Y$ I3 s2 h3 H. l
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
& @5 G b" M3 R* A9 DMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */2 ~# u K' c5 I( Y9 p' k+ F: X
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1); e! f; _. V0 _* P
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */: l* _/ G: N; M5 m) s! g# V
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,# @3 ` {) m0 ?8 p; T' q
MCASP_RX_MODE_DMA);
8 j& O9 j' C3 m! M8 y i; B5 r9 yMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
! l& j; m% |, W' CMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
* f' f; A9 s( \: i2 IMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 7 g9 b. N; b7 s" c1 ^7 ?
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);+ o6 m! Z1 H3 p' @# f c2 b$ d
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ; L4 k5 a8 I: i
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */3 z. A" ^6 C- o
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);, Q- |" Q2 o% K, {6 d
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
8 J, p) H, _. C! N; N u; kMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
! ]; ~' @8 g' n/ y1 ]$ V& m, t0x00, 0xFF);
/* configure the clock for transmitter */0 f/ y# B6 k8 J6 @
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);! B9 ^( b& J/ [$ o, h A2 \
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ; z- A4 x- h8 V! i( {3 }" R
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
) S( U$ x8 m+ O: C) a: Q' N) G0 ~0x00, 0xFF);- x3 I: P6 A5 N5 A& s5 R
& q2 x d/ z( U7 Q& r" k# l. q; {
/* Enable synchronization of RX and TX sections */
- t# @/ k( y: K3 q; C* Z7 C* AMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
) z$ ?) G9 Y5 K5 L+ w. xMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);5 e* }. J" P/ `5 e L# r5 N
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/** l( T( [& |7 S5 [" ?! o |) @0 f
** Set the serializers, Currently only one serializer is set as9 Z, ^2 j! F# Q4 d
** transmitter and one serializer as receiver.& f; w: f% \# |$ F) q; C
*/
& Z" J' F0 n& ] V. J. |McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
' O0 O4 i: r6 o$ Q2 Y) tMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*0 a3 y" g+ p' U; B* \; ^$ F
** Configure the McASP pins . R( O" F* f8 I) g5 T" p' f
** Input - Frame Sync, Clock and Serializer Rx& C9 e* r% W! [- J( H
** Output - Serializer Tx is connected to the input of the codec 6 V' c' P9 {$ {
*/
1 k. N4 Y2 n- S; ]McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);$ Z P9 A# \' E& ~
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));8 U) m3 F* C' S& b% X
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX* Z% x" N& W* a. Q) K, r/ F
| MCASP_PIN_ACLKX; w1 B9 t* U0 c- {5 k! Z' s
| MCASP_PIN_AHCLKX$ f( A5 T- M; W; p
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */5 j3 F6 s* _1 g2 R
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
% }- o1 s! d3 l y$ Y$ W5 O| MCASP_TX_CLKFAIL 5 @' T- R/ p( a# m4 T
| MCASP_TX_SYNCERROR% k% l2 P* ?' S* F0 ^: t
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
! L: u! R7 Q( Y- G2 N6 X1 D3 C| MCASP_RX_CLKFAIL
3 f9 q! y# @4 o6 I| MCASP_RX_SYNCERROR " z$ U- h4 {# p1 ^
| MCASP_RX_OVERRUN);' \5 @4 _# Y/ P
}
static void I2SDataTxRxActivate(void)
5 H7 ]) h" n+ v* U" N{
' L# d+ L* y/ l6 s/* Start the clocks */
5 @1 o- @5 w/ a6 q. M0 c* w* c1 kMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);0 N. x- W% J; A& a2 o) W9 q* A" }
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
4 [; p9 U$ n- G" N; ^EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
2 E6 y1 s7 s1 m. ^* J. L q- `4 ZEDMA3_TRIG_MODE_EVENT);$ p' u( ~- w4 O5 C! u Y
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 3 x6 Z4 o u' f* `8 j
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
; F3 J" w7 G- M$ M" V z2 t( FMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
; \/ b) q: S+ M$ n1 h6 DMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
/ i: n% v7 S8 \/ a7 M, qwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */) ?' R# [! C1 h6 Y1 ` E
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
: z) Y' O, @1 x6 {: UMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
1 ]! b- P N( A}
# @& h# L& L5 p* s请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
& _# j" U5 W6 z3 N& i, D2 b; |
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |