在DSP启动EMIFA的CS4片选来进行通信出现问题? - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5644|回复: 3
打印 上一主题 下一主题

[已解决] 在DSP启动EMIFA的CS4片选来进行通信出现问题?

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-5-30 11:10:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
端午节快乐,请教个问题,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) {
$ U) y" q- E* f7 e2 T( T. `3 F        /* Power on the EMIFA */9 u) l" s3 x* {$ e
        PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_EMIFA, PSC_POWERDOMAIN_ALWAYS_ON,) I' G- D; u- U8 L$ B, [. W
                        PSC_MDCTL_NEXT_ENABLE);5 p# `4 S5 `0 v5 _2 k0 A
/ H) I( j% |9 T0 B/ l3 @7 C: I
        /*selects the EMIFA pins for use*/
4 i1 T( o2 \" q- q# f' M* D        EMIFAPinMuxSetup();
( i6 k9 B0 s; Y) S2 J0 B( I8 i/ ]& K+ i) J' _( j; k% n
        /*set the buswidth of async device connected.  16bit*/
3 P. F6 Q' U8 F. R, N) V8 B1 f        EMIFAAsyncDevDataBusWidthSelect(SOC_EMIFA_0_REGS,EMIFA_CHIP_SELECT_4,
" B$ a. g. h: v0 `+ p6 E4 ~                                        EMIFA_DATA_BUSWITTH_16BIT);3 h; A. \% Y1 y0 v0 Q

8 c- H. o9 y' `        /*selects the aync interface opmode. :Normal Mode*/) u! y# Q6 O2 {" C" V  O
        EMIFAAsyncDevOpModeSelect(SOC_EMIFA_0_REGS,EMIFA_CHIP_SELECT_4,6 r0 |: ]& _4 X( j# H5 S
        EMIFA_ASYNC_INTERFACE_NORMAL_MODE);( P3 x, l" j' n* ^( X/ ^

# |: k' {. |) |0 j        /*Extended Wait disable.*/4 l* s% Q+ F" o6 n$ A
        EMIFAExtendedWaitConfig(SOC_EMIFA_0_REGS,EMIFA_CHIP_SELECT_4,% I% _  _+ Y9 ]3 a2 l" |" Y  e3 i
        EMIFA_EXTENDED_WAIT_DISABLE);( m  m0 K+ d, ^. ?. J8 f* d5 `

! y: i" L! t4 Z/ T4 O7 ]/ j        /*configures the wait timing for the device interfaced on CS2" |5 l5 `1 H  X* }2 H  K! o3 I
        * W_SETUP/W_HOLD W_STROBE/R_STROBE W_HOLD/R_HOLD TA*/
0 u8 B( B4 h  n) ?        EMIFAWaitTimingConfig(SOC_EMIFA_0_REGS, EMIFA_CHIP_SELECT_4,/ Z' W& V: F: W8 A0 ^3 O) V
                          EMIFA_ASYNC_WAITTIME_CONFIG(4, 4, 4, 4, 4, 4, 1));
% b2 D; N. Z% z2 ^9 M
, u6 V! J' W4 m}
1 U3 K# Z2 e( A3 {. A1 x还有cs4引脚的复用:
; s6 C% \9 r" v# N! i7 BSYSCFG_PINMUX7_PINMUX7_11_89 o3 a1 h4 s1 N, ^
! [  C0 G( t0 D/ L# G3 t9 O9 G0 X
最后结果还是不能通信,请问下,对于EMIF使用CS4片选,还需要做其他工作吗?
% B0 l" H# |+ f* v' b' U9 G( s谢谢!4 D8 d7 G! W' [( k) x

& z# O! x5 o- h: s
4 h: w) J% ?- K! T9 C0 b1 z' y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
沙发
 楼主| 发表于 2017-5-31 17:39:17 | 只看该作者
我看了一下,在创龙给的linux-3.3内核中有对EMIFA CS4的操作,4 s9 }% |1 m2 ?
#if defined(CONFIG_SERIAL_8250_EXTENDED)9 f6 _/ D5 n4 }
#define TL16754_CLK                14745600
" e7 i  h+ u3 N  n& G#define TL16754_PORT_N                8
- x4 \  [) }  B......
* n# P4 c- K9 j; j: `5 v9 R8 P( vstatic struct plat_serial8250_port tl16754_serial_pdata[] = {! f( [6 t9 R, T
        [0 ... TL16754_PORT_N - 1] = {' G% w* f: [( |+ e3 m9 k7 g
                .mapbase        = DA8XX_AEMIF_CS4_BASE,, {6 t% _/ A. k: y# b, ?
                .flags                = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |: K4 M+ Z1 ^7 ]- ^" Y) V' w; N; c! ^
                                        UPF_IOREMAP | UPF_FIXED_TYPE,/ A+ @3 ?9 [9 h0 f0 l# T0 u8 O
                .type                = PORT_16654,
* w& \! g4 q2 b2 \: T                .iotype                = UPIO_MEM,
/ W6 p) L% j; b                .regshift        = 0,
' [- v2 {# Y1 [4 ~8 u" J                .uartclk        = TL16754_CLK,2 L  y. a0 X0 \# P5 b7 R
        },
