嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,1 h! ^9 B X7 {4 ^5 |* p
input mcasp_ahclkx,& }. t) ^2 c0 \9 P0 c
input mcasp_aclkx,# D7 x+ e: I5 o8 }+ C9 i
input axr0,
) T2 Y9 ^& G# K" H! r! w9 T* e" s" C) d, v' Q
output mcasp_afsr,- P" P! N! X& o' O' I* p6 ~
output mcasp_ahclkr,, _# Y N5 n4 [4 a# s! Z" X
output mcasp_aclkr,. F4 p; K5 p; _# k8 m/ s
output axr1,1 c3 K/ ^ `# L! R! [7 Y
assign mcasp_afsr = mcasp_afsx;4 P9 f5 b% f1 X0 F
assign mcasp_aclkr = mcasp_aclkx;
7 l( s6 d+ m# v2 y& E6 x7 xassign mcasp_ahclkr = mcasp_ahclkx;! M+ z9 K% n: V( v: w# v) [: z* r
assign axr1 = axr0;
/ K) r0 Y2 ~! i# ]+ W% j
" H- ]# i! w! ^+ l* B1 n* q
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
' y0 l% _1 K! U: ]9 A* ^static void McASPI2SConfigure(void)# k p9 H; G) E) H1 L8 G8 y3 s
{- R0 n g: L- Z5 d5 h& d
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
- f/ g% F/ ?" ^2 N9 X* p! y$ P5 eMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */6 p; N8 h" I* A$ L. Y
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);' C, \6 j. m: V$ ?
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */4 W4 Y! D; f' X7 y. G
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,' e. h# N9 m2 d0 Z
MCASP_RX_MODE_DMA);
. [) ] p% L# y+ f; YMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE, d' F( `4 L1 @/ o( z: C, x0 c3 i4 `
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
, p, G$ j9 b9 `McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
# |% A1 K3 u" g2 XMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);, k0 }# y, N t; L1 K
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, / f3 |' b# O' Y0 J! u9 h- o
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */' j6 U5 V) _0 O7 K8 s: b" Q8 E
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);$ Q# P( L8 j3 q4 d ?- N' a7 ^3 W
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
; Y1 ]; J2 ^2 G. W4 z7 iMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
- v6 H7 y' Y( q5 O% R4 T! ^4 F! Z0x00, 0xFF);
/* configure the clock for transmitter */
2 T7 R' E# S4 xMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1); D8 k. z' W& t4 J
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
9 D5 s. X$ L& R3 v! iMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
- G1 p* d+ u% v4 s3 \# c; C2 s, j0x00, 0xFF);: A/ s' E8 ~; W
% I6 ]9 G) e; Z. {7 d/* Enable synchronization of RX and TX sections */
J) e( {% ]% _+ a1 u/ CMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
, O" _ ?$ s9 H/ S9 L2 D6 \McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);3 e; Z: g" Y8 Y4 J
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
$ z( H+ m# [' J9 M: Z/ z5 c** Set the serializers, Currently only one serializer is set as
+ u3 L5 _# o. C$ l' R** transmitter and one serializer as receiver.
* Y1 K& P( g' v# v* u2 r" Q$ C*/+ x' G: |% b& ^4 K8 e# b
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);7 l4 K( B3 B- k( I+ A
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
6 N5 w- M: B U$ k) X2 h** Configure the McASP pins
E7 b {" h& C; s/ |3 \8 o3 i** Input - Frame Sync, Clock and Serializer Rx2 g, S6 S+ s( x: q* H5 Q
** Output - Serializer Tx is connected to the input of the codec `2 g- W/ d) R/ k: z; V, L. q
*/
_2 x; K4 q% x- ]0 [" EMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
6 u" A, [& H4 v* k! H AMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));5 n# ]4 z! X) E# n7 |2 W8 N0 [
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
( ` f, w* @% z" ]. O| MCASP_PIN_ACLKX* ?- K* f& b0 I J! Y. A8 c
| MCASP_PIN_AHCLKX) k6 y, r& V+ S* [+ z* k7 s
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */" j5 r; m1 s3 }3 C$ a5 y
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 1 ]( H8 e) N5 @! Z9 ?
| MCASP_TX_CLKFAIL
6 A$ \) e) M3 F& `7 S, T4 A9 ?| MCASP_TX_SYNCERROR
2 M/ v( Q6 g7 i5 o4 ]2 k+ V" ?| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
- o- c6 {! l' Y/ ]| MCASP_RX_CLKFAIL
; @, {1 J$ {/ O( P1 X- S8 g. d| MCASP_RX_SYNCERROR
. H3 W$ g6 T" Q' q' P| MCASP_RX_OVERRUN);! u& A" n* [# T, D N
}
static void I2SDataTxRxActivate(void)6 e4 d1 l# Z' U( o$ q
{
% Z4 L7 K6 s8 r/ h/* Start the clocks */
: d5 f- s2 P C, E4 z1 ~4 U$ eMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
( C1 Q1 ^5 z( W S: P+ KMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */4 h% z1 _( _3 C! L1 A( t/ V! p! e5 x
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
+ X- w# V' p3 e' _' rEDMA3_TRIG_MODE_EVENT);1 }) W% R9 D$ h9 `( r1 o- ~' b6 R6 Y
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, . U0 N0 h, f+ B: l+ r/ Z
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
6 W; A( V# J- e8 s6 S/ z3 A+ J, LMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);8 K# I( o# n- e5 X
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */4 i8 ~9 c4 F4 p* x, B+ f
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
( Q" B8 M3 q6 m/ ]7 aMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);: k: Z% N. s) ^3 d! X7 i: d
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
: z( w: P* u' P# u}
* `7 o3 R) G. t0 p
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
- `+ z, \5 Q) Q# T: O0 c
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |