嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
4 `1 [2 a" T# ~$ k# _- F' qinput mcasp_ahclkx,
& d2 o/ F. I9 y2 Pinput mcasp_aclkx,
2 x" m3 a4 e, e( G! ~$ f; Winput axr0,5 g5 `7 b. M- ]4 O, t2 Z6 m! ?
- ~- `. N6 O; v# J. {
output mcasp_afsr,
8 i/ w* y+ c1 A9 P2 D) _; loutput mcasp_ahclkr,
$ H7 K. t4 n: c2 y- f1 n. v' Ooutput mcasp_aclkr,* t9 T [' a2 U1 s2 i# u$ Q
output axr1,
: t$ c& s* w, ~
assign mcasp_afsr = mcasp_afsx;
' ^2 g. O0 C4 |% D) Massign mcasp_aclkr = mcasp_aclkx;+ B7 Q# R" X" J1 X; ~8 G$ ^9 z5 J
assign mcasp_ahclkr = mcasp_ahclkx;$ E$ f) W- q T1 @7 ? e! U! e( R) ~
assign axr1 = axr0;
1 g, |* {% U _7 P3 R5 Q4 s* m' i+ f" h4 S& c8 C
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
; }* V/ b; b8 {8 Ystatic void McASPI2SConfigure(void)3 ^0 ]% |/ w0 b9 A/ z
{0 v- Y! B5 B: _4 _( Z% v0 f0 C$ P( c
McASPRxReset(SOC_MCASP_0_CTRL_REGS);; V2 w6 N7 @% ?$ H$ z
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
0 x- t z- ~) N. k7 X# mMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);7 ^( C6 ^+ C9 D
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */% L" |+ e' o3 F2 j/ ]5 m
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE," m8 O: _" }% @; M% Y: j6 W9 E7 I, e
MCASP_RX_MODE_DMA);
6 n3 W0 @! u6 P: J1 wMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
4 C+ \" r1 h' \7 I! ^MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
6 k/ N' C( \. W; zMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
; A2 G2 D) |6 ~3 |' f9 G: DMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);+ q* ^7 M7 M8 M8 h$ @: d* X
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
& Y) g5 X8 [& K* a9 fMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
' R4 ]4 C6 [! g5 j1 N! bMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);5 q) G6 C7 l; G/ @& ^( D
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
1 v% K, {& k' D: ^/ O3 _- _ UMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,+ f) S( R# |* N8 a
0x00, 0xFF);
/* configure the clock for transmitter */0 [, a% @. B' o3 F
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
. x: k% K( U. Z& J. ]- ^McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ) y. W, q# s B3 i
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
9 } j1 Y* Q) z( ]$ G% N* e0x00, 0xFF);8 u+ G, a% J) |+ h/ R# N/ r U
- j1 A- c/ L6 ^
/* Enable synchronization of RX and TX sections */
- t. b1 s, W" f! j1 D( UMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */7 X/ I( @. m2 R: N( o& h
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);2 g/ ^9 g% a J7 T
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*/ ?. {! ^' p. u. p3 h1 M5 |
** Set the serializers, Currently only one serializer is set as
6 f8 r2 o* V8 y2 b9 | z# i; ]** transmitter and one serializer as receiver.. G ~$ \5 P+ }- q! L( q' d
*/
5 ^' T0 j+ d" ^6 M+ |% d# q# t8 WMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);& ]- u# ^0 S' x& L/ u4 K- `
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*& ~- R4 D" |5 V% P
** Configure the McASP pins + X) c9 I2 D0 ^3 A
** Input - Frame Sync, Clock and Serializer Rx
* V' D; o H* D4 x7 M** Output - Serializer Tx is connected to the input of the codec ( t! ]" m; l6 U1 ?
*/& w- L0 f4 [- Y) U0 r
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
* r8 t D( I4 J) QMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
7 X# k! R) C7 I! g5 M( YMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
% t1 l; H- f, C1 {' z! {4 d| MCASP_PIN_ACLKX
7 |" O2 \' l1 l U; [3 X) f| MCASP_PIN_AHCLKX
- t& h$ I$ ] b9 H I| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
7 t4 o+ }% g3 l' c+ A5 [McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 9 W& G% a. I2 K# e4 Q4 q
| MCASP_TX_CLKFAIL ^( n7 C+ l5 S
| MCASP_TX_SYNCERROR# ?# ]1 [0 b8 P+ H- C
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR + f3 z. w4 w; a( U( ?4 @8 {2 `
| MCASP_RX_CLKFAIL8 b2 E: T6 t) R6 Z8 X
| MCASP_RX_SYNCERROR
4 s7 F1 t0 R3 V( X. W| MCASP_RX_OVERRUN);
% R1 a# q6 k1 | w4 P5 O+ F5 ~}
static void I2SDataTxRxActivate(void)$ P5 T* g W$ x1 U( w
{% N9 L# m; G* ]: X7 h
/* Start the clocks */
* W& o9 q& d/ n) g1 y/ M: DMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);% z4 j7 }, F& M+ [
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
( n8 A1 q8 Q% _- O* REDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
; {4 Y. s8 a" u0 n( Y2 j; g" p nEDMA3_TRIG_MODE_EVENT);
. b+ q3 W. \# l8 x9 NEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ) J; z0 L4 l) P
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */( |- {+ h- {" b0 M1 j u2 d# b/ m, d
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
+ @' |% l* L. m( Q: X' hMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */3 R. G2 |; B* E* u
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */6 ^% J: m+ I, ?# h) A3 c& ?
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);" x& t9 A$ e) w6 X% Y7 Q% Y
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
$ l% D$ X8 _& O}
0 u7 \& f* z1 f2 ^请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
7 T0 k+ J J6 H( x( f: k
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |