- добавлена поддержка платы ELBEAR ACE-NANO;
- добавлена поддержка плат ELSOMIK OEM и SE;
- добавлена возможность работы в режиме отладки для всех плат, входящих в состав пакета. Доступно для версии ArduinoIDE 2 и выше;
- добавлена поддержка библиотеки FreeRTOS;
- добавлена поддержка библиотеки IRremote;
- добавлена поддержка библиотеки OneWire;
- добавлена поддержка аппаратного I2C0 для плат START-MIK32 и ELSOMIK. Для работы с ним доступен экземпляр класса Wire1;
- добавлена поддержка аппаратного SPI0 для всех плат, входящих в пакет. Для работы с ним доступен экземпляр класса SPI1;
- увеличено быстродействие функций digitalWrite, digitalRead;
- исправлены известные ошибки.
Co-authored-by: KlassenTS <klassen@elron.tech>
Co-committed-by: KlassenTS <klassen@elron.tech>
This commit is contained in:
klassents authored and klassents committed 2025-04-28 07:06:08 +03:00
1 parent de1f0d7fda
commit 1c8e06634c
211 files changed
+97525 -591

No files matched your search

+44 -12
View File
@@ -19,6 +19,7 @@
#include "Arduino.h"
#include "pins_arduino.h"
#include "mik32_hal_gpio.h"
#include "wiring_LL.h"
#ifdef __cplusplus
extern "C" {
@@ -66,51 +67,82 @@ void pinMode(uint32_t PinNumber, uint32_t PinMode)
additionalPinsInit(PinNumber);
}
void fastPinMode(uint32_t PinNumber, uint32_t PinMode)
{
if ((PinNumber>=pinCommonQty()))
{
ErrorMsgHandler("fastPinMode(): pin number exceeds the total number of pins");
return;
}
GPIO_TypeDef* port = digitalPinToPort(PinNumber);
HAL_PinsTypeDef pinMask = digitalPinToBitMask(PinNumber);
// set direction
if (PinMode == OUTPUT)
GPIO_OUTPUT_MODE_PIN(port, pinMask);
else
GPIO_INPUT_MODE_PIN(port, pinMask);
// set pullup
if (PinMode == INPUT_PULLUP)
{
uint8_t pos = PIN_MASK_TO_PIN_NUMBER(pinMask);
if (port == GPIO_0) PIN_SET_PAD_CONFIG(PORT_0_PUPD, pos, HAL_GPIO_PULL_UP);
else if (port == GPIO_1) PIN_SET_PAD_CONFIG(PORT_1_PUPD, pos, HAL_GPIO_PULL_UP);
else PIN_SET_PAD_CONFIG(PORT_2_PUPD, pos, HAL_GPIO_PULL_UP);
}
}
// write pin
void digitalWrite(uint32_t PinNumber, uint32_t Val)
__attribute__((noinline, section(".ram_text"))) void digitalWrite(uint32_t PinNumber, uint32_t Val)
{
if ((PinNumber>=pinCommonQty()))
{
ErrorMsgHandler("digitalWrite(): pin number exceeds the total number of pins");
return;
}
if (digitalPinHasPWM(PinNumber))
if (digitalPinPwmIsOn(PinNumber))
// if the pin can use PWM, disable PWM
analogWriteStop(PinNumber);
HAL_GPIO_WritePin(digitalPinToPort(PinNumber), digitalPinToBitMask(PinNumber), (Val == HIGH) ? GPIO_PIN_HIGH : GPIO_PIN_LOW);
if (Val == HIGH)
GPIO_SET_PIN(digitalPinToPort(PinNumber), digitalPinToBitMask(PinNumber));
else
GPIO_CLEAR_PIN(digitalPinToPort(PinNumber), digitalPinToBitMask(PinNumber));
}
// read pin
int digitalRead(uint32_t PinNumber)
__attribute__((noinline, section(".ram_text"))) int digitalRead(uint32_t PinNumber)
{
if ((PinNumber>=pinCommonQty()))
{
ErrorMsgHandler("digitalRead(): pin number exceeds the total number of pins");
return -1;
}
if (digitalPinHasPWM(PinNumber))
if (digitalPinPwmIsOn(PinNumber))
// if the pin can use PWM, disable PWM
analogWriteStop(PinNumber);
GPIO_PinState pinState = HAL_GPIO_ReadPin(digitalPinToPort(PinNumber), digitalPinToBitMask(PinNumber));
return (pinState == GPIO_PIN_LOW) ? LOW : HIGH;
return GPIO_READ_PIN(digitalPinToPort(PinNumber), digitalPinToBitMask(PinNumber));
}
// toggle pin
void digitalToggle(uint32_t PinNumber)
__attribute__((noinline, section(".ram_text"))) void digitalToggle(uint32_t PinNumber)
{
if ((PinNumber>=pinCommonQty()))
{
ErrorMsgHandler("digitalToggle(): pin number exceeds the total number of pins");
return;
}
if (digitalPinHasPWM(PinNumber))
if (digitalPinPwmIsOn(PinNumber))
// if the pin can use PWM, disable PWM
analogWriteStop(PinNumber);
HAL_GPIO_TogglePin(digitalPinToPort(PinNumber), digitalPinToBitMask(PinNumber));
GPIO_TOGGLE_PIN(digitalPinToPort(PinNumber), digitalPinToBitMask(PinNumber));
}
#ifdef __cplusplus