#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 GPIOB,GPIO_Pin_13
#define SSD_Data GPIOB,GPIO_Pin_15
#define SSD_Reset GPIOD,GPIO_Pin_12
#define SSD_A0 GPIOD,GPIO_Pin_14
#define SSD_CS //GPIOG,GPIO_Pin_2
#define SSD_Clk_Low() GPIOB->BRR = GPIO_Pin_13
#define SSD_Clk_High() GPIOB->BSRR = GPIO_Pin_13
#define SSD_Data_Low() GPIOB->BRR = GPIO_Pin_15
#define SSD_Data_High() GPIOB->BSRR = GPIO_Pin_15
#define SSD_Reset_Low() GPIOB->BRR = GPIO_Pin_12
#define SSD_Reset_High() GPIOB->BSRR = GPIO_Pin_12
#define SSD_A0_Low() GPIOB->BRR = GPIO_Pin_14
#define SSD_A0_High() GPIOB->BSRR = GPIO_Pin_14
#define SSD_CS_Low() //GPIOG->BRR = GPIO_Pin_2
#define SSD_CS_High() //GPIOG->BSRR = GPIO_Pin_2
#define SPI_SendByte(data) SPI2->DR = (data)
#define SPI_Wait() while(!(SPI2->SR&SPI_I2S_FLAG_TXE));while(SPI2->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 IsCHG() (!(GPIOB->IDR & GPIO_Pin_5))
#define IsPGOOD() (!(GPIOB->IDR & GPIO_Pin_4))
#define GSel1_High() GPIOB->BSRR = GPIO_Pin_9
#define GSel1_Low() GPIOB->BRR = GPIO_Pin_9
#define GSel2_High() GPIOB->BSRR = GPIO_Pin_8
#define GSel2_Low() GPIOB->BRR = GPIO_Pin_8
#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 AD_CH_BAT ADC_Channel_4
#define AD_CH_X ADC_Channel_1
#define AD_CH_Y ADC_Channel_2
#define AD_CH_Z ADC_Channel_3
#define AD_CH_CHG ADC_Channel_9
#define AD_CH_REF ADC_Channel_17
#define DMA_SSD_1303 DMA1_Channel5
#define DMA_Handler_SSD_1303 DMA1_Channel5_IRQHandler
#define DMA_ADC DMA1_Channel1
#define Is_Enc_Key_Down() (!(GPIOA->IDR & GPIO_Pin_0))
typedef struct _ADResult_t
{
uint16_t ADRef; // ADC1
uint16_t ADBat; // ADC2
uint16_t ADX; // ADC1
uint16_t ADY; // ADC2
uint16_t ADZ; // ADC1
uint16_t ADChg; // ADC2
}ADResult_t;
#endif