LZ想要这种吧!
//********************************************************
// Init GPIO ExRAM Control Bus
//********************************************************
// Init #CS
GPIO_InitStructure.GPIO_Pin = ExCS;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(ExCS_GPIO, &GPIO_InitStructure);
GPIO_SetBits(ExCS_GPIO,ExCS);
// Init #WE
GPIO_InitStructure.GPIO_Pin = ExWE;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(ExWE_GPIO, &GPIO_InitStructure);
GPIO_SetBits(ExWE_GPIO,ExWE);
// Init #RD
GPIO_InitStructure.GPIO_Pin = ExRD;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(ExRD_GPIO, &GPIO_InitStructure);
GPIO_SetBits(ExRD_GPIO,ExRD);
// Init AddrBus
GPIO_InitStructure.GPIO_Pin = ExSA;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(ExSA_GPIO, &GPIO_InitStructure);
GPIO_SetBits(ExSA_GPIO,ExSA);
// Init DataBus
GPIO_InitStructure.GPIO_Pin = ExBus;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(ExBus_GPIO, &GPIO_InitStructure);
int outportb(uint8_t Addr , uint8_t WriteData)
{
uint16_t i1;
// Set Data Bus : OutPut
GPIO_InitStructure.GPIO_Pin = ExBus;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(ExBus_GPIO, &GPIO_InitStructure);
i1 = Addr & 0x3;
i1 = i1 << 6;
GPIO_WriteBits( ExSA_GPIO , ExSA , i1 ); // set Addr
i1 = WriteData & 0xff;
i1 = i1 << 8;
GPIO_WriteBits( ExBus_GPIO , ExBus , i1 ); // set Data
//us_Delay(1);
GPIO_ResetBits( ExCS_GPIO , ExCS ); // set #CS : low level
//us_Delay(1);
GPIO_ResetBits( ExWE_GPIO , ExWE ); // set #WE : low level
// Delay
//us_Delay(2);
GPIO_SetBits( ExWE_GPIO , ExWE ); // set #WE : High level
GPIO_SetBits( ExCS_GPIO , ExCS ); // set #CS : High level
// Init DataBus
GPIO_InitStructure.GPIO_Pin = ExBus;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(ExBus_GPIO, &GPIO_InitStructure);
return 1;
}
uint8_t inportb(uint8_t Addr)
{
uint16_t i1;
i1 = Addr & 0x3;
i1 = i1 << 6;
GPIO_WriteBits( ExSA_GPIO , ExSA , i1 ); // set Addr
// i1 = WriteData & 0xff;
// i1 = i1 << 8;
// GPIO_WriteBits( ExBus_GPIO , ExBus , i1 ); // set Data
GPIO_ResetBits( ExCS_GPIO , ExCS ); // set #CS : low level
//us_Delay(1);
GPIO_ResetBits( ExRD_GPIO , ExRD ); // set #RD : low level
// Delay
//us_Delay(2);
i1 = GPIO_ReadInputData(ExBus_GPIO); // read data state on the data bus
GPIO_SetBits( ExRD_GPIO , ExRD ); // set #RD : High level
GPIO_SetBits( ExCS_GPIO , ExCS ); // set #CS : High level
i1 = (i1 >> 8) & 0xff;
return i1;
} |