野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16300|回复: 1

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

[复制链接]
发表于 2014-11-19 14:27:29 | 显示全部楼层 |阅读模式
本帖最后由 hypratrick 于 2014-11-20 11:18 编辑

我将以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位指针。
还望解惑






回复

使用道具 举报

 楼主| 发表于 2014-11-20 11:19:12 | 显示全部楼层
求高手指点
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-22 07:23 , Processed in 0.030705 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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