嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,) m- F3 u% I8 a& S
input mcasp_ahclkx,
: R( j' E& _. R* \+ H; G1 pinput mcasp_aclkx,* B, a6 M: ~" _$ H
input axr0,
: X) a+ o* }( W' C; c/ B% W$ m# B7 T6 g% I) P- G+ s
output mcasp_afsr,
3 \7 _% I( o" f; Y+ b8 @* \output mcasp_ahclkr,. O& y" n3 X5 u" n! W8 p
output mcasp_aclkr,2 D+ A- {9 `, w
output axr1,
& J" G. A5 ~- w
assign mcasp_afsr = mcasp_afsx;
% L* _6 e3 K$ r1 ]3 b1 Tassign mcasp_aclkr = mcasp_aclkx;
( O+ H3 c/ \2 V3 L+ `5 u* gassign mcasp_ahclkr = mcasp_ahclkx;* t) C- `5 a6 ^5 |% c$ e% P' ]- Z
assign axr1 = axr0;
% |6 q7 \- H1 F! {. F) `' b. }3 w3 j4 c0 W' t" B) U+ S! ~
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
/ p& j7 G4 P$ M \% t! V5 i. x
static void McASPI2SConfigure(void)
# z) S% s! j7 d* m/ X/ e{' t8 _/ g; w- `) l" j% f
McASPRxReset(SOC_MCASP_0_CTRL_REGS);: C0 B) z5 s* m- A. y8 k7 \
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */: Z" |' V9 Y1 R% t g
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);6 ~5 S# A8 o5 ]
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */9 ?. K$ Y9 y- @& {9 S) r$ e
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,/ S. O2 ^4 h8 c* t, P
MCASP_RX_MODE_DMA);: e1 s2 Z3 M4 ?# m
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
, J9 v- r% X9 G3 ^- y* pMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
* V+ p- t0 Y0 e8 p9 q4 HMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, . o, M3 j; F) g2 r, e( l
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
B1 a' K( t/ o' Q: z* f. L0 }) WMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
3 c5 M3 W* N( r" i* {5 `MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */( p& c- Q. A M% m/ h; z' ], p
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
: N8 j2 O, C! B' [' u& r+ iMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 8 y, K' q9 a- W8 e2 _7 [( L
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
" P2 ?% p- g- Y; X1 i7 p) i0x00, 0xFF);
/* configure the clock for transmitter */
7 w( f- n0 O3 n! pMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);2 j+ Q: c( H5 h2 i0 R) G
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 8 F+ c) n+ M1 {' X
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,3 k2 y0 d$ x- ~2 l
0x00, 0xFF);( u T( n+ K- `8 J! {. S
9 K3 a- O2 W( e. \/* Enable synchronization of RX and TX sections */
9 _. ?5 V, Z, \) P6 S b$ F0 EMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
( Q E4 E- E. }2 nMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);8 K8 U/ q. J4 W5 J5 S5 V. D
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*0 U) J1 u2 w7 |$ i/ w+ V5 C- N3 t
** Set the serializers, Currently only one serializer is set as
% C3 o! t9 Z" @3 h3 f3 x X# e** transmitter and one serializer as receiver.: a w L! p# m( n6 _1 j
*/
3 c- j& }" Q) v+ U2 s- WMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);' F& w; ^- R H
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*/ B8 n( X/ o% [( j9 c3 L( O
** Configure the McASP pins ) |4 a1 K+ ]+ S, ]. h6 L; T4 {
** Input - Frame Sync, Clock and Serializer Rx' \; H4 ^& [5 h* x0 C# u
** Output - Serializer Tx is connected to the input of the codec " ]; s( G9 B! u" Q$ u7 i$ J8 ~
*/0 u% x ?+ m; F! [
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
/ F% Z7 w9 z- P' `6 }! OMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));9 X# X6 e& i s& c6 V
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
4 E/ X5 G! t# X' U| MCASP_PIN_ACLKX" I0 q1 I3 a, v5 D
| MCASP_PIN_AHCLKX! Q* |3 ~. n) D1 k; }: _
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */, e* e* i5 I$ L+ k6 j
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
& [* P5 t6 _; n; G0 I( x| MCASP_TX_CLKFAIL
- K/ B# I$ ?1 L% V% v3 r; u* G| MCASP_TX_SYNCERROR
% y; l" k$ k b/ h. e3 e| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
p* H. Z+ z/ [* I" I| MCASP_RX_CLKFAIL
; V& S8 P2 U: {# @7 E, \| MCASP_RX_SYNCERROR
, y8 E5 k& R' I1 U; [# T| MCASP_RX_OVERRUN);
( u: K2 c+ Y, r5 p0 w* G# p}
static void I2SDataTxRxActivate(void)
0 X# h& C, u3 _- }! X4 s{5 q: R( S. Z" z% I& [) C4 s9 [
/* Start the clocks *// R* f2 K7 }8 f
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);9 a) b: h( V, y5 k8 X" n# ]& e' x
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */* M) e1 B$ I5 s8 F3 K! l; z
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
' }! Y8 q& V1 \0 JEDMA3_TRIG_MODE_EVENT);) a/ h# }* O, J& o1 P7 w1 M4 ?
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
' r. ~$ a* v# V# N0 VEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
8 J$ x% [; v$ ]: d2 SMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);" {3 X: j4 r3 b, M+ h$ u2 F
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */# g7 O; F8 a1 Y6 l
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */7 J; o) u2 B0 N: k4 E' N3 t
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
7 G9 H: Y+ C* O% ~% D' g/ r# \+ yMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
/ c9 ^: R: t% v# V: R' f}
6 Q) h e5 v6 Y% k Z* N0 X1 V请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
3 n1 P9 O. F9 n5 W c4 c
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |