查看: 96|回复: 3
收起左侧

GD32F303 读LCD寄存器

[复制链接]
     

1

主题

2

帖子

16

积分

实习生

 楼主| 发表于 2017-8-2 17:51 | 显示全部楼层 |返回版面|阅读模式


读LCD控制器的设备信息
  1.     /* read the LCD controller device code:(0x8989) */
  2.     device_code = lcd_register_read(0x0000);
复制代码
具体实现如下:
  1. uint16_t lcd_register_read(uint8_t register_id)
  2. {
  3.     uint16_t data;
  4.     *(__IO uint16_t *) (BANK0_LCD_C)= register_id;
  5.     data = *(__IO uint16_t *) (BANK0_LCD_D);
  6.     return  data;
  7. }
复制代码
其中的定义如下:
  1. #define BANK0_LCD_D         ((uint32_t)0x61000000)    /*!< LCD data address */
  2. #define BANK0_LCD_C         ((uint32_t)0x60000000)    /*!< LCD register address */
复制代码


我就没明白 lcd_register_read() 到底是怎么实现读寄存器的。
首先是向地址 0x60000000 写入了一个寄存器X的地址,然后从 LCD data address 寄存器返回寄存器X的值。
这个过程是由LCD控制器完成查询的?

而GD也也没有给 LCD的 datasheet。

74

主题

3766

帖子

1万

积分

资深工程师

发表于 2017-8-15 19:08 | 显示全部楼层 |返回版面
这个是通过哪种数据总线实现的?
     

1

主题

2

帖子

16

积分

实习生

 楼主| 发表于 2017-8-18 13:13 | 显示全部楼层 |返回版面
shenmu2012 发表于 2017-8-15 19:08
这个是通过哪种数据总线实现的?

文件 gd32f30x.h 中定义如下:
/* peripheral memory map */
#define APB1_BUS_BASE         ((uint32_t)0x40000000U)        /*!< apb1 base address                */
#define APB2_BUS_BASE         ((uint32_t)0x40010000U)        /*!< apb2 base address                */
#define AHB1_BUS_BASE         ((uint32_t)0x40018000U)        /*!< ahb1 base address                */
#define AHB3_BUS_BASE         ((uint32_t)0x60000000U)        /*!< ahb3 base address                */

那应该是 ahb3 地址空间。

0

主题

41

帖子

123

积分

中级技术员

发表于 2017-8-18 16:48 | 显示全部楼层 |返回版面
303并不是支持LCD,而是跟103一样通过外挂存储器控制器来实现驱动LCD的,它把LCD当做一个存储器来操作的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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