打印

请教高手解惑:关于FSMC驱动8bit bus lcd的问题

[复制链接]
413|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
香菇选手|  楼主 | 2018-6-15 17:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我将以ILI9341为驱动芯片的TFT屏接口设置为:8080 MCU 8BIT bus 采用register-content 命令模式

那我将如下设置STM32F103的FSMC:我的理解是:由于LCD采用的是8位并行口,那么我的FSMC也要将数据宽度设置成8位宽度

/***************************************************************************************

2^26 =0X0400 0000 = 64MB,每个 BANK 有4*64MB = 256MB

64MB:FSMC_Bank1_NORSRAM1:0X6000 0000 ~ 0X63FF FFFF -->NE1 **

64MB:FSMC_Bank1_NORSRAM2:0X6400 0000 ~ 0X67FF FFFF -->NE2

64MB:FSMC_Bank1_NORSRAM3:0X6800 0000 ~ 0X6BFF FFFF -->NE3

64MB:FSMC_Bank1_NORSRAM4:0X6C00 0000 ~ 0X6FFF FFFF -->NE4



选择BANK1-BORSRAM1 连接 TFT,地址范围为0X6000 0000 ~ 0X3FFF FFFF

FSMC_A16 接LCD的RS(寄存器/数据选择)脚

寄存器基地址 = 0X6000 0000

外部存储器为8位时: RAM基地址 = 0X6001 0000 = 0X6000 0000+2^16 = 0X6000 0000 + 0X001 0000 = 0X6001 0000

当选择不同的地址线时,地址要重新计算  

****************************************************************************************/





#define Bank1_LCD_C    ((u32)0x60000000)

#define Bank1_LCD_D    ((u32)0x60010000)       //Disp Data ADDR       // A16 PE2



/*选定LCD指定寄存器*/

#define LCD_WR_REG(index)    ((*(__IO u8 *) (Bank1_LCD_C)) = ((u8)index))

/*往LCD GRAM写入数据*/

#define LCD_WR_Data(val)       ((*(__IO u8 *) (Bank1_LCD_D)) = ((u8)(val)))



#define LCD_RD_Data(val)                (val = *(__IO u8 *)(Bank1_LCD_D))





疑问在这里:我应不应该将Bank1_LCD_C强制转换成8位的指针,还是应该强制转换成16位的指针,

原来的代码是16的指针,但FSMC用的是16位的宽度,TFT屏用的是不是16位的bus就不清楚了。

但我现在FSMC的宽度设置为8,是不是要强制转换成8位的指针?

或者说Bank1_LCD_C要设置为16位还是8位的指针其实是要看ILI9341的总线宽度呢,而跟FSMC的宽度无关?

如果ILI9341是16位的总线,则要设为16位的指针,若是8位的则设置为8位指针。

还望解惑













[/td][/tr][/table]

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

450

主题

462

帖子

0

粉丝