& i6 v1 v0 [7 i9 ~        {& U0 B6 u8 S* C1 w
                .flags        = 0,: r" {1 `( p& N1 k+ P$ O7 w
        },9 ?+ E0 m! i8 U7 ^& J; t
};
) r8 Q: \/ `/ \
/ ^0 q, y6 u  @/ t& [% j......: _$ T7 T, d! Y  R, [1 W' h; J
static inline void da850_evm_setup_tl16754(void)
3 J0 j/ H4 p8 m# k, J{/ g3 l) O+ `* K2 m. k
......5 v# D, z( I1 m
        /* Configure data bus width of CS4 to 8 bit */! Y& u3 P# J$ i1 t$ w
        writel(readl(aemif_addr + DA8XX_AEMIF_CE4CFG_OFFSET) &4 m3 p5 S  h' l. ~
                (~DA8XX_AEMIF_ASIZE_MASK),9 u! _* l/ c# ?5 e2 n
                aemif_addr + DA8XX_AEMIF_CE4CFG_OFFSET);% u, b# `; p5 Y& t; D" o: f. T

8 }' u1 i0 W0 O2 }1 I. Y0 W7 i+ n        /* setup timing values for a given AEMIF interface */; T% P* R6 O2 W
        set = TA(10) | RHOLD(3) | RSTROBE(10) | RSETUP(4) |9 ^& R% I5 p" S# a8 r: Y' V
                WHOLD(3) | WSTROBE(10) | WSETUP(4);' X5 B* _" i& H5 U

2 T" y2 J4 f' n2 E% h# N! x- ?        val = readl(aemif_addr + DA8XX_AEMIF_CE4CFG_OFFSET);; }, X/ x. f. N
        val &= ~TIMING_MASK;
+ T. _9 q2 o$ F! S, B: h        val |= set;5 G, A- R- d5 \( o7 `
        writel(val, aemif_addr + DA8XX_AEMIF_CE4CFG_OFFSET);
9 A( t6 z/ y' [! @: i......
# E/ t/ V" T7 Z: @$ N! l}
9 ~  V5 M1 ~) E* _6 M9 g
/ X1 o3 V2 l& X- w' \而且在Menuconfig中已经对  u( }$ d0 e, v' ^# }/ X+ n
CONFIG_SERIAL_8250_EXTENDED 设置为 y; M+ ], t2 E  J. {
所以此模块函数是被加载的,
+ a" B# F& `# `4 N
8 }' Q! ?" l) k: n$ z/ d5 v" a8 t7 E+ _请问下,  serial8250 是给哪个创龙的芯片用的?? 谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
板凳
 楼主| 发表于 2017-6-1 19:02:17 | 只看该作者
没有问题了,最终有此问题是因为以下帖子的原因,具体解答也有:" [  G8 i* f+ Y6 I5 G, y
谢谢了- Q* U6 Y- v" l- ]
http://www.51ele.net/forum.php?m ... &extra=page%3D1
回复 支持 反对

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
地板
发表于 2017-6-2 08:54:31 | 只看该作者
厉害
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-8-3 09:29 , Processed in 0.037695 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表