fsmc地址复用和直接地址
时间: 2024-01-29 15:09:36 浏览: 38
FSMC(Flexible Static Memory Controller)是一种用于控制外部存储器的接口,可以实现在AHB地址上写入数据。在地址复用模式下,FSMC可以通过A[]引脚输出等价于AHB上的地址,并通过D端口输出数据。通过配置FSMC控制寄存器,可以自动控制时序。
在地址复用模式下,对于LCD等设备来说,地址是没有用的。可以使用一个32位寄存器来组合一个地址的某一位和紧挨着这个地址的前n个地址。其中前16位用于写指令,后16位用于写数据。可以将这两个16位变量组合成一个结构体,并通过typedef*来指定地址。通过这个虚拟寄存器,可以发送指令和收发数据。
直接地址模式下,FSMC直接使用AHB地址进行读写操作,不需要进行地址复用。
以下是fsmc地址复用和直接地址的示例代码:
1. fsmc地址复用模式:
```c
typedef struct {
uint16_t instruction;
uint16_t data;
} LCD_Register;
#define LCD_REG ((LCD_Register *)0x60000000)
void send_instruction(uint16_t instruction) {
LCD_REG->instruction = instruction;
}
void send_data(uint16_t data) {
LCD_REG->data = data;
}
```
2. fsmc直接地址模式:
```c
#define LCD_ADDRESS ((uint16_t *)0x60000000)
void send_instruction(uint16_t instruction) {
*LCD_ADDRESS = instruction;
}
void send_data(uint16_t data) {
*LCD_ADDRESS = data;
}
```