嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,% Q8 z4 }+ L. f' S! R/ s
input mcasp_ahclkx, N; f+ ~& T0 F, D a" [0 D8 O
input mcasp_aclkx,
. L% }* N+ ^, S. B' h0 hinput axr0,3 Y& Q1 h( s: H4 q0 l; b1 U
- j/ j8 B, P, f& F, R8 W n
output mcasp_afsr,, m) ]) G1 v+ l) i9 x8 y, N% _
output mcasp_ahclkr,
% ]9 X' w* g- moutput mcasp_aclkr," h _9 T9 l' B3 ^8 J) J
output axr1,
& w2 U( D5 o1 r& |# Y! }7 Z: M) T6 Y
assign mcasp_afsr = mcasp_afsx;$ H2 B$ h7 O& p, t7 p% l
assign mcasp_aclkr = mcasp_aclkx; E2 u u1 x7 Z6 S6 H0 Y
assign mcasp_ahclkr = mcasp_ahclkx;- ^/ u f% b1 y1 }$ X
assign axr1 = axr0;
' a* P% c8 f' ^9 z$ U- m2 F, w
: t1 g* Z. ]( R0 n( {在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
1 K# ~+ @% K5 C7 {
static void McASPI2SConfigure(void)
$ `6 e1 Z: d+ X: |; `3 j{
! O m2 f5 Z3 M8 O2 cMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
8 A1 }' a6 u. o a9 @) W0 ]$ BMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */' ^7 l5 u# \( z- O2 `
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);1 L, R6 E8 r0 z; B) e' Y$ X
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */9 @8 b1 ] l, }% w
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,4 z% x! Y! b& R/ J
MCASP_RX_MODE_DMA);
; O" y# E$ h$ g7 Z3 [4 jMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
8 n6 w6 R2 I+ UMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */% I3 W7 Z% B R1 x* A# c
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, % L9 X0 m2 u5 |, e
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);9 j+ m, x8 l. w7 @9 B* F" g- U
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ~7 ?/ d$ R: ~/ x
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */; u' s8 i6 H# o; [3 r' ^4 T: F
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
2 g! e) e0 r; C, g5 ^0 wMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 4 h- [; u+ {2 Y! v
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
/ E: D& L- a6 R% r9 |) A+ F+ e0x00, 0xFF);
/* configure the clock for transmitter */
, W' Q8 A& E6 [+ [+ c2 MMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);9 x) F2 t$ \) ], _# k, [
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ; B7 s4 W# [7 }+ p3 D u; H, m f3 I
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
8 x3 x; D' Z1 t6 K6 |$ q0x00, 0xFF);: S: I2 r) a; |, \% Z' ?
. e: W2 F5 y( |# t7 f/* Enable synchronization of RX and TX sections */
+ \3 p$ x) R7 q/ ^4 f3 Q& ZMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
. w5 E# H$ Q* X$ b3 dMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
9 j6 p& X- H; v0 S/ c6 [: cMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*/ D5 w, A1 m- ?$ `+ O
** Set the serializers, Currently only one serializer is set as
! s" C1 p) O! Z+ {** transmitter and one serializer as receiver.3 h8 h" I( ^- k) I# Y
*/; H+ R1 ^0 T4 ~) D" M# O5 z9 X
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);; J9 k" F; F3 D9 R0 V U. u
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*8 I; I0 B$ q& ^5 ^7 B
** Configure the McASP pins * ^* c% V# ? {& n
** Input - Frame Sync, Clock and Serializer Rx9 m" s. p& [; M; K9 k
** Output - Serializer Tx is connected to the input of the codec
; m9 N0 G2 K4 T1 w; b/ l2 N: J*/5 w5 t. Y; U* b' h8 a
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);& x0 J- }# z7 G6 L
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
; t( J* E& @9 {! lMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX. }1 c. L! ~4 S
| MCASP_PIN_ACLKX
3 G% f, |- ~1 C. G| MCASP_PIN_AHCLKX. x. ?3 |; U; {) M6 F
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
' V, b. O& l' X3 cMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 2 c2 d+ e# c; g* C( R! [
| MCASP_TX_CLKFAIL & n; c+ t# b: s' l- R3 W; @' R0 x8 n
| MCASP_TX_SYNCERROR1 Q) U3 [7 g) e
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
; D7 ^, V/ n/ Y6 N }: Q| MCASP_RX_CLKFAIL9 `' K# }7 b K5 Y6 k% s; j) W; u" @
| MCASP_RX_SYNCERROR
: d0 |9 j( c% ~7 Y- \| MCASP_RX_OVERRUN);6 a' z: _5 l7 |: h) w& O D
}
static void I2SDataTxRxActivate(void)
- {- `/ [! l n" v- e8 t{3 H, v2 f" I6 d( }
/* Start the clocks */
4 c4 {0 f6 g* U: m& y$ [McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);; P7 [- \6 l, N- A3 h
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */2 q$ e4 V/ `( K7 o0 S4 [
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
+ r% D0 m) e; ]5 Q i, ]EDMA3_TRIG_MODE_EVENT);( T' \9 j q; Z$ E& p& M. w
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, : \9 G2 P7 S. \, A
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
; M4 C6 R! J! T; ]8 D+ k& f P: p: iMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
/ n' m9 \' C+ t R3 [- ]; uMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */6 [$ m* g8 z& D; R9 k7 T
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */! _# W% w, W1 f2 D* s. @
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);4 A2 t* ~* `5 i( i3 f3 g
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
" G+ w# q& l( p8 C6 x s}
+ |* P) O; _' h& c, n3 J
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
% p3 ~* Z. S; _* \. `: U
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |