嵌入式开发者社区

标题: 在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) {0 ^5 q& S4 x! u- z2 U
        /* Power on the EMIFA */" I/ `9 q) ]* {6 j0 W( D1 j! N
        PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_EMIFA, PSC_POWERDOMAIN_ALWAYS_ON," a8 |- H; }# l
                        PSC_MDCTL_NEXT_ENABLE);4 F- q" ?' ^# T7 t

- O. L- M0 R' E7 ?: A        /*selects the EMIFA pins for use*/; g- p1 E) |+ E! X) \
        EMIFAPinMuxSetup();6 B5 m% e7 o# }% B

, z, w  h* a; a- m, {2 t) A        /*set the buswidth of async device connected.  16bit*/
+ E: j3 h$ D# b$ G6 v3 b% F        EMIFAAsyncDevDataBusWidthSelect(SOC_EMIFA_0_REGS,EMIFA_CHIP_SELECT_4,
0 h/ M) L2 J% w/ f: z* A1 }                                        EMIFA_DATA_BUSWITTH_16BIT);! J0 l8 w# B/ c: D: A

/ U! y0 }6 ]# J4 V        /*selects the aync interface opmode. :Normal Mode*/
7 e  t4 F. [9 m' Z2 _; k        EMIFAAsyncDevOpModeSelect(SOC_EMIFA_0_REGS,EMIFA_CHIP_SELECT_4,
- q; E! _9 `! D; s( b$ S        EMIFA_ASYNC_INTERFACE_NORMAL_MODE);" a) c* ~  D' U- q0 X: z3 ]9 P
7 E. E) H4 K4 k9 N* {8 P0 ?. g; P
        /*Extended Wait disable.*/
2 ]9 {( t; S/ S9 @* l        EMIFAExtendedWaitConfig(SOC_EMIFA_0_REGS,EMIFA_CHIP_SELECT_4,
/ w+ S8 g2 j* P6 R( Z8 F9 \        EMIFA_EXTENDED_WAIT_DISABLE);
" U. z/ }. y) Y; w
- v" v  m4 O7 c4 n  u( h        /*configures the wait timing for the device interfaced on CS2
" p5 n  l! Q+ M        * W_SETUP/W_HOLD W_STROBE/R_STROBE W_HOLD/R_HOLD TA*/) J  A" |! p1 \) r  [  \
        EMIFAWaitTimingConfig(SOC_EMIFA_0_REGS, EMIFA_CHIP_SELECT_4,
6 ]: v# H7 V/ o* T9 T                          EMIFA_ASYNC_WAITTIME_CONFIG(4, 4, 4, 4, 4, 4, 1));+ \8 o3 _1 g- ]3 B- E9 n
: k& C' B8 M5 E. u' w
}$ N( p7 `) |% v
还有cs4引脚的复用:
: ?" j& z* X2 Y" E$ ^. RSYSCFG_PINMUX7_PINMUX7_11_8
+ ?! \* ]( j8 m& c8 t3 r- e: K# c) M& h2 [/ g$ H
最后结果还是不能通信,请问下,对于EMIF使用CS4片选,还需要做其他工作吗?$ ~, L$ p. i" n* l
谢谢!3 N  B! k( y  z- c9 y9 }

9 \( c% a8 u) g5 g0 Q+ k; P7 H8 R3 t

作者: 小石    时间: 2017-5-31 17:39
我看了一下,在创龙给的linux-3.3内核中有对EMIFA CS4的操作,
4 |+ u7 I, a& q6 f' l#if defined(CONFIG_SERIAL_8250_EXTENDED); D" Y2 t5 c& C0 m% Z2 G, |
#define TL16754_CLK                14745600
, e# f4 F1 Z5 f) W  n* w. }#define TL16754_PORT_N                8, S" V9 C6 g# U
......
$ _' J' D/ ^' D1 q; C2 C0 D3 u: P+ _static struct plat_serial8250_port tl16754_serial_pdata[] = {5 O6 x! W& g- J( P
        [0 ... TL16754_PORT_N - 1] = {# t! w, Y; }" e/ y
                .mapbase        = DA8XX_AEMIF_CS4_BASE,
+ x8 @( L2 M& Q0 R* w3 t/ W5 b                .flags                = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |
8 }, t; Q; s: Y                                        UPF_IOREMAP | UPF_FIXED_TYPE,
& a6 v1 p$ I7 K1 r% r! n4 l% }                .type                = PORT_16654,9 L) C+ s1 M5 C& g( n9 Y7 M
                .iotype                = UPIO_MEM,; W' T( j# j- \( L
                .regshift        = 0,; _9 y  P  A' W4 ]( k8 `
                .uartclk        = TL16754_CLK,
7 I& m3 E+ c5 p; n1 y& h+ ]: x        },! b+ s1 e* o) [6 O( z( r
        {
, U6 h4 e, ^7 b6 N# u                .flags        = 0,. e4 b; u* ~: E- e5 [6 C
        },6 w- M; _: E2 Y  K' b1 X6 _
};/ v' [2 w# m& H; x& K

- s/ K5 r7 u! X1 I+ s# K....... k6 @5 P* _  Y- _
static inline void da850_evm_setup_tl16754(void)
3 z7 k) ]2 C5 @# \{
( C* b3 T: @9 L0 }% ^% J0 k......
% F/ f2 {7 ~2 `0 u        /* Configure data bus width of CS4 to 8 bit */
# {, K- R  t3 T' w+ r        writel(readl(aemif_addr + DA8XX_AEMIF_CE4CFG_OFFSET) &6 h! ~- Y+ H! g3 ~) N; K" d
                (~DA8XX_AEMIF_ASIZE_MASK),
0 R' W* Q4 l+ ?                aemif_addr + DA8XX_AEMIF_CE4CFG_OFFSET);% j0 I/ v- V9 w: p" l
8 B4 P" P. ^. t( `- e
        /* setup timing values for a given AEMIF interface */1 O1 c$ R% l. N: T- Z% L
        set = TA(10) | RHOLD(3) | RSTROBE(10) | RSETUP(4) |& j" E7 \7 X: o& c
                WHOLD(3) | WSTROBE(10) | WSETUP(4);
2 q" Y( w5 C+ a/ I" a
% ~  u8 I% P, t        val = readl(aemif_addr + DA8XX_AEMIF_CE4CFG_OFFSET);8 u1 I# w3 j. [7 i
        val &= ~TIMING_MASK;
9 X3 R; L7 _9 z$ |7 Z3 [" n        val |= set;
/ N# @, h8 B2 o, C0 ]8 A7 S        writel(val, aemif_addr + DA8XX_AEMIF_CE4CFG_OFFSET);5 _% W3 ~/ `7 i; O) ]& c5 `3 y
......
/ {# i& O; L3 a- Q- y}
* I. u2 p" e2 G( h7 U! l* W5 Y" Q$ x% c9 F% B- m
而且在Menuconfig中已经对
  ]% M, |& V( k; n& A* q' TCONFIG_SERIAL_8250_EXTENDED 设置为 y
0 Q% o; @3 v) @! g5 {* U8 r所以此模块函数是被加载的,) W% {- q" h, u  w. C

7 h9 d, x3 T2 O3 }; k' S请问下,  serial8250 是给哪个创龙的芯片用的?? 谢谢
作者: 小石    时间: 2017-6-1 19:02
没有问题了,最终有此问题是因为以下帖子的原因,具体解答也有:
6 u9 _( R7 U; q谢谢了% f; }- |4 W4 [( S7 C8 l
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