(琢磨了一天的结果,不知道各位意见如何~)
1、“写寄存器”是什么意思?
“写寄存器”是指给LCD发送命令,命令内容为寄存器编号、指令等等(本质上也是数据,因为是通过数据口传送的),“写数据”是指给LCD发送数据,内容为寄存器配置值、GRAM颜色数据等等。
2、利用FSMC外扩SRAM的意义:
FSMC模块完成了对通讯协议和物理导线的封装,意思是把对外存的写入简化为对内存变量的赋值,让我们可以忽略数据传输时序和物理的各种功能脚的连接。而我们把SRAM偷换成了LCD时,对于FSMC模块来说仍是写SRAM,但实际上写的是LCD,好像FSMC被骗了一样。
3、为什么写命令或写数据只需给结构体成员赋值?
LCD结构体的第一个成员(用于存储命令)被定义在特定地址上,该地址对应于外部SRAM的某存储地址(以FSMC的视角看),如果要对这个成员写入一个值,在物理上必须通过通讯接口发送到SRAM芯片的对应内存位置来存储,由于FSMC模块对通讯的封装,使得这个过程被简化为对变量的赋值,让我们可以忽略数据传输时序和物理的各种功能脚的连接。我们给该成员赋值时,实际上是由FSMC模块自动控制使IO口产生规定的写操作时序,期间地址IO口变成应有地址,使得RS引脚为0(虽然FSMC以为自己是在表达要写入的SRAM内存地址,但对LCD来说意思是将要发送的数据是个LCD控制命令),数据口变成我想发送的命令数据值(本质也是数据,但是有效位是8位。虽然FSMC的数据口定义成了16位,但是没关系,8位已经自然地右对齐了),FSMC以为完成了对第一个成员的存储器对应地址的写入,事实上完成了对LCD的命令发送。
当给LCD结构体的第二个成员(用于存储数据)写值时,FSMC控制地址IO口变成对应的地址,使得RS为1(对LCD来说意思是要发数据了),数据口变成要写入的数据值,FSMC以为完成了对第二个成员的存储器对应地址的写入,事实上完成了对LCD的数据发送。