ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
12 июля
432982 Топик полностью
koyodza (14.08.2013 15:40 - 15:42, просмотров: 71) ответил Nikolay801_ на ну и я спрошу, как инициализировать структуру передаваемую параметром в функцию?
для GPIO сделал вообще по-своему, примерно так сделано в библиотеках для STM8  #define BITBAND(x) ((((uint32_t)(x))&(0x70000000UL))+((((uint32_t)(x))&(0x0FFFFFUL))<<(5))+(0x02000000UL)) /////////////////////////////////////////////////////////// #define PA(n) (BITBAND(GPIOA_BASE)+((n)*4)) #define PB(n) (BITBAND(GPIOB_BASE)+((n)*4)) #define PC(n) (BITBAND(GPIOC_BASE)+((n)*4)) #define PD(n) (BITBAND(GPIOD_BASE)+((n)*4)) #define PE(n) (BITBAND(GPIOE_BASE)+((n)*4)) #define PF(n) (BITBAND(GPIOF_BASE)+((n)*4)) #define PG(n) (BITBAND(GPIOG_BASE)+((n)*4)) /////////////////////////////////////////////////////////// #define POWER_ON PD(2) #define CHARGE_STATUS PA(8) ... /////////////////////////////////////////////////////////// typedef struct tagBBGPIOSTRUCT { __IO uint32_t CRL[32]; __IO uint32_t CRH[32]; __IO uint32_t IDR[32]; __IO uint32_t ODR[32]; __IO uint32_t BSRR[32]; __IO uint32_t BRR[32]; __IO uint32_t LCKR[32]; } BBGPIOSTRUCT; typedef struct tagGPIOINITSTRUCT { uint32_t pin; BYTE mode; } GPIOINITSTRUCT; /////////////////////////////////////////////////////////// #define GPIO_MODE_AIN 0x00 #define GPIO_MODE_IN 0x04 #define GPIO_MODE_INPU 0x18 #define GPIO_MODE_INPD 0x08 #define GPIO_MODE_OUT_PP_10MHZ_LOW 0x01 #define GPIO_MODE_OUT_PP_10MHZ_HIGH 0x11 #define GPIO_MODE_OUT_PP_2MHZ_LOW 0x02 #define GPIO_MODE_OUT_PP_2MHZ_HIGH 0x12 #define GPIO_MODE_OUT_PP_50MHZ_LOW 0x03 #define GPIO_MODE_OUT_PP_50MHZ_HIGH 0x13 #define GPIO_MODE_OUT_OD_10MHZ_LOW 0x05 #define GPIO_MODE_OUT_OD_10MHZ_HIGH 0x15 #define GPIO_MODE_OUT_OD_2MHZ_LOW 0x06 #define GPIO_MODE_OUT_OD_2MHZ_HIGH 0x16 #define GPIO_MODE_OUT_OD_50MHZ_LOW 0x07 #define GPIO_MODE_OUT_OD_50MHZ_HIGH 0x17 #define GPIO_MODE_AF_PP_10MHZ 0x09 #define GPIO_MODE_AF_PP_2MHZ 0x0A #define GPIO_MODE_AF_PP_50MHZ 0x0B #define GPIO_MODE_AF_OD_10MHZ 0x0D #define GPIO_MODE_AF_OD_2MHZ 0x0E #define GPIO_MODE_AF_OD_50MHZ 0x0F ... void GPIO_PinInit(uint32_t pin, BYTE mode) { int offset = LOBYTE(pin << 2); __IO uint32_t* pBase = ((__IO uint32_t*)((pin & (~255)) + offset + __offsetof(BBGPIOSTRUCT, CRL))); pBase[1] = 0; pBase[0] = 0; SetPinState(pin, mode & 0x10); pBase[3] = mode >> 3; pBase[2] = mode >> 2; pBase[1] = mode >> 1; pBase[0] = mode; } ... void InitGPIO(const GPIOINITSTRUCT* p, int count) { for (int i = 0; i < count; i++, p++) { if (!p->pin) break; GPIO_PinInit(p->pin, p->mode); } } ... static const GPIOINITSTRUCT gpIni[] = { {POWER_ON, GPIO_MODE_OUT_PP_2MHZ_LOW}, {CHARGE_STATUS, GPIO_MODE_INPD}, }; InitGPIO(gpIni, __countof(gpIni));