嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,3 S5 v, v) N  b+ h7 W  Z- B
input mcasp_ahclkx,
( y+ a& W' c3 \  oinput mcasp_aclkx,
. j) u" r8 Q; ^( v/ h! k% k( Q; Zinput axr0,
  r* ?0 ~8 o1 ?7 F- ~1 @) N7 X9 l$ x0 M, c
output mcasp_afsr,' R4 P0 e: g8 X! K6 `8 N/ @
output mcasp_ahclkr,! u% D: n, D9 r' i5 `
output mcasp_aclkr,
2 N: q' c+ r4 Q$ a# u) Loutput axr1,3 o: E0 E* B' m9 z  w
assign mcasp_afsr = mcasp_afsx;- j8 Z3 m. G( d8 v% i% ^
assign mcasp_aclkr = mcasp_aclkx;5 M& E' ?% d, Q
assign mcasp_ahclkr = mcasp_ahclkx;, \4 d+ n+ N2 _  i& ]6 u! T; r4 }
assign axr1 = axr0;

9 ?0 n# E$ M, B1 Z" `6 _$ Y! ^& e5 c$ h7 v0 |1 F  a
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
' Z. Y5 K) D% O' \
static void McASPI2SConfigure(void)
4 h7 O+ D7 t( `4 ^  X- z, W{3 ?. k' k$ @: ^# E* O3 }
McASPRxReset(SOC_MCASP_0_CTRL_REGS);! N% T, r/ i9 b
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
8 i8 U% W3 b) |, Z0 RMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
8 \! B  n. C9 N8 \' I5 G; BMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
) b& j/ F7 n) R8 B4 z. n9 c' e) R# n* wMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,: ?9 w! ?2 \. D0 Q9 }- x& i
MCASP_RX_MODE_DMA);! [3 r, ?2 a7 {
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,0 P* Y' v! r8 j$ B
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
; ^' k7 M: _* g9 y- e# DMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, + p7 o$ K4 x$ M& W& N4 _" G& p  W
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
* `( J9 ^6 s, G+ r- _2 q! P& F& WMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 0 b; _; a( R+ o( W
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
* r2 X1 Q" ~9 @. _% w8 [- uMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);+ S) c* m' M, ^- |
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); # ]( F  V, p/ {4 p% p5 |/ K5 G
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
' X, H+ F4 f! Y0 i/ h: @7 \0x00, 0xFF);
/* configure the clock for transmitter */& k3 {* }: z. w
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);4 I5 G) L" o3 {
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); . T$ ^( F9 C9 E  u6 n  f! F, j/ I
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
! h0 C" m# s/ s$ y0x00, 0xFF);# F' D( X4 D4 z% c9 n( f
) L' ]3 I3 O/ l3 V$ _' u' T% l
/* Enable synchronization of RX and TX sections */
; v! {0 R# ^$ C8 E7 p' i& U+ iMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
% {6 h: J7 p( A" nMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);6 \& V  {0 Q) N
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*$ D$ O( G5 A4 I& d$ w
** Set the serializers, Currently only one serializer is set as
+ y  A, S3 u7 N; Z** transmitter and one serializer as receiver.8 D; m2 l; V2 Y% Q5 ?, @" e
*/
# e: X- @' r. x+ l" `0 P, ~% a( `( uMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);& t" C1 ]; @( _7 r3 T
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
# T2 `9 ?, O, {** Configure the McASP pins
+ \5 b  @- W! q% v, A6 o** Input - Frame Sync, Clock and Serializer Rx
9 N" k3 M( v. c1 U** Output - Serializer Tx is connected to the input of the codec
9 R: u0 y4 h% s% p- j*/
" o5 n( L: b0 K" N1 v. Y6 AMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);; E6 ^' s' X) T' C* y! K
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
6 L( e4 t$ h7 c4 r+ DMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
7 `/ ]' x6 m: x' C. P| MCASP_PIN_ACLKX, D6 U" A* g; n: u' u. ?- Z
| MCASP_PIN_AHCLKX0 i/ I" ^/ Z+ ]' h% w7 P7 ]/ H5 S
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */% q/ E+ e3 W: K; u3 P3 x& M. c$ _
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
9 V4 b4 i7 f) X, {3 I| MCASP_TX_CLKFAIL 4 e7 w1 r3 c5 C3 y* n" `
| MCASP_TX_SYNCERROR
7 P4 \& {6 w1 ~7 B+ c| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR , a# S; _: A0 T# W
| MCASP_RX_CLKFAIL' ~/ \; [7 @4 j" j& w6 H2 F
| MCASP_RX_SYNCERROR
' Z  `; Z& z# ^. v: n1 x| MCASP_RX_OVERRUN);
1 r! g2 x/ w$ b# W0 Y4 m}
static void I2SDataTxRxActivate(void)
% O) u% S+ ~3 f& V2 Z4 z{
, t, Q7 S. M; E3 X3 k8 \/* Start the clocks *// O  X5 a) [" O+ d) z
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
2 t* _& A& k/ ^1 EMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
  s3 u; b# v4 X' ]EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
0 _+ W* H5 b! L1 j, V2 FEDMA3_TRIG_MODE_EVENT);
. P; K5 E7 e5 D; L$ vEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
$ k! m, |, I6 [9 e. z% S' QEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */( |2 P/ X- a7 a4 U
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);9 l  t, j( E6 {7 x, c
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
: O2 j- x" D% n; s9 dwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */- y% A' Q, q: F7 s
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
/ S  @# G+ v  U: vMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);( H, t; B: T* j$ }
}
% p9 C7 k; K, K8 G; c3 [! D
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

: k2 l; M8 z3 O




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