嵌入式开发者社区

标题: MCASP自环配置。 [打印本页]

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
1 c/ F$ L  Y& _, ^, e, winput mcasp_ahclkx,! r& a) R( c+ {; @  L# t
input mcasp_aclkx,
6 T! S6 O) Z# @input axr0,
( [$ O: K$ H) T2 W# y% ~2 v+ {$ r6 ?
output mcasp_afsr,2 O& a' f2 x. c* r
output mcasp_ahclkr,
7 _8 V, y+ ~7 u! M0 moutput mcasp_aclkr,: x4 i3 `. A5 I! Z- q" l
output axr1,
, P2 a8 r# ?/ |
assign mcasp_afsr = mcasp_afsx;
: i& \" K, _+ N+ H' }. o4 |" ~assign mcasp_aclkr = mcasp_aclkx;
( ?; s: v& P3 |; Sassign mcasp_ahclkr = mcasp_ahclkx;
8 B1 q9 J7 S. t7 \& J. O/ s6 n! nassign axr1 = axr0;

. D/ c; v: c+ N
* u' _, b4 a  ^( M  `# b
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

! C$ R7 H4 |9 f% F$ B0 K
static void McASPI2SConfigure(void)
8 B# P* q' ~$ P6 B{+ Y/ }) S8 x* ^3 g- u
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
0 p0 n& N3 z! l" p/ ]2 HMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */# b; G% q# b8 w
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);' y4 B4 N' _& N+ \) ]! C, T4 [
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */* S. R, H7 L( j$ `
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,: p( N& a+ b! f
MCASP_RX_MODE_DMA);
( q% @, a+ ]1 G$ q% I" X, {& ?7 [$ _McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,; k+ x1 ^# [; V1 T8 s/ H! s  U1 j$ b# ?
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */8 b% a& Y8 H( G7 X' o! |
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 9 o. T: R- K+ E/ v
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
2 Q% s' N; s! B+ Y2 `0 o& S8 s5 NMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
: O& ]  s) w' p  W0 c0 }! n* kMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
4 L: U: f( s% G+ `7 ~McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);/ B/ R1 ~. l3 M  w9 O6 z1 w
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); + ?5 n5 q1 I/ E7 t
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
6 L% [( g# C# Z0x00, 0xFF);
/* configure the clock for transmitter */* L$ Q9 I3 c0 v/ ^+ Q5 ?2 `
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
* k% Y# ]$ Z" L7 Y7 z; s$ z" j3 PMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
: N# i1 ]: L  {0 u; x: pMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,$ Q. {6 y' T$ ?9 n, S* _' x
0x00, 0xFF);- o1 n, j7 Z! f( z$ C

7 c$ `4 O, Z) r! r/* Enable synchronization of RX and TX sections */ ! ?3 x% i" t& I; g5 H
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
7 u# [" s$ t+ I1 G; {8 ^3 m+ @McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
: H! Z5 H0 I1 G% s+ HMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*. H+ w7 d  D4 }7 {  K
** Set the serializers, Currently only one serializer is set as
8 C2 s) ]  N0 U** transmitter and one serializer as receiver., J/ F5 q8 C# e! t8 M* p4 j) c# R
*/
4 U, c3 b; G% D' g6 OMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);$ u1 ~7 x. h. u3 Y% A9 ]
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
+ Y) X; h$ P. I# T** Configure the McASP pins
, i3 V3 y* m) {** Input - Frame Sync, Clock and Serializer Rx: l( o% n8 c/ s) S: z1 {- U. T
** Output - Serializer Tx is connected to the input of the codec 1 D( ^$ _0 c8 {, Z; C) `% Z
*/% K; F" q" W: l+ K
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);! B8 q5 ]$ X) O; L6 X
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
( y) w) z& ]1 P2 w) RMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
1 K7 D6 I; {8 S/ R! {| MCASP_PIN_ACLKX* s9 c) o- I- k7 b7 X
| MCASP_PIN_AHCLKX
2 ?# o6 S6 h9 M7 i0 C4 l' \| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */; w5 L$ h. R% G
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR % I# l) ~/ f0 s1 E+ B  Z/ S
| MCASP_TX_CLKFAIL # z) C" F( u1 G
| MCASP_TX_SYNCERROR; Y) j, Y+ @4 N- ~+ R3 o
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR " _2 d  A! h& h! w7 h
| MCASP_RX_CLKFAIL
5 a, I" g0 R  ~3 Y| MCASP_RX_SYNCERROR
" }2 {5 l/ L2 m- R! V% j0 Y| MCASP_RX_OVERRUN);
1 n+ C+ e: P  ?1 C8 W}
static void I2SDataTxRxActivate(void)9 D3 A5 Z& |5 R0 _/ {
{
, T* B, D# [8 }8 B2 H, w/* Start the clocks */
5 }2 Z+ A9 c! BMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);, p* o! d$ f/ y0 o# O
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
4 K( |9 |- n% F( m; E0 d4 d/ n# |EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
8 f: x0 x7 B) I5 S3 IEDMA3_TRIG_MODE_EVENT);
! w3 h% A5 ~1 S! K) m# [$ X# {2 e$ SEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ! ~* O1 A0 U  Y, \$ j( `
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */0 S& O" Z) ?. U1 t) M" k9 L9 x
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
0 F5 c# s" J8 c. ~McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
- |5 T/ ]. {* cwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
+ @* x5 _2 K; i. R3 M5 EMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);2 P3 D1 I. ]0 m/ U8 \, d
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
' }' P, \! i1 Z6 T  s5 u0 \1 P" h}
1 k8 m, j- _) Y% x& {$ r
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
0 \: M& v2 c; H& N& p+ M





欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4