嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,% y# P9 S: u. `4 m. n# ]: t
input mcasp_ahclkx,
5 d) Z4 f" M b, w& Q) ?5 J1 p/ winput mcasp_aclkx,
4 _0 ^" f/ i( a- Hinput axr0,
- L* F' T. c, d) a/ [1 e3 `8 {5 m1 E
output mcasp_afsr, U2 D5 F: q) k- _
output mcasp_ahclkr,8 { i* i, f) A% U- N: l* n0 \7 C
output mcasp_aclkr,
) u! v4 `. P7 u( o2 _7 @( Q' loutput axr1,
5 z7 t1 n5 d: ]
assign mcasp_afsr = mcasp_afsx;: G+ q* |) e& j, ]8 `2 h
assign mcasp_aclkr = mcasp_aclkx;
9 i0 t+ W- u$ Passign mcasp_ahclkr = mcasp_ahclkx;2 x: i5 G6 W& z: T9 U
assign axr1 = axr0;
5 }# M | Z/ Y% r! w4 l' \. e' G# A
+ c; E- Y+ g5 ]/ i/ O5 z1 W
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
7 [& r+ b# i* ^9 }6 `9 s7 O- D
static void McASPI2SConfigure(void)/ ]! j# X+ _/ d U6 S2 W6 h+ j( s
{
2 x$ ?2 H3 S6 V4 S1 YMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
8 e. c% i! g& R- L8 w# _& [/ A% VMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */2 s4 O5 g' p1 c5 q3 ^4 \7 L
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
7 _ i. ?7 e. D) H( L8 }McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */3 a, x9 ]5 o; u2 G. ^5 F( w
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
+ v% ?$ v) G1 r/ J9 g% C# SMCASP_RX_MODE_DMA);% ]8 o1 F9 F7 {, f, R
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
3 }0 F X) @; jMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
8 f$ I" u: |% N8 W1 \McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
& Y1 x q1 S8 y; k: FMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
; y2 g' a$ J) v3 e0 gMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
+ M6 H/ L5 u0 G) hMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */: b2 Q% j; C! G, g, `, n' ?
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
7 [1 l3 x4 w$ t# Z& hMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
: l- r0 G. {& C9 V& yMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
+ d" T+ q5 b; j2 I0 z0x00, 0xFF);
/* configure the clock for transmitter */- i) t5 R0 L5 X! J5 i) k
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);% ~0 G' ~, I) z6 G/ r. l6 [0 \* [, ]
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
8 |3 K" S# a& b) k1 `$ l4 tMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
, X# H4 M$ \2 q l& z6 C0x00, 0xFF);9 j8 }0 `$ {, ]# D7 Q" Y" _$ r1 Z& q
. w0 G( Q1 S! V* k& |
/* Enable synchronization of RX and TX sections */
) Q1 n4 p; n/ D5 g" b0 Q& A: ^" W6 \McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
/ W4 f( A5 u/ n+ |- T$ ?McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
) D; {( y3 W. [8 _$ IMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
" H: k4 z9 k v" l** Set the serializers, Currently only one serializer is set as( A6 t- y1 V# Q% s2 T" V$ A
** transmitter and one serializer as receiver.0 @& ]8 p- a0 ^8 v5 A, g
*/4 E$ F/ I4 B$ E! g
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
C- n) v3 B6 d: oMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
* e5 p U( H5 V- o7 T8 A** Configure the McASP pins
4 W* H# S1 S, T1 y8 b4 L6 ?** Input - Frame Sync, Clock and Serializer Rx. z5 y, k$ V( y
** Output - Serializer Tx is connected to the input of the codec
1 m9 R$ D7 p/ ?7 o*/
8 {1 V5 ~% R. a$ r& ]' ~McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
& A! Y1 }% G: E$ PMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));4 f. i7 f/ t/ C' ]" ^
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
/ k1 A: y3 t7 _- w5 g* [| MCASP_PIN_ACLKX
8 v$ t& \; d8 L; u3 z& F% `| MCASP_PIN_AHCLKX7 J) O( K2 O" T- b
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */1 x1 P" M; ?- ?& H) [
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
, D$ \ t- P, ]) M) v| MCASP_TX_CLKFAIL / a4 e6 _ t I7 y0 G# O
| MCASP_TX_SYNCERROR
p# o' |$ j, E' t; c" ~' M| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
. P% Z0 Y, S1 K2 n4 @2 F| MCASP_RX_CLKFAIL
+ Z. n' h$ T4 @" z| MCASP_RX_SYNCERROR
$ S8 V/ i/ i& t$ M5 r) y| MCASP_RX_OVERRUN);
E% p6 U9 y" K. }9 R% W4 D# t}
static void I2SDataTxRxActivate(void)
2 {! N* ]* `4 K8 y' D5 d{
+ p4 _+ y2 J4 N7 r/* Start the clocks */1 E+ F k8 x3 v4 E& k. v8 D
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);' I4 K: ~4 B' S1 w' p+ k1 g6 T) v
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */ j. C3 |8 H- m( s# g+ A9 _
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,8 e: g! _" m9 Q8 N( s# A
EDMA3_TRIG_MODE_EVENT);9 ~- ^8 s' j( z* x% {- ~' j
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 8 B$ s: l3 _# I! e+ g+ K0 |1 W$ o
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
1 ~4 w, X# A: fMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);/ U3 r& ^5 U N2 d0 t! K8 d
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
u1 D$ m! R, m' d3 W+ Mwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
; F9 [& }, R) v- j6 L6 m/ ~2 ZMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
7 C9 j! i% K8 X) Z5 C* k4 o3 B+ eMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
/ Q+ n1 k) ?4 j- w4 j" d}
) Y+ M8 ?. M, C% H5 v/ y
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
4 x& s. u* Z6 \/ r) z: I) d/ u% k
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |