嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,/ X/ |( V& W+ X
input mcasp_ahclkx,( P( T. {6 ]7 R* [
input mcasp_aclkx,* Z* X6 H! O- W c
input axr0,
7 @ c- s- s' W* r' R
$ c: p" P+ z( V soutput mcasp_afsr,) u( D/ p m/ F r6 s8 u- X7 ^5 m
output mcasp_ahclkr,) Y! a# s$ i3 @0 @9 Q
output mcasp_aclkr,
7 v% e+ C: O3 f: ?9 L$ ~( s3 |output axr1,
# B" e: O5 i7 e) C' M5 g9 M
assign mcasp_afsr = mcasp_afsx;5 ]# u5 i8 |- G: L
assign mcasp_aclkr = mcasp_aclkx; R7 v% }' C8 b/ {/ f
assign mcasp_ahclkr = mcasp_ahclkx;' y. X! [) N# [. W+ v W! }
assign axr1 = axr0;
& f* ]) l, Z1 E8 ~+ J
' Z# N3 J6 ^+ P! L在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
2 N* A0 i, j' o! E7 L' R( d" cstatic void McASPI2SConfigure(void)
" c& g! l2 E# F4 r+ S$ ]0 d{
( F3 _) T* \ i- {; X$ ZMcASPRxReset(SOC_MCASP_0_CTRL_REGS);8 z3 c! x o2 N/ X
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
5 d. ]0 A5 |, l5 v$ WMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
6 D# {' x3 @: D# }McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */, P8 T8 I+ i3 A5 m) G: w, n
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,- L! O/ X7 D+ p9 q6 Y1 A
MCASP_RX_MODE_DMA);' ~% A1 A& b; X7 C9 C% ]& L8 m9 j* E
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,; i% z- m% \7 P" e
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */ C4 \/ ?) P; T9 }$ N8 a2 z
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
2 G1 j$ r7 z2 v" f" wMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
( N7 }5 `; |$ z/ Q, u. `McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, & |9 Z' D6 V) d+ ~
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
$ i7 C& Z* E( YMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
* z p0 t4 I! A! i) u7 [4 NMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
4 j8 q' I0 k5 LMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,2 `6 j! P, V" f; Z
0x00, 0xFF);
/* configure the clock for transmitter */
4 o ?+ M# C0 b7 |# c! KMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);0 @9 z8 l( w. L& ?: A' Z8 Z+ a
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
/ n- u5 P0 X& B7 v" \McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,3 F6 ^& Z l+ V" H
0x00, 0xFF);* h3 S; o7 Y4 ^
) w- q& k' l x8 |7 x7 \% Y8 T
/* Enable synchronization of RX and TX sections */
' F; k% Q! M' k* F2 ^McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */+ z9 i1 Q5 w6 L5 b
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
1 G" a8 @- w7 h+ f' tMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*, S5 p* W8 {, h# V- p1 G
** Set the serializers, Currently only one serializer is set as
, ]1 p& p. H" f8 |9 ]3 M7 p! b** transmitter and one serializer as receiver.
4 t q2 [+ s& D) _4 ^- o" B*/
1 ~( ?: B0 Z7 }2 x3 Y9 g, M9 kMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
2 x" [9 o9 z/ P% Z6 a4 ?McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
0 v+ \! ?% U( o4 r) k0 O: N( l** Configure the McASP pins Q3 m1 E6 G" p4 `6 x+ y
** Input - Frame Sync, Clock and Serializer Rx
5 x3 f9 e- J9 u6 T1 j6 N( c* ~6 w** Output - Serializer Tx is connected to the input of the codec 5 v; D2 J; v- F# P0 \, W F3 c
*/; B7 X5 D. Q! i* @! G
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
4 m7 L2 c5 B Y6 V! ?: S& bMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
% u: l3 R5 x8 j! k- {McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX0 \7 U a% Z5 K* O
| MCASP_PIN_ACLKX* q! l' L# d5 G8 k' L* Q
| MCASP_PIN_AHCLKX3 J6 y# N c2 ]
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
0 \3 ?9 h7 A. ]: K% \" |, y. vMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR : i. x& z: f2 H# H* N0 e
| MCASP_TX_CLKFAIL
$ G' Z5 ?! Y9 k5 ~! k4 W) m2 S5 `3 X| MCASP_TX_SYNCERROR* e3 e S5 M9 J0 ~3 T0 D
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 0 U, `6 K1 q7 V( e ^% w
| MCASP_RX_CLKFAIL
. f, ~' Z7 O" A# j" z0 ^$ R: o| MCASP_RX_SYNCERROR
" S- g5 X" T5 {3 N) f8 j+ Z& g9 H| MCASP_RX_OVERRUN);
0 ], N3 s- r, i}
static void I2SDataTxRxActivate(void); S& s0 f1 {+ ?+ c- D
{0 [$ G/ D' N+ U( k/ u2 S% Z
/* Start the clocks */0 F8 Y6 H1 I5 M1 `' l0 \
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);% k; h3 l7 x/ h% Q8 }1 K
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */) T+ Q8 D. ?( S6 T' H b7 o
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
/ @( n, m9 G2 O V; v' s- o& Y- eEDMA3_TRIG_MODE_EVENT);
6 v F- e, [# @! X: WEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
- k: p1 x- }% W$ s, b- t5 nEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
5 ~0 |0 W" W. H2 M* g1 c2 lMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);- K: h( p- g1 j. R: \
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */6 O5 s3 A$ E- z5 D9 l: M
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
- P7 U _' T- Z4 N5 TMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
; D& h2 k& e5 X: t5 dMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);6 ?1 d# }/ N! f4 H7 K
}
8 x- E% @' ?4 p) ^- G2 u
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
K1 s; k2 J+ w+ ?
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |