嵌入式开发者社区

标题: 在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) {, E4 E, f) X0 \0 p8 N9 `$ Z
        /* Power on the EMIFA */# P2 S" W3 K* F8 V- X8 m1 [! u
        PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_EMIFA, PSC_POWERDOMAIN_ALWAYS_ON,
! q6 p1 t; e& x; n                        PSC_MDCTL_NEXT_ENABLE);
/ u5 x) l. u( J) W2 e: O8 W- G& A+ V2 u+ @7 `4 ?5 G$ B* o/ Z0 S, W
        /*selects the EMIFA pins for use*/$ z: Y8 o) Q$ t+ [9 N
        EMIFAPinMuxSetup();
! B- N: y2 `. ?% }- }
0 Q8 g) x- v& b3 b9 g4 B+ I        /*set the buswidth of async device connected.  16bit*/
0 ]/ G4 @1 U; n( p- ~        EMIFAAsyncDevDataBusWidthSelect(SOC_EMIFA_0_REGS,EMIFA_CHIP_SELECT_4,1 g# [! ?6 F# [, P, C8 b4 W' y
                                        EMIFA_DATA_BUSWITTH_16BIT);2 I5 c; e5 f3 b8 a8 g$ s

) _: M& P2 _% M5 g9 y8 s, j* f        /*selects the aync interface opmode. :Normal Mode*/
. K% y5 G. R8 N. u- e' {; x- u8 t        EMIFAAsyncDevOpModeSelect(SOC_EMIFA_0_REGS,EMIFA_CHIP_SELECT_4,
1 o; L4 J3 p) l( Z8 B        EMIFA_ASYNC_INTERFACE_NORMAL_MODE);
' A  L1 \& `% u8 [" y) U2 q
" w6 Y0 c# @! p' N  v/ X        /*Extended Wait disable.*/" p4 z' O! N* e
        EMIFAExtendedWaitConfig(SOC_EMIFA_0_REGS,EMIFA_CHIP_SELECT_4,
3 ?3 @! e7 A% [! x8 H        EMIFA_EXTENDED_WAIT_DISABLE);
) H0 f! k: v$ `, }: h* K9 }- M9 k* Y5 T$ V2 a- s# X2 [7 ~
        /*configures the wait timing for the device interfaced on CS2
8 f8 P: w$ ?- @; f% b9 x( [) }        * W_SETUP/W_HOLD W_STROBE/R_STROBE W_HOLD/R_HOLD TA*/% @$ s! ?+ u2 @# h4 U. v2 J6 D+ [8 Z
        EMIFAWaitTimingConfig(SOC_EMIFA_0_REGS, EMIFA_CHIP_SELECT_4,
& h. f& s8 n& Y* \; U                          EMIFA_ASYNC_WAITTIME_CONFIG(4, 4, 4, 4, 4, 4, 1));
* Q) i( f) b; B
9 B% r. G+ |5 m$ `8 V+ K6 m- V}6 _" h; c& P8 o- O! P8 M' F. D
还有cs4引脚的复用:
- }/ w2 ^) e: Z# RSYSCFG_PINMUX7_PINMUX7_11_8* W0 a0 @5 T% S: D/ Z
, p# R- E  z9 u. R' G
最后结果还是不能通信,请问下,对于EMIF使用CS4片选,还需要做其他工作吗?8 q& J. k9 {8 z" p0 J& x
谢谢!
$ g9 {. H' [" L2 q; Y* b: i+ y
6 b- m- k5 P: [- {) X1 H
7 @5 {+ M( _' j2 x
作者: 小石    时间: 2017-5-31 17:39
我看了一下,在创龙给的linux-3.3内核中有对EMIFA CS4的操作,8 z3 c/ f: g) @, J- I
#if defined(CONFIG_SERIAL_8250_EXTENDED)
+ H8 b; w3 j! \1 j* H#define TL16754_CLK                14745600
9 ], [6 y; w5 H#define TL16754_PORT_N                8! {9 s; F3 q+ J. X
......& @3 X0 x- z, n+ Z7 H4 H' S; R+ y
static struct plat_serial8250_port tl16754_serial_pdata[] = {
7 a6 W7 {# Q( I, _3 k        [0 ... TL16754_PORT_N - 1] = {
2 z" Z, U! a) ]                .mapbase        = DA8XX_AEMIF_CS4_BASE,
0 u5 l0 @4 e9 M/ l0 l7 I% o$ q                .flags                = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |
# V: c  P6 B9 e# S3 t1 r9 \                                        UPF_IOREMAP | UPF_FIXED_TYPE,
$ w% f" n1 j" d7 Z$ i                .type                = PORT_16654,& v. g& T: L4 d
                .iotype                = UPIO_MEM,
! X5 b& t6 b( F5 d* _0 ^/ V                .regshift        = 0,4 p. R* c3 c7 P  {: M7 r
                .uartclk        = TL16754_CLK,
4 s# n% Y4 h6 H        },* N# E1 L& {. b2 j
        {
6 s; ]/ u# O, `* q# [9 t8 J                .flags        = 0,
+ @( w: B* K+ j        },: @8 H# |* l- h4 V1 P7 ?
};
/ g4 x% w1 o: Z8 X7 }
, c4 k  p, H. ?, b......
* @+ i# A, V% `0 h& r0 [! Cstatic inline void da850_evm_setup_tl16754(void)
( Y4 r0 @5 {' B. Q& t# A5 E{* y1 u# _9 h7 h( p/ g
......
( R( K/ i# `: n7 j" e        /* Configure data bus width of CS4 to 8 bit */
6 I/ V5 k% h) f% Z9 h2 a  Q# J. m* @        writel(readl(aemif_addr + DA8XX_AEMIF_CE4CFG_OFFSET) &
( r/ _8 p+ L( y                (~DA8XX_AEMIF_ASIZE_MASK),9 J# z& _! ^  C$ }8 F' E$ K
                aemif_addr + DA8XX_AEMIF_CE4CFG_OFFSET);
& [. i) i! C$ X  Y8 b+ Y1 D0 F* W& }, X' k
        /* setup timing values for a given AEMIF interface */2 G8 y6 W( P% z, K+ l
        set = TA(10) | RHOLD(3) | RSTROBE(10) | RSETUP(4) |" n8 G6 \& ~6 [) `1 n
                WHOLD(3) | WSTROBE(10) | WSETUP(4);7 R0 }/ [! B2 S( z0 H7 a
# v. m, j8 r' l5 N. w8 ]
        val = readl(aemif_addr + DA8XX_AEMIF_CE4CFG_OFFSET);! k- _9 G% \; G0 @& W% \4 S# T! |
        val &= ~TIMING_MASK;# a# ?' ?" c; k/ W# M( [$ F* U
        val |= set;
& r5 ^" Z4 G" j( U. I  \        writel(val, aemif_addr + DA8XX_AEMIF_CE4CFG_OFFSET);" b1 G' v/ R/ I* I
......
5 T0 m3 @+ z7 K/ i' I}, b1 b: |1 O/ Q, ?
! }1 q) V7 F/ D& U- Y
而且在Menuconfig中已经对7 K3 y2 f# V6 d4 F2 ]' O2 y
CONFIG_SERIAL_8250_EXTENDED 设置为 y
7 V( R/ ]+ E  o; o% S所以此模块函数是被加载的,- }$ X5 \2 _* d) h

" M+ ?6 E6 ]9 B. M请问下,  serial8250 是给哪个创龙的芯片用的?? 谢谢
作者: 小石    时间: 2017-6-1 19:02
没有问题了,最终有此问题是因为以下帖子的原因,具体解答也有:
- n: l$ n# y  e  O9 k谢谢了2 a7 U! n- s2 f. ~6 V
http://www.51ele.net/forum.php?m ... &extra=page%3D1
作者: human    时间: 2017-6-2 08:54
厉害




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