我将以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] |