嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,% J- Y% c* L; h/ o
input mcasp_ahclkx,5 C4 K, Y8 n* a# {3 C) D) K3 _
input mcasp_aclkx,
2 O* B/ L0 G M, w% k/ [input axr0,4 m+ v8 z" b- l
/ O: [/ I+ A) g/ x( v/ v( X% h
output mcasp_afsr,
7 N3 K8 t9 a9 o2 Eoutput mcasp_ahclkr,
$ I: m" |' X0 O' F) `output mcasp_aclkr,8 ]) M; B1 H0 I
output axr1,
, S) ]! x( ^8 Z8 Y' ?
assign mcasp_afsr = mcasp_afsx;
* [. H6 g" `* S# P* yassign mcasp_aclkr = mcasp_aclkx;
2 m. q) r1 @2 n& m" s2 hassign mcasp_ahclkr = mcasp_ahclkx;; M3 u! m1 {6 `6 L8 d) ~
assign axr1 = axr0;
/ t0 y7 Q( W% B4 M& H, A! g7 M8 Q {. g* A* D3 L i& h
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
) G; W3 D, R0 N( g' u
static void McASPI2SConfigure(void)
% {. @# t9 h k) o# B{' c6 R* x8 w6 n+ h
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
4 [( K- @/ f* J/ jMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */0 r0 q4 ~ [" g
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);5 `; d. G" F& E( S$ }
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
/ [+ a+ M( L- \5 X9 qMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE, l1 G; ]# t' ~% U* z# ~7 h- I
MCASP_RX_MODE_DMA);
" E4 \( `. n9 m! W1 MMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,8 a1 I% K' G4 |% o; i) }3 E- u$ ?
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
! G! B' v3 ~# c0 ]McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, % o8 K0 o9 s% h" F" \9 E/ N
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);, r; f# H% Z; P* u; C( o
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
( }6 e9 n9 B X; S3 c5 XMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */0 l. J, C% h9 x1 i. i. W
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
* H7 e: a% Q; jMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); - F1 h* K8 A8 m! Y2 {0 ?
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,* P. ~* ?+ {# O( m/ j0 L# i' k3 o. N j
0x00, 0xFF);
/* configure the clock for transmitter */, ?4 r9 G& f3 I8 A
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);+ Q( z1 @, I; E
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
5 r1 w5 r5 }5 o+ {McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,# I& r, Y2 P- H# g( f& S: [
0x00, 0xFF);
1 G7 d5 T) e# b5 y2 R8 N
3 w! P! }' Z" {' c/* Enable synchronization of RX and TX sections */
9 I$ E/ i* g6 W4 N4 P) M' |$ NMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */ D" P& S2 N1 b
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);3 a8 j9 z* p1 r, a
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/** b" I5 T. w) \# x5 V
** Set the serializers, Currently only one serializer is set as
9 _3 [, ^) J. K6 a** transmitter and one serializer as receiver.' y& x7 u8 m% e$ |$ R) t
*/
! c# S& m0 u& E5 i1 v" r1 @; bMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
' A$ f" U5 q; Z( Y. }McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*. f( K$ E+ Z' s" e
** Configure the McASP pins
: v ^; U% Z/ V' A) Y** Input - Frame Sync, Clock and Serializer Rx% T2 ?5 q3 l0 Z
** Output - Serializer Tx is connected to the input of the codec
) z9 @8 _9 c) O8 f*/4 w" k$ q. D6 _1 b7 } l- J2 X
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
W3 a3 x; h; e# C( PMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
- O2 O& u8 T ^McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
: P/ {8 q8 ?4 `6 I# ^% ^5 \| MCASP_PIN_ACLKX4 ~- z1 R0 q; i+ U& W% G, M! H
| MCASP_PIN_AHCLKX
9 Z0 G1 w1 ~: Y n8 P( @| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
& G; W. p4 M3 x" \( FMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR , i5 o m& e$ ?! b/ Z1 k
| MCASP_TX_CLKFAIL
- }7 E( H- m- }: ]& z: `7 o: v| MCASP_TX_SYNCERROR9 i% G# D6 h7 K0 K u
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
2 l9 d' g6 c- c: c+ \8 b| MCASP_RX_CLKFAIL- n4 r6 p$ Y& s) Y4 o6 D4 O
| MCASP_RX_SYNCERROR
4 `( V9 W/ n0 [$ D; w: Z| MCASP_RX_OVERRUN);
8 Y3 v2 N. s+ W o}
static void I2SDataTxRxActivate(void)
5 }' v: b+ H4 S, }0 [{
6 l6 ]- S( Z" o( M$ }( U/* Start the clocks */% j9 x: k j# a, [
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
2 `" B6 C# \% HMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */8 N0 C% ]1 D( i7 @ x
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,% h3 S( @- P0 c
EDMA3_TRIG_MODE_EVENT);/ m# w( M% y& g$ e# b6 x) e2 b r# J, G
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
8 L- ~) T) |, x3 g; M( MEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */5 u5 C9 r3 ~! q) R! S
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);: d$ x& o- N+ n5 [) ^
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
$ w' B: [. P0 k( m8 N2 G& Mwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */3 C$ x$ C [# w: R) y) C
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
6 k8 f/ B a' F3 Q/ oMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);! ^& G7 g2 `1 M% W3 g; i
}
/ @7 z$ _ q0 m, Q; R2 D' ~0 k请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
" F6 o/ O4 N8 y a) A$ Q' a- ?
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |