96 lines
2.9 KiB
C
96 lines
2.9 KiB
C
/*==============================================================================
|
||
* Инициализация портов с использованием бибилотеки PLIB035
|
||
*------------------------------------------------------------------------------
|
||
* ЦНИИ СЭТ, Разваляев Алексей <wot890089@mail.ru>
|
||
*==============================================================================
|
||
* Конфигурация портов настраивается в gpio.h
|
||
* ЦНИИ СЭТ
|
||
*==============================================================================
|
||
*/
|
||
|
||
//-- Includes ------------------------------------------------------------------
|
||
#include "periph_config.h"
|
||
|
||
//-- Defines -------------------------------------------------------------------
|
||
|
||
//-- Peripheral init functions -------------------------------------------------
|
||
void gpio_init(void)
|
||
{
|
||
RCU_AHBClkCmd(RCU_AHBClk_GPIOA, ENABLE);
|
||
RCU_AHBRstCmd(RCU_AHBRst_GPIOA, ENABLE);
|
||
RCU_AHBClkCmd(RCU_AHBClk_GPIOB, ENABLE);
|
||
RCU_AHBRstCmd(RCU_AHBRst_GPIOB, ENABLE);
|
||
|
||
/* Сброс пинов */
|
||
GPIO_DeInit(GPIOA);
|
||
GPIO_DeInit(GPIOB);
|
||
|
||
// Инициализация порта A
|
||
for (int i = 0; i < sizeof(gpioa_config) / sizeof(gpioa_config[0]); i++)
|
||
{
|
||
GPIO_Init(GPIOA, &gpioa_config[i]);
|
||
}
|
||
|
||
// Инициализация порта B
|
||
for (int i = 0; i < sizeof(gpiob_config) / sizeof(gpiob_config[0]); i++)
|
||
{
|
||
GPIO_Init(GPIOB, &gpiob_config[i]);
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
// GPIO_StructInit(&gpio_init);
|
||
// gpio_init.Digital = ENABLE;
|
||
// GPIO_Init(GPIOA, &gpio_init);
|
||
// GPIO_Init(GPIOB, &gpio_init);
|
||
//
|
||
// /* Инициализация выходных пинов Пуш-Пулл */
|
||
// gpio_init.Out = ENABLE;
|
||
// gpio_init.OutMode = GPIO_OutMode_PP;
|
||
//
|
||
// gpio_init.Pin = GPIO_OUT_PP_PA_PINS;
|
||
// GPIO_Init(GPIOA, &gpio_init);
|
||
// gpio_init.Pin = GPIO_OUT_PP_PB_PINS;
|
||
// GPIO_Init(GPIOB, &gpio_init);
|
||
//
|
||
// /* Инициализация выходных пинов Открытый сток */
|
||
// gpio_init.Out = ENABLE;
|
||
// gpio_init.OutMode = GPIO_OutMode_OD;
|
||
//
|
||
// gpio_init.Pin = GPIO_OUT_OD_PA_PINS;
|
||
// GPIO_Init(GPIOA, &gpio_init);
|
||
// gpio_init.Pin = GPIO_OUT_OD_PB_PINS;
|
||
// GPIO_Init(GPIOB, &gpio_init);
|
||
}
|
||
|
||
|
||
GPIO_Init_TypeDef *gpio_get_init(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
|
||
{
|
||
uint8_t pin_index = __builtin_ctz(GPIO_Pin);
|
||
|
||
if (GPIOx == GPIOA)
|
||
{
|
||
// Проверяем границы массива
|
||
if (pin_index < sizeof(gpioa_config) / sizeof(gpioa_config[0]))
|
||
{
|
||
return &gpioa_config[pin_index];
|
||
}
|
||
}
|
||
else if (GPIOx == GPIOB)
|
||
{
|
||
// У тебя была опечатка: возвращал gpioa_config вместо gpiob_config
|
||
if (pin_index < sizeof(gpiob_config) / sizeof(gpiob_config[0]))
|
||
{
|
||
return &gpiob_config[pin_index];
|
||
}
|
||
}
|
||
|
||
return NULL;
|
||
}
|