#ifndef BSP_H
#define BSP_H
/**
IO Connection map
SSD1303
Vcc 1 2 Gnd
D1/Data 3 4 D0/Clk
D3 5 6 D2
D5 7 8 D4
D7 9 10 D6
WR 11 12 RD
RES 13 14 A0 (1-data,0-command)
CS 15 16 C86 (1-8080, 0-SPI)
STM32
D0/Clk PB13/SPI2 Clk
D1/Data PB15/SPI2 MOSI
RES PB12
A0 PB14
CS Gnd
D2~D7 (Float)
WR (Float)
RD (Float)
*/
#define SSD_Clk GPIOA,GPIO_Pin_5
#define SSD_Data GPIOA,GPIO_Pin_7
#define SSD_Reset GPIOB,GPIO_Pin_2
#define SSD_A0 GPIOB,GPIO_Pin_10
#define SSD_CS GPIOB,GPIO_Pin_1
#define SSD_Clk_Low() GPIOA->BRR = GPIO_Pin_5
#define SSD_Clk_High() GPIOA->ODR |= GPIO_Pin_5
#define SSD_Data_Low() GPIOA->BRR = GPIO_Pin_7
#define SSD_Data_High() GPIOA->ODR |= GPIO_Pin_7
#define SSD_Reset_Low() GPIOB->BRR = GPIO_Pin_2
#define SSD_Reset_High() GPIOB->ODR |= GPIO_Pin_2
#define SSD_A0_Low() GPIOB->BRR = GPIO_Pin_10
#define SSD_A0_High() GPIOB->ODR |= GPIO_Pin_10
#define SSD_CS_Low() GPIOB->BRR = GPIO_Pin_1
#define SSD_CS_High() GPIOB->ODR |= GPIO_Pin_1
#define SPI_SendByte(data) SPI1->DR = (data)
#define SPI_Wait() while(!(SPI1->SR&SPI_I2S_FLAG_TXE));while(SPI1->SR&SPI_I2S_FLAG_BSY);
#define SSD1303_FPS 50
#define IsLedOn() (!(GPIOA->ODR & GPIO_Pin_8))
#define LED_ON() GPIOA->BRR = GPIO_Pin_8
#define LED_OFF() GPIOA->BSRR = GPIO_Pin_8
#define ToggleLED() if(GPIOA->ODR & GPIO_Pin_8){GPIOA->BRR = GPIO_Pin_8;}\
else{GPIOA->BSRR = GPIO_Pin_8;}
#define GSel1_High() GPIOB->BSRR = GPIO_Pin_9
#define GSel1_Low() GPIOB->BRR = GPIO_Pin_9
#define MMA_SLEEP() GPIOB->BRR = GPIO_Pin_11
#define MMA_WAKEUP() GPIOB->BSRR = GPIO_Pin_11
#define Is_MMA_WAKEUP() (GPIOB->ODR & GPIO_Pin_11)
#define DMA_SSD_1303 DMA1_Channel5
#define DMA_Handler_SSD_1303 DMA1_Channel5_IRQHandler
#define Is_Enc_Key_Down() (!(GPIOA->IDR & GPIO_Pin_0))
#endif