嵌入式开发者社区

标题: 在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) {+ R' V: I$ q& Z
        /* Power on the EMIFA */
3 _  N- Y" ~: G        PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_EMIFA, PSC_POWERDOMAIN_ALWAYS_ON,
* Y* [. `: z) m7 F8 ]$ n                        PSC_MDCTL_NEXT_ENABLE);& |, ^8 r8 h5 T) @0 e/ w8 j
8 R! {* `9 _: N5 C' f+ b
        /*selects the EMIFA pins for use*/
# @' B  @5 K& N/ }- V        EMIFAPinMuxSetup();! G+ O# |, t( Z0 t. {6 f; Z+ _

( {' z4 U" j( b        /*set the buswidth of async device connected.  16bit*/0 [0 g- H. N- `3 a" a- `
        EMIFAAsyncDevDataBusWidthSelect(SOC_EMIFA_0_REGS,EMIFA_CHIP_SELECT_4,6 N% Q* [! e: i6 n4 c$ r
                                        EMIFA_DATA_BUSWITTH_16BIT);* U$ d* n# \7 ?& o
0 o( A3 u$ L- H; q0 [
        /*selects the aync interface opmode. :Normal Mode*/) o: |1 I) d) p3 o' `8 h* Q! @0 J& Z2 F
        EMIFAAsyncDevOpModeSelect(SOC_EMIFA_0_REGS,EMIFA_CHIP_SELECT_4,! J, d% B: q$ S: e, [+ h
        EMIFA_ASYNC_INTERFACE_NORMAL_MODE);( w6 j$ K3 o" U: _+ h

4 ^% D3 ^/ h% \& m0 u        /*Extended Wait disable.*/
) a: M. z9 w- r' R) I, Z        EMIFAExtendedWaitConfig(SOC_EMIFA_0_REGS,EMIFA_CHIP_SELECT_4,
1 H% C3 U. m; r        EMIFA_EXTENDED_WAIT_DISABLE);1 x3 V/ Q# K9 ~

* y( a/ y# b% l6 M1 w6 \( e, [        /*configures the wait timing for the device interfaced on CS2
' i8 s8 \0 h. U! M- y: k; _6 B        * W_SETUP/W_HOLD W_STROBE/R_STROBE W_HOLD/R_HOLD TA*/
: D/ H0 u" h# ?4 x        EMIFAWaitTimingConfig(SOC_EMIFA_0_REGS, EMIFA_CHIP_SELECT_4,  ?3 H. {* P# F* r7 O+ q; D
                          EMIFA_ASYNC_WAITTIME_CONFIG(4, 4, 4, 4, 4, 4, 1));" n$ ?" |4 \8 |4 ^! y# l; q  [4 L
+ N/ P3 D' A. Q% Q- J* T. H
}
: |: W6 N0 g& n5 _! \4 q还有cs4引脚的复用:! o' L# j) C' @! u* W+ {5 B
SYSCFG_PINMUX7_PINMUX7_11_8  N6 A' o7 D. t4 X1 D
5 z9 ~0 G! X* f+ x& r2 J5 I3 q. i
最后结果还是不能通信,请问下,对于EMIF使用CS4片选,还需要做其他工作吗?4 @: [# m5 n0 t; {: Y$ y" J: M
谢谢!$ P# X; c% h$ ~

. j' P% @5 z7 y9 V' d# h/ @# C: a9 d& ^' o* N; K' l

作者: 小石    时间: 2017-5-31 17:39
我看了一下,在创龙给的linux-3.3内核中有对EMIFA CS4的操作,! i& a; @2 S  l$ L* ?
#if defined(CONFIG_SERIAL_8250_EXTENDED)
5 t+ l0 _$ i2 t; q0 {* r2 Z0 `5 u  c#define TL16754_CLK                14745600
0 A0 m4 }4 f5 g* n# A+ ~#define TL16754_PORT_N                8& U0 ~5 Q5 @( m
......
0 b, ]! Y5 B# c1 f5 `7 nstatic struct plat_serial8250_port tl16754_serial_pdata[] = {: z2 T5 G$ e9 E' u6 N* N6 c
        [0 ... TL16754_PORT_N - 1] = {
: D" s4 U7 r  o' l5 g                .mapbase        = DA8XX_AEMIF_CS4_BASE,
) ^0 j& i% P/ I                .flags                = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |
" k$ J9 M% r8 T) l                                        UPF_IOREMAP | UPF_FIXED_TYPE,
' m' z7 R3 u% d/ l0 t                .type                = PORT_16654,9 R( C  l  b& \0 P, q( J" E
                .iotype                = UPIO_MEM,
8 q4 G+ Q1 v( v) e! Y6 P                .regshift        = 0,& s7 x! C' j: I+ v6 Z1 t8 m$ x
                .uartclk        = TL16754_CLK,
  c1 Z. X% j9 u8 O5 S        },
2 b) {. [6 B* Z# N$ c/ X$ K4 ~        {( a/ B) a9 p% M# t8 }# G" X; q" C
                .flags        = 0,
7 }* J. t# h, u' f7 S        },
# J1 w( y) M: N5 q. ]* C( B};
6 ~5 j( k# z: k5 F2 V4 e) O# R4 S) e  @0 K' [6 X+ R
......
7 \( G" p& {  L0 T3 A: W$ P9 J3 Cstatic inline void da850_evm_setup_tl16754(void)
* E' [3 W' i  J7 I/ ?{( C. j! a. S: i/ K3 Y! T: Z& |
......  `5 x! ]$ ]) e& T8 J0 j7 N
        /* Configure data bus width of CS4 to 8 bit */$ [) Z8 X/ H6 E$ V+ K1 G
        writel(readl(aemif_addr + DA8XX_AEMIF_CE4CFG_OFFSET) &
  w7 |& I, _) Z1 l1 G                (~DA8XX_AEMIF_ASIZE_MASK),( s$ a! a* |6 e8 ]7 T
                aemif_addr + DA8XX_AEMIF_CE4CFG_OFFSET);$ g' z9 @0 M2 _4 E5 |1 n

! u' H" T9 Y4 a2 V1 m4 _& A* ?        /* setup timing values for a given AEMIF interface */1 Y$ ^1 I3 Z1 U
        set = TA(10) | RHOLD(3) | RSTROBE(10) | RSETUP(4) |
' t( ]5 a) O0 n" C0 c4 K! o                WHOLD(3) | WSTROBE(10) | WSETUP(4);3 u9 Z) u2 y) L
3 T# r; m3 A. [+ f
        val = readl(aemif_addr + DA8XX_AEMIF_CE4CFG_OFFSET);
; b0 i/ z3 r% Q2 ~' ~! i        val &= ~TIMING_MASK;
  k- N9 E: J* D  f( R, l, d        val |= set;3 X) B5 V2 c% _) @* @0 x7 T7 H" j
        writel(val, aemif_addr + DA8XX_AEMIF_CE4CFG_OFFSET);) I2 @3 s5 M" w# H
......9 x2 d" B7 x- }/ j5 Y6 w7 }
}5 X9 i9 j+ v( L" n
( f& o4 @( Y, G$ S  ~
而且在Menuconfig中已经对
$ Q9 i% J# S* {2 T6 pCONFIG_SERIAL_8250_EXTENDED 设置为 y
) `0 e# X7 u  l所以此模块函数是被加载的,& y9 e6 {' E9 e" N
# u1 k. v, i  e) y' T6 U& q
请问下,  serial8250 是给哪个创龙的芯片用的?? 谢谢
作者: 小石    时间: 2017-6-1 19:02
没有问题了,最终有此问题是因为以下帖子的原因,具体解答也有:5 F5 |5 R. u2 p5 H" z$ A
谢谢了
7 m  z- Z) o% @$ `  J! k, C6 ohttp://www.51ele.net/forum.php?m ... &extra=page%3D1
作者: human    时间: 2017-6-2 08:54
厉害




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