新手入门
- 积分
- 16
- 金钱
- 16
- 注册时间
- 2017-12-6
- 在线时间
- 4 小时
|
1金钱
我采用 STM32F769 FMC实现8080接口, A0作为command 和数据的选择。我采用的是BANK 1,数据宽度是16bit,发现我写一个地址或者数据的时候,
A0会跳转8下。理论上,写一个COMMAND,A0保持为低, 写一个DATA,A0保持为高。应该跳转。但是抓到的波形是,写一个cmd,执行一条LCD_WR_REG, A0会高低高低翻动8次。
求大侠指导。
程序如下:
#define DATA_ADDR 0x60000002
#define CMD_ADDR 0x60000000
#define LCD_WR_REG(cmd) (*(volatile uint16_t *)(CMD_ADDR)) = (cmd)
#define LCD_WR_DATA(val) (*(volatile uint16_t *)(DATA_ADDR)) = (val)
#define LCD_RD_DATA() (*(volatile uint16_t *)(DATA_ADDR))
NOR_HandleTypeDef hnor;
FMC_NORSRAM_TimingTypeDef NORSRAM_Timing;
FMC_NORSRAM_TimingTypeDef NORSRAM_ExtTiming;
hnor.Instance = FMC_NORSRAM_DEVICE;
hnor.Extended = FMC_NORSRAM_EXTENDED_DEVICE;
hnor.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE;
hnor.Init.MemoryType = FMC_MEMORY_TYPE_NOR;
hnor.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_16;
hnor.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE;
hnor.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_HIGH;
hnor.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS;
hnor.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE;
hnor.Init.WaitSignal = FMC_WAIT_SIGNAL_ENABLE;
hnor.Init.ExtendedMode = FMC_EXTENDED_MODE_ENABLE;
hnor.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE;
hnor.Init.WriteBurst = FMC_WRITE_BURST_DISABLE;
hnor.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ONLY;
hnor.Init.NSBank = FMC_NORSRAM_BANK1;
hnor.Init.WriteFifo = FMC_WRITE_FIFO_ENABLE;
hnor.Init.PageSize = FMC_PAGE_SIZE_NONE;
NORSRAM_Timing.AccessMode = FMC_ACCESS_MODE_A;
NORSRAM_Timing.AddressHoldTime = 15;
NORSRAM_Timing.AddressSetupTime = 15;
NORSRAM_Timing.CLKDivision = 16;
NORSRAM_Timing.DataLatency = 17;
NORSRAM_Timing.DataSetupTime = 255;
NORSRAM_Timing.BusTurnAroundDuration = 15;
if(HAL_NOR_Init(&hnor, &NORSRAM_Timing, NULL) != HAL_OK)
{
while(1)
{
}
}
|
|