v0.5.0
- добавлена поддержка платы 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 was merged in pull request #19.
This commit is contained in:
1 parent
de1f0d7fda
commit
1c8e06634c
211 files changed
+97525
-591
No files matched your search
@@ -19,7 +19,13 @@ NeoPixel::~NeoPixel() {
|
||||
}
|
||||
|
||||
void NeoPixel::begin(void) {
|
||||
if (pin >= 0) {
|
||||
if (pin >= 0)
|
||||
{
|
||||
if (pin >= pinCommonQty())
|
||||
{
|
||||
ErrorMsgHandler("NeoPixel.begin(): pin number exceeds the total number of pins");
|
||||
return;
|
||||
}
|
||||
pinMode(pin, OUTPUT);
|
||||
digitalWrite(pin, LOW);
|
||||
}
|
||||
@@ -58,59 +64,62 @@ void NeoPixel::updateType(neoPixelType t) {
|
||||
static void __attribute__((noinline, section(".ram_text"))) mik32Show(GPIO_TypeDef* m_port, uint32_t m_pin, uint8_t* pixels, uint32_t numBytes, bool is800KHz) {
|
||||
// not support 400khz
|
||||
if (!is800KHz) return;
|
||||
|
||||
volatile uint32_t* set = &m_port->SET;
|
||||
volatile uint32_t* clr = &m_port->CLEAR;
|
||||
|
||||
uint8_t* ptr = pixels;
|
||||
uint8_t* end = ptr + numBytes;
|
||||
uint8_t p = *ptr++;
|
||||
uint8_t bitMask = 0x80;
|
||||
|
||||
noInterrupts();
|
||||
|
||||
while (1) {
|
||||
if (p & bitMask) { // ONE
|
||||
// High 800ns - 25,6 tick
|
||||
*set = m_pin;
|
||||
__asm volatile (
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop; nop; nop; nop;"
|
||||
);
|
||||
if ((m_port != NULL) && (m_pin != NOT_A_PIN))
|
||||
{
|
||||
volatile uint32_t* set = &m_port->SET;
|
||||
volatile uint32_t* clr = &m_port->CLEAR;
|
||||
|
||||
// Low 450ns - 14,4 tick
|
||||
*clr = m_pin;
|
||||
__asm volatile (
|
||||
"nop; nop; nop; nop; nop;"
|
||||
);
|
||||
} else { // ZERO
|
||||
// High 400ns - 12,8 tick
|
||||
*set = m_pin;
|
||||
__asm volatile (
|
||||
"nop; nop; nop; nop; nop; nop;"
|
||||
);
|
||||
uint8_t* ptr = pixels;
|
||||
uint8_t* end = ptr + numBytes;
|
||||
uint8_t p = *ptr++;
|
||||
uint8_t bitMask = 0x80;
|
||||
|
||||
noInterrupts();
|
||||
|
||||
while (1) {
|
||||
if (p & bitMask) { // ONE
|
||||
// High 800ns - 25,6 tick
|
||||
*set = m_pin;
|
||||
__asm volatile (
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop; nop; nop; nop;"
|
||||
);
|
||||
|
||||
// Low 850ns - 27,2 tick
|
||||
*clr = m_pin;
|
||||
__asm volatile (
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop; nop; nop;"
|
||||
);
|
||||
}
|
||||
// Low 450ns - 14,4 tick
|
||||
*clr = m_pin;
|
||||
__asm volatile (
|
||||
"nop; nop; nop; nop; nop;"
|
||||
);
|
||||
} else { // ZERO
|
||||
// High 400ns - 12,8 tick
|
||||
*set = m_pin;
|
||||
__asm volatile (
|
||||
"nop; nop; nop; nop; nop; nop;"
|
||||
);
|
||||
|
||||
if (bitMask >>= 1) {
|
||||
// Move on to the next pixel
|
||||
}
|
||||
else {
|
||||
if (ptr >= end) {
|
||||
break;
|
||||
// Low 850ns - 27,2 tick
|
||||
*clr = m_pin;
|
||||
__asm volatile (
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop; nop; nop;"
|
||||
);
|
||||
}
|
||||
|
||||
if (bitMask >>= 1) {
|
||||
// Move on to the next pixel
|
||||
}
|
||||
else {
|
||||
if (ptr >= end) {
|
||||
break;
|
||||
}
|
||||
p = *ptr++;
|
||||
bitMask = 0x80;
|
||||
}
|
||||
p = *ptr++;
|
||||
bitMask = 0x80;
|
||||
}
|
||||
interrupts();
|
||||
}
|
||||
interrupts();
|
||||
}
|
||||
|
||||
void NeoPixel::show(void) {
|
||||
|
||||
Reference in new issue
Block a user