14677|31

105

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

STM32关于FSMC连接LCD例程:怎么确定片外的寄存器地址? [复制链接]



Keil4自带的demo: STM32F103VE用FSMC驱动LCD AM-240320L8TNQW00H(ILI9320),在lcd.c里有:
typedef struct
{
  __IO uint16_t LCD_REG;
  __IO uint16_t LCD_RAM;
} LCD_TypeDef;

#define LCD_BASE    ((uint32_t)(0x60000000 | 0x0C000000))
#define LCD         ((LCD_TypeDef *) LCD_BASE)

第一个define好理解:LCD连接的是FSMC_Bank1_NOR/SRAM4,映射到FSMC的memory为0x6C00 0000 - 0x6FFF FFFF,共64MByte。
但第二个define该怎么理解呢,为什么LCD_REG(寄存器序号)地址为0x6C00 0000、LCD_RAM(该寄存器的值)地址为0x6C00 0001?

对于写寄存器,代码里有:
#define R1             0x01
LCD_WriteReg(R1, 0x0100);
uint16_t LCD_ReadReg(uint8_t LCD_Reg)
{
  LCD->LCD_REG = LCD_Reg;
  return (LCD->LCD_RAM);
}
MCU和LCD的通讯,从ILI9320 DS里的时序图可知是:先CS=0,RS=0,WR=0写IR,然后使CS=0,RS=1,WR=0再写index是IR值的寄存器(RS=1时不时写RAM么?不懂),而对于上面的LCD_WriteReg()语句,就是先往地址为0x6C00 0000的地方写0x01、再往地址为0x6C00 0001的地方写0x0100,中间也没有CS/RS/WR的设置,LCD_REG怎么就成了IR寄存器呢、LCD_RAM怎么就成了IR索引的那个寄存器呢?

请高手指教。
附图:问题中提到的demo所用的电路图:  




AN2790.JPG
此帖出自stm32/stm8论坛

最新回复

我也想知道啊,哪位大侠再说详细点  详情 回复 发表于 2012-7-10 19:53
点赞 关注
 

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
LCD_WriteReg(R1, 0x0100);   我觉得是 R1 地址 写入数据0x100;
LCD_ReadReg                        从寄存器里读数据
此帖出自stm32/stm8论坛
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
版主主、列为大虾兄,给个话3
我知道之前有个帖子和我这个问题相似,但说的不是一个事
此帖出自stm32/stm8论坛
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 A0的电平   驱动的 RS 和你的LCD 操作有关系
此帖出自stm32/stm8论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

5
 
                                 看的不是很明白,还是希望高手解答下
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

6
 
为什么LCD_REG(寄存器序号)地址为0x6C00 0000、LCD_RAM(该寄存器的值)地址为0x6C00 0001?

是这样:因为是16位的,LCD_REG地址为0x6C00 0000,LCD_RAM(该寄存器的值)地址为0x6C00 0002
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

7
 
                                 4楼已经给出了答案。
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

8
 
对于上面的LCD_WriteReg()语句,就是先往地址为0x6C00 0000的地方写0x01、再往地址为0x6C00 0001的地方写0x0100,中间也没有CS/RS/WR的设置

回答:
1. 无论往LCD_REG还是LCD_RAM写入、读出,片选CS都会变低
2.  电路图中RS接A0,所以往LCD_REG写入时 RS为0,往往LCD_RAM写入、读出时 RS为1
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

9
 
对于LCD_WriteReg(R1, 0x0200);过程应该是:MCU先通过interface将R1(0x01)写入LCD控制器的IR寄存器,然后MCU再通过interface将值0x0200写入LCD控制器中索引值为0x01的寄存器。
对于MCU的片内各外设的寄存器,每个都有确定地址,在datasheet里查得到,访问它们就是对某地址的读写。但这里,IR寄存器和索引值为0x01的寄存器都在MCU外,如何访问它们呢,对于FSMC来说,是把他们的统统映射到0x6C00 0000 - 0x6FFF FFFF区域,但这片区域怎么对应LCD控制器的一堆寄存器和RAM呢?看起来IR是对应0x6C00 0000,这依据的是什么呢?0x6C00 0002又是依据什么映射哪个寄存器呢?
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

10
 
                                 4楼说的太浓缩,能稀释一下吗
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

11
 
                                 lcd 的RS脚电平0、1  关系到你对lcd的操作,0x6C00 0001,0x6C00 0000  中的1,0 是对RS脚的电平操作
此帖出自stm32/stm8论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

12
 
4楼说的太浓缩,能稀释一下吗
8楼已经稀释了。
此帖出自stm32/stm8论坛
 
 
 

回复

50

帖子

0

TA的资源

一粒金砂(初级)

13
 
                                 对你有用的部分 仅仅是0x6C00 0001,0x6C00 0000    地址 其余统统没用 ,你需要看一下单片机总线方面的资料
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

14
 
                                 MCU往0x6C00 0000地址写0x01,片外的LCD从接口数据线的16bit收到这个值,但它怎么就知道该把这个值送给IR寄存器呢,FSMC只把0x6C00 0000 - 0x6FFF FFFF映射给了LCD,但也没说0x6C00 0000就是IR寄存器呀
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

15
 
0x6C00 0000    相当于给你的LCD脚RS 低电平  
0x6C00 0001   相当于给你的LCD脚RS 高电平

然后看你的资料  RS  电平不同 操作的内容是不同的
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

16
 


根据ILI9320的手册,RS=0就是对IR寄存器写或者对SR寄存器读,RS=1就是对其它寄存器或者RAM写、读。

电路图上RS接A0,所以RS=0就对应于地址0x6C00 0000或者0x6C00 0004、0x6C00 0008...;所以RS=1就对应于地址0x6C00 0002或者0x6C00 0006、0x6C00 000A...。

对地址0x6C00 0000或者0x6C00 0004写就是对IR寄存器写,对地址0x6C00 0000或者0x6C00 0004读就是对SR寄存器读。

对地址0x6C00 0002或者0x6C00 0006写、读就是对其它寄存器写、读,到底是对哪个寄存器读写?这取决于IR寄存器的值。通常在读写其它寄存器前,对IR寄存器执行写操作来设定IR寄存器的值。

ILI9320 Regs.png (26.97 KB)

ILI9320 Regs.png

此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

17
 
                                 0x6C00 0000、0x6C00 0001不是通过D[0...15]这16bit发给LCD的么,RS接的A0,MCU对A0没有明显的设置呀,A0怎么就知道把自己置高、低电平呢……
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

18
 
                                 请按照13楼的提示“你需要看一下单片机总线方面的资料”,你问的问题说明你没有这方面的基础。
此帖出自stm32/stm8论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

19
 
                                 0x6C00 0000  0x6C00 0001  地址线的电平
此帖出自stm32/stm8论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

20
 
                                 A0-A15       “C语言要加强一下!”  你没理解“ #define LCD         ((LCD_TypeDef *) LCD_BASE) ”
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表