#ifndef __BITBAND_H
#define __BITBAND_H
#include “stm32f10x_conf.h”
#define BITBAND(ADDR,BITNUM) ((ADDR&0xF0000000) + 0x2000000 + ((ADDR & 0xFFFFF)<<5) + (BITNUM << 2))
#define MEM_ADDR(ADDR) *(volatile unsigned int *)(ADDR)
#define BIT_BAND(ADDR,BITNUM) MEM_ADDR(BITBAND(ADDR,BITNUM))
#define GPIOA_IDR_ADDR (GPIOA_BASE + 0x08)
#define GPIOA_ODR_ADDR (GPIOA_BASE + 0x0C)
#define GPIOB_IDR_ADDR (GPIOB_BASE + 0x08)
#define GPIOB_ODR_ADDR (GPIOB_BASE + 0x0C)
#define GPIOC_IDR_ADDR (GPIOC_BASE + 0x08)
#define GPIOC_ODR_ADDR (GPIOC_BASE + 0x0C)
#define GPIOD_IDR_ADDR (GPIOD_BASE + 0x08)
#define GPIOD_ODR_ADDR (GPIOD_BASE + 0x0C)
#define PAOut(n) BIT_BAND(GPIOA_ODR_ADDR,n)
#define PAIn(n) BIT_BAND(GPIOA_IDR_ADDR,n)
#define PBOut(n) BIT_BAND(GPIOB_ODR_ADDR,n)
#define PBIn(n) BIT_BAND(GPIOB_IDR_ADDR,n)
#define PCOut(n) BIT_BAND(GPIOC_ODR_ADDR,n)
#define PCIn(n) BIT_BAND(GPIOC_IDR_ADDR,n)
#define PDOut(n) BIT_BAND(GPIOD_ODR_ADDR,n)
#define PDIn(n) BIT_BAND(GPIOD_IDR_ADDR,n)
#endif