嵌入式开发者社区

标题: 在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) {
  f# P: X1 f, J: J' }& n" n        /* Power on the EMIFA */
1 d4 i$ u9 t& G$ [8 t& {        PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_EMIFA, PSC_POWERDOMAIN_ALWAYS_ON,
( X7 x5 J% e5 R9 a6 _* E                        PSC_MDCTL_NEXT_ENABLE);
, {# M2 ^6 e2 ~  O* r9 @7 B# B+ R+ D
2 |( ]0 R7 M" v+ n        /*selects the EMIFA pins for use*/
$ a( D/ {$ A/ @( S        EMIFAPinMuxSetup();
# f* Y  Q% F7 ]4 D5 T( @- e' ~# L9 R! U. @" g- S
        /*set the buswidth of async device connected.  16bit*/
, ~* r! s. [( Z        EMIFAAsyncDevDataBusWidthSelect(SOC_EMIFA_0_REGS,EMIFA_CHIP_SELECT_4,
3 {3 z, `( n: r9 c                                        EMIFA_DATA_BUSWITTH_16BIT);
+ |9 X6 S. V& g# F% a0 Q3 W4 \
/ `* k) H' n* I4 {1 @% w) @        /*selects the aync interface opmode. :Normal Mode*/' k6 T& i& |  j, ]
        EMIFAAsyncDevOpModeSelect(SOC_EMIFA_0_REGS,EMIFA_CHIP_SELECT_4," e& H5 ?  g! Z5 p
        EMIFA_ASYNC_INTERFACE_NORMAL_MODE);# g) Y' t! q: u0 \7 V& R
* a/ O& c9 Y5 V+ a( b+ q4 z9 S$ x6 f
        /*Extended Wait disable.*/% U" O& O- Y/ J9 n$ n
        EMIFAExtendedWaitConfig(SOC_EMIFA_0_REGS,EMIFA_CHIP_SELECT_4,
8 z6 u. s7 K' M/ f" {0 n        EMIFA_EXTENDED_WAIT_DISABLE);
6 h3 M4 \1 n" K6 G( j+ Y6 s# o5 A+ |
        /*configures the wait timing for the device interfaced on CS2
5 @3 \- F& y" x+ ^! y' ^' q5 P2 h        * W_SETUP/W_HOLD W_STROBE/R_STROBE W_HOLD/R_HOLD TA*/' u) G+ F6 \% N9 O% G9 n( }
        EMIFAWaitTimingConfig(SOC_EMIFA_0_REGS, EMIFA_CHIP_SELECT_4,
1 u4 p4 B! S! \) G) n! ?                          EMIFA_ASYNC_WAITTIME_CONFIG(4, 4, 4, 4, 4, 4, 1));) A8 W( L* o5 p2 X  M; D# }! u# Z

% A& v0 U) ~# ~9 ?: S}% [, V, F0 _5 I! x+ q
还有cs4引脚的复用:
% U& ~1 J! `( E0 k5 |7 @SYSCFG_PINMUX7_PINMUX7_11_8- e% h+ C0 G; I* K
( L( Z  o6 @  ]4 A4 l! r
最后结果还是不能通信,请问下,对于EMIF使用CS4片选,还需要做其他工作吗?
. W4 z5 l! o# L/ ~6 }1 \9 O+ K! X谢谢!6 C; A+ \, }3 E, z, C) J
' L7 \& m9 M' ^) ^
  g0 ^* O  I& a) ?2 m

作者: 小石    时间: 2017-5-31 17:39
我看了一下,在创龙给的linux-3.3内核中有对EMIFA CS4的操作,
; c- L% _: z* n& V! W5 K' b#if defined(CONFIG_SERIAL_8250_EXTENDED)) x1 m5 h8 E# R6 C* N2 L! [: S
#define TL16754_CLK                14745600, s- U, X3 h8 A6 U
#define TL16754_PORT_N                8. r" `$ L) M5 p- Y) N! y
......
1 r( N' Q7 z  I0 S* @2 E5 qstatic struct plat_serial8250_port tl16754_serial_pdata[] = {2 d/ {2 N1 E1 O' ]
        [0 ... TL16754_PORT_N - 1] = {8 {* {; f4 ~: q+ x* H2 B& ?
                .mapbase        = DA8XX_AEMIF_CS4_BASE,
2 R7 j8 C' p1 s- }; ?3 E6 Z: P8 r( T) o                .flags                = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |2 ^0 r: h% p1 h7 I4 P; _
                                        UPF_IOREMAP | UPF_FIXED_TYPE,1 E7 t( S( n3 N+ q, B
                .type                = PORT_16654,
3 V5 K6 i- e! N9 b0 P6 a3 Q( W" o                .iotype                = UPIO_MEM,
7 q4 t6 w8 m- ]3 p+ U3 |' Q' [                .regshift        = 0,
8 I' `) N  N: _1 [3 S                .uartclk        = TL16754_CLK,
; S, E0 p% g( i3 c; L3 s        },
0 P1 j+ S% ]& I" Y8 D. c% @( [( D  r        {3 a2 X2 @, \3 z  {' ^$ c$ W
                .flags        = 0,
% p( ~" _* \3 Z4 e! ~        },
6 F- F$ _" O  |, A$ B8 M};
8 P' ?1 R8 V6 K! Z: P
7 o8 v8 X) W6 V; T& q......) x/ M  @1 z6 L' s0 N
static inline void da850_evm_setup_tl16754(void)
5 ^3 J) O+ c0 R5 u6 @{/ j  [% y& T7 r2 Y
......
% C7 T; K* U& ^1 G$ J% c% A( N        /* Configure data bus width of CS4 to 8 bit */
+ P& [4 J6 e3 x# Z2 T" e* @* H# r        writel(readl(aemif_addr + DA8XX_AEMIF_CE4CFG_OFFSET) &% j, n, M8 y1 l! V4 ?. F
                (~DA8XX_AEMIF_ASIZE_MASK),
+ O4 R$ a8 |8 P/ H0 j" ?6 I5 u                aemif_addr + DA8XX_AEMIF_CE4CFG_OFFSET);& L0 V, f: x9 v' T2 Z8 V% C' J! B
7 U! l' R' ^( R6 S( F
        /* setup timing values for a given AEMIF interface */
3 m8 n2 J) v) D! w+ X        set = TA(10) | RHOLD(3) | RSTROBE(10) | RSETUP(4) |" k6 v$ r, S+ \9 ^* _
                WHOLD(3) | WSTROBE(10) | WSETUP(4);! v3 K" l, h8 y! \- l& z' x
' x) b# B+ W. Z. L. s8 `
        val = readl(aemif_addr + DA8XX_AEMIF_CE4CFG_OFFSET);
( N! W- c7 u0 ?4 {        val &= ~TIMING_MASK;) _# m& u/ x, f, G2 [
        val |= set;
) s. S. }9 u2 S% t& h        writel(val, aemif_addr + DA8XX_AEMIF_CE4CFG_OFFSET);
8 T! C$ B0 {  i* C8 ~7 X' S2 A: S......
7 b1 [* G  l8 x3 T) Y}4 W% Y8 m. n' [$ u* C, Y- \$ r

3 ?* E( G4 J: r+ j4 r( Z: X/ H4 h而且在Menuconfig中已经对: K6 b) R: j6 O2 W- m1 u7 n5 d
CONFIG_SERIAL_8250_EXTENDED 设置为 y) \+ _; H9 O1 i) n! P
所以此模块函数是被加载的,
$ ^; L! m  w+ F8 O+ w4 e  A' ]+ v9 F  P0 z
请问下,  serial8250 是给哪个创龙的芯片用的?? 谢谢
作者: 小石    时间: 2017-6-1 19:02
没有问题了,最终有此问题是因为以下帖子的原因,具体解答也有:
# z( a/ ^! |* Q  g1 Q谢谢了6 O& P& Z+ P. S' g
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