嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,) r1 F2 g7 Z. t! U6 p6 U6 x/ O+ ?
input mcasp_ahclkx,) M4 F- M* k( e) n7 ]9 v
input mcasp_aclkx,* x1 a4 G4 T& \6 A, Z% {
input axr0,
p$ C6 h) o# T7 U' n) A3 B
) C1 _6 L% l% f1 y! q" youtput mcasp_afsr,* n3 T$ Z# E. S
output mcasp_ahclkr,- d8 }5 \( K* l# K
output mcasp_aclkr,
- [7 q5 |. W$ ?output axr1,& f& m; i( K3 O) y3 B3 c) M' p
assign mcasp_afsr = mcasp_afsx;% i7 D4 H1 e: D0 ~5 |- B0 s% k
assign mcasp_aclkr = mcasp_aclkx;& u9 F1 G- {! B8 s
assign mcasp_ahclkr = mcasp_ahclkx;7 W3 k. ~+ E1 h! w7 \0 c
assign axr1 = axr0;
4 }0 z8 C$ x1 M; Z0 a# K& K) \$ Q6 V: ~7 F' w0 O2 ~8 \
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
9 n2 `! d v8 U, k S
static void McASPI2SConfigure(void)
" Z" \2 @* X: D1 b; O/ r{
* b8 w! b3 g" N$ V2 V7 Q$ h; cMcASPRxReset(SOC_MCASP_0_CTRL_REGS);; g- w; |7 @' m, \! X
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */* q1 D3 f: Z: J5 s0 G) t1 p9 Y& j; L$ D
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);: \& b% E* _' e! f$ K8 l2 q) H
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */) ^1 b6 T* R) P+ @
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,2 V- e* r% H% I' ]) i p# P
MCASP_RX_MODE_DMA);
& N7 L5 K: \- w" tMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
% P& [4 j4 |) ]4 v& uMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */- T7 G$ \0 H- e7 p- H
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, * ]+ m6 W2 d" ]' y/ O/ g
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);% o% s: m( b4 I2 C9 O
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 8 O u8 A5 ~2 V. M
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */; q- o6 Y# b/ _; D
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
% i) ]0 p/ @" I: X9 m- N5 C: T8 uMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 4 Q# J8 p3 r5 w( l2 P
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,9 C* R7 j, J1 q1 @2 }' X7 P
0x00, 0xFF);
/* configure the clock for transmitter */' Y0 W- S% @4 o
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);9 [# e# H! l3 J( V1 y( h5 m
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
% {" K6 [+ A! W) wMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,6 h; Z8 J* L) G8 W/ r9 u; l
0x00, 0xFF);
" P0 J; X* x3 K& Z. u" T
. P: ?: p' Z9 f1 l- m/* Enable synchronization of RX and TX sections */
3 u V% y8 v9 J3 H5 |6 \' [4 SMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
- z3 s, e" g) I/ JMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);; v; V% j. d" i, p, E
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*1 q8 Q/ ]3 A4 x
** Set the serializers, Currently only one serializer is set as
1 [7 O4 p1 U) C! S; A5 ]0 b. Q** transmitter and one serializer as receiver.
% M. k( U7 I" r$ K2 S*/3 u/ ]/ B8 S6 j' M2 h6 U7 h
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);) ]" \! c- Q) W) ?* N4 k$ r
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
. H6 T4 \5 }) O! o9 i9 j t** Configure the McASP pins 1 w6 q. e8 M1 b( i. O0 ]- }
** Input - Frame Sync, Clock and Serializer Rx2 A7 O) i* e$ e$ ^
** Output - Serializer Tx is connected to the input of the codec # q8 S; b6 q$ O! a9 k% @
*/
; _2 v O7 _. R) R5 t) H4 UMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);/ m5 I& J) m2 ?+ L2 `% x) c
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));, G3 }6 X% Y2 H* A X! S
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX7 Q4 V7 W8 p( G; q* m4 v
| MCASP_PIN_ACLKX$ [/ e$ S, T$ D: h0 b
| MCASP_PIN_AHCLKX
0 b" Y9 e/ s* g Q4 |$ b0 t5 a| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
2 C4 ~9 T" P; mMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 5 \0 }0 a; n& h4 N; k
| MCASP_TX_CLKFAIL " q" m" v' b9 O/ B7 A- [
| MCASP_TX_SYNCERROR
7 i, G2 J0 u7 b| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
6 O) D2 [3 \0 P2 g| MCASP_RX_CLKFAIL
0 ]5 W6 m- I; V5 p: \| MCASP_RX_SYNCERROR 0 r6 U6 K# f/ W, }( Z7 [; N) I
| MCASP_RX_OVERRUN);
' \, h; S+ H1 ]: B}
static void I2SDataTxRxActivate(void)2 E8 `) s' n+ ~) f
{
; L* y R; {, h* z4 C7 W3 e/* Start the clocks */4 a/ p' \/ ~2 U' O
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);! _0 |" }$ O* b5 g0 l
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
8 s" o o, Z! p X2 w3 ~6 B, tEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
0 P- S5 T# q' x1 |8 u, }/ E6 k3 K2 `5 k" mEDMA3_TRIG_MODE_EVENT);
: r# p9 [5 A0 t H) [" \& CEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 1 M* d ?2 b2 q5 B1 e* Y$ ]
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
0 {2 z: q' F- g, Q0 [) bMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);* U6 k9 k" q, W" M
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */, }0 |& X* s& P" C f' N
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */+ W. F+ b9 K$ e* ]$ |1 ^: p
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
" ]* [6 b7 t7 ^9 Y3 fMcASPTxEnable(SOC_MCASP_0_CTRL_REGS); y4 i5 x4 C$ @ F
}
7 h6 x; y3 N" a' a5 `
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
( P8 u; {& b; N
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |