嵌入式开发者社区

标题: 在DSP启动EMIFA的CS4片选来进行通信出现问题? [打印本页]

作者: 小石    时间: 2017-5-30 11:10
标题: 在DSP启动EMIFA的CS4片选来进行通信出现问题?
端午节快乐,请教个问题,ARM端启动linux,DSP端sysbios,我在DSP端初始化了EMIF,使用的是CS4,初始化参考了创龙的DSP单核时初始化的过程,单核下是可以使用CS4进行读写数据的,但是当双核启动的时候,就不能启动了读写数据了,然后我就用创龙的syslink案例ad7606_dsp,我用创龙的开发板和创龙的ad7606开发板进行AD模数转换,是可以的,那么我什么都没有改,只是将ad7606_dsp中的EMFI初始化部分,将CS2改为CS4,包括以下内容:static void ad7606_emifa_init(ad7606 *ad) {9 n( W2 \: o7 m# [4 V) f3 w
        /* Power on the EMIFA */
/ `4 M3 t6 _- f2 q: h- c5 O        PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_EMIFA, PSC_POWERDOMAIN_ALWAYS_ON,
) B$ m/ x7 p9 U6 z5 w" g" G$ X                        PSC_MDCTL_NEXT_ENABLE);' F& x3 q9 N  i, B8 e' x  G  B+ @

- j9 N0 A- U- A. S/ `4 l- s0 f        /*selects the EMIFA pins for use*/% U6 g& |! U, R3 L" B
        EMIFAPinMuxSetup();4 A+ b; `9 n4 b

) O+ B3 A) r/ c* e* V        /*set the buswidth of async device connected.  16bit*/; d  w, C3 q' O; `' L  g
        EMIFAAsyncDevDataBusWidthSelect(SOC_EMIFA_0_REGS,EMIFA_CHIP_SELECT_4,- t: U- P# L/ A
                                        EMIFA_DATA_BUSWITTH_16BIT);
+ U* N! m1 x2 A# W. G  c4 z
( n# p* m( F7 F, a        /*selects the aync interface opmode. :Normal Mode*/
4 M) n- A  W9 u        EMIFAAsyncDevOpModeSelect(SOC_EMIFA_0_REGS,EMIFA_CHIP_SELECT_4,2 h! L3 V" O( f2 Y- F6 f
        EMIFA_ASYNC_INTERFACE_NORMAL_MODE);
; f8 E$ ~1 J$ v1 z, g, B
  y& W3 e  G3 d) D. W& I$ c        /*Extended Wait disable.*/6 I4 r/ G2 g! g0 f
        EMIFAExtendedWaitConfig(SOC_EMIFA_0_REGS,EMIFA_CHIP_SELECT_4,
. a. z' x% w( G' C7 Z/ J$ j        EMIFA_EXTENDED_WAIT_DISABLE);, @" x+ Y5 y2 x, X$ W

; _. _1 w7 r9 c        /*configures the wait timing for the device interfaced on CS2
7 U5 r/ c# X0 z( l3 [        * W_SETUP/W_HOLD W_STROBE/R_STROBE W_HOLD/R_HOLD TA*/
/ ~9 T/ L  a" ~4 c' K8 e        EMIFAWaitTimingConfig(SOC_EMIFA_0_REGS, EMIFA_CHIP_SELECT_4,6 y& w0 O/ x, s% B' d" E
                          EMIFA_ASYNC_WAITTIME_CONFIG(4, 4, 4, 4, 4, 4, 1));
) b0 I# [! w, H; ?6 J3 y
9 t4 l9 o4 ?* L2 [, [" f# Y- L}. {8 e5 x8 T; O8 [- \' U( ~4 G
还有cs4引脚的复用:
: G% |, D6 O' y$ O3 w" x" w* p( I) wSYSCFG_PINMUX7_PINMUX7_11_8
! ?8 J- F2 @1 y" _& _+ i
9 v7 t3 E' ^* H3 l最后结果还是不能通信,请问下,对于EMIF使用CS4片选,还需要做其他工作吗?
1 @4 L7 R: ~: W* \谢谢!
5 P6 v4 e+ Q$ e+ Q$ k5 Y+ t. V0 P' \* P7 D
% b$ z" A8 i, _

作者: 小石    时间: 2017-5-31 17:39
我看了一下,在创龙给的linux-3.3内核中有对EMIFA CS4的操作,; k9 d8 C( \$ d! m
#if defined(CONFIG_SERIAL_8250_EXTENDED)
9 k! L. L0 x  o( n2 L3 D2 @8 [- r#define TL16754_CLK                14745600
: j0 X: z8 o$ ^2 z' [; |#define TL16754_PORT_N                8
) Q, n. R7 ?* \7 c- {; O. W; Q. S......2 l7 C9 k9 s5 E7 x, e
static struct plat_serial8250_port tl16754_serial_pdata[] = {5 w; i9 C7 q0 T+ [9 G
        [0 ... TL16754_PORT_N - 1] = {
: i1 _. Z" x' v$ a9 e% ~, Q3 r5 _                .mapbase        = DA8XX_AEMIF_CS4_BASE,
$ c2 o( s- z- O& C  x                .flags                = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |+ ]" b* t0 a- \) X% n- Y
                                        UPF_IOREMAP | UPF_FIXED_TYPE,0 c. g, p) ^7 [3 a9 O) Q
                .type                = PORT_16654,# G+ p- y# M7 v+ S/ O1 a
                .iotype                = UPIO_MEM,
6 d5 _8 s  e" W6 t3 ?2 t, Y                .regshift        = 0,
$ i% R) C+ W' c' h# n* O9 r                .uartclk        = TL16754_CLK,6 ?, `; S9 X" A+ T5 Q9 v1 ~% |4 |/ x5 g
        },
) e1 A! Q" y* F        {) U+ @. Q! X! O
                .flags        = 0,
5 X$ x8 b( m+ y, o9 `. ~        },- ~1 h6 F3 l/ _+ h& B" l  z
};
: a. P1 J7 [! g, v" l2 S! `( s5 N' h3 B
......' W, _' C+ q3 \1 n
static inline void da850_evm_setup_tl16754(void)
& X# s' h  q; f; J{2 n6 C# e) m2 u8 {/ k. ^
......1 R( P; ~0 M( C" {) H- G: ^
        /* Configure data bus width of CS4 to 8 bit */1 e5 a* L5 y, M2 z
        writel(readl(aemif_addr + DA8XX_AEMIF_CE4CFG_OFFSET) &) A+ V$ Q; }6 p( q0 ~
                (~DA8XX_AEMIF_ASIZE_MASK),
  s0 ^. Q0 L6 Q; d                aemif_addr + DA8XX_AEMIF_CE4CFG_OFFSET);2 ^/ z. x" v8 k$ `( R7 J+ h, B$ I
/ W  _! H- t4 b1 @+ ?/ o' E
        /* setup timing values for a given AEMIF interface */
1 w* y/ s: d6 ^6 L3 d# A. g- S        set = TA(10) | RHOLD(3) | RSTROBE(10) | RSETUP(4) |5 X- E% t6 O: x
                WHOLD(3) | WSTROBE(10) | WSETUP(4);
# e) A4 R9 m5 E2 A0 ~! H9 J0 z4 v
        val = readl(aemif_addr + DA8XX_AEMIF_CE4CFG_OFFSET);
1 W; t* _7 I! ?$ G$ C$ @7 Q        val &= ~TIMING_MASK;
0 _5 l  U4 n; x% u8 u, [        val |= set;2 P6 b0 t9 V( ^9 a3 C* G% V8 \
        writel(val, aemif_addr + DA8XX_AEMIF_CE4CFG_OFFSET);
! p  Y/ C3 M6 Z+ f. u......) K3 l; [- b0 [- R6 n; j
}$ @1 l" Y6 ~' i) v: r: E5 t

" g5 L- o9 X( c2 a4 s  c而且在Menuconfig中已经对+ d) }3 e5 m* ], O8 C% W
CONFIG_SERIAL_8250_EXTENDED 设置为 y
0 |% Z6 ^2 n7 [# g$ E所以此模块函数是被加载的,, {4 x5 C0 b0 _6 ^) z$ x" Y

- K8 t: I( g- |3 T请问下,  serial8250 是给哪个创龙的芯片用的?? 谢谢
作者: 小石    时间: 2017-6-1 19:02
没有问题了,最终有此问题是因为以下帖子的原因,具体解答也有:7 l: }- n+ P  D7 X& W% y% p) k! B
谢谢了
6 w2 D4 Y( m) f0 p1 V5 V$ Rhttp://www.51ele.net/forum.php?m ... &extra=page%3D1
作者: human    时间: 2017-6-2 08:54
厉害




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