嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
- M4 [% m# [% Y, J( hinput mcasp_ahclkx,
) h5 ~$ |8 d2 j8 [input mcasp_aclkx,. O: W. s9 e8 e% i
input axr0,
$ `, T) j. E( ?+ |- M
: C1 u7 U7 a3 [) t* K/ \: b0 boutput mcasp_afsr,. ^" I; Q9 K" E- z
output mcasp_ahclkr,
+ p& s& j( c- b; J6 L) s. T) Z# w0 }) K5 Aoutput mcasp_aclkr,2 c$ X- E+ A7 l+ t' a: c
output axr1,
. }0 l- |1 r: c& x
assign mcasp_afsr = mcasp_afsx;' Z! {; H: O( c3 ~
assign mcasp_aclkr = mcasp_aclkx;
9 r1 q! Y8 ]) {, A+ x H2 N, P- Bassign mcasp_ahclkr = mcasp_ahclkx;3 W% G2 y) N5 L
assign axr1 = axr0;
7 a2 h5 D3 R8 B6 ^5 W6 ]2 }1 I" V
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
0 l; L: h8 ^, a4 x# F' E
static void McASPI2SConfigure(void)
9 M3 `9 L- w* w1 P% L{
8 K6 b1 P9 M# i! ~. G* pMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
8 K. l; h/ B4 s9 z* HMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer *// N- ^# u. o$ ]
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);5 i6 w& `8 }( B% E
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */' U1 M( ~9 H: y' B) n' W! _
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
3 T$ G: F( T' K& S2 H1 \MCASP_RX_MODE_DMA);+ r$ E, Y/ W/ [6 |3 g
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
5 q1 ~+ d5 {# v& g; }MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
|1 n& ^! B1 t A8 X |McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 2 a1 ]8 t2 s$ C
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
4 f' r% m, s. `: J! oMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 9 R; D) l% j2 T: ~ S, b/ U3 w% F) a! i
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
" e. e) U1 z0 ]% g2 ^/ v( O* CMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);( y2 z6 F- n$ y6 _: b7 s- h. \ J
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ! g8 ^9 _; i8 y- _" _9 \5 A
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
* Q0 t) g# M7 {/ X6 m0 [0x00, 0xFF);
/* configure the clock for transmitter */4 V& U; H' _9 F- L; m
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);, B/ w8 R4 B: {5 d4 G3 Q
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ' F9 {/ |- ?: F
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,7 m( X6 k2 n2 Y3 ]1 L. v
0x00, 0xFF);
; M* R% y" A1 E: E9 j- |8 f2 V7 Q v/ W$ B# ?! f
/* Enable synchronization of RX and TX sections */ . u4 l$ o7 {8 n0 k
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
5 s- g! ]0 J; D" cMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);/ W$ ]- Q' [6 a- |' X' v# R; l3 N
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*( e$ Y t* E/ ]: I
** Set the serializers, Currently only one serializer is set as& K R, b* K) S) u" G$ b
** transmitter and one serializer as receiver.
$ x# V2 F. H9 u& M*/
+ o; U2 i: Y) GMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
" }- `! ^+ p3 lMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*5 M7 x2 ^% `& D) I- ^
** Configure the McASP pins
3 \7 t" z5 R: {1 A. I** Input - Frame Sync, Clock and Serializer Rx
1 R! V. m# B8 _/ P8 Q% h** Output - Serializer Tx is connected to the input of the codec 0 x& n) n. t' S5 h8 |$ U
*/
, I; l3 B, r1 y5 f5 ^/ O0 ]McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
; m1 T- C9 ~) B" N* WMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
% t# E9 B5 l; w8 h. T& iMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX$ y6 y$ z, t, B
| MCASP_PIN_ACLKX3 j* }% {6 r4 u. r0 R
| MCASP_PIN_AHCLKX% t, n' g3 W* q2 G
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */2 ~. v4 a4 S+ H% a
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR & y- e) |. t4 J5 u0 n! M
| MCASP_TX_CLKFAIL ! T4 S% ^) S8 E( s
| MCASP_TX_SYNCERROR( h' Q) L& X; x. G8 @
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
7 u& V; Y9 A) A| MCASP_RX_CLKFAIL' I* L; D7 u( I$ r+ ]
| MCASP_RX_SYNCERROR 6 B Y2 g9 `. k, u1 i" d/ b
| MCASP_RX_OVERRUN);& w) \7 k; I% L' h6 L
}
static void I2SDataTxRxActivate(void)
3 z+ y. M; P, y! M! Z' x{
& |3 F+ `. v2 _6 N2 s" f" ^/* Start the clocks */7 [+ d( M ?8 Q. s# y, Z
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
; F- h9 t2 R( w c9 JMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */8 g g1 J, ]( e( p J
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
0 z& r1 G' n! X$ |* r$ rEDMA3_TRIG_MODE_EVENT);
' x' n4 R) s0 m. Q' YEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ! {) i/ S8 ]+ f: A1 S2 A" R3 o) S
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
( ^5 B( c: c) K4 d: \& F; p4 v5 o0 fMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);& {! Q/ a) ~4 ]3 Y
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
+ b/ r5 m( c( T l2 @- Owhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
d" K& ^9 @8 R& p7 AMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);3 n6 H0 D) H, }
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
6 Y; }, T8 |; o- O* ^$ h8 w2 B}
: R9 {9 \$ Y9 H$ `8 X E: e( S# ^- B请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
7 V/ u+ E6 M6 p# \% [. z; g
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |