From e8e2cd60c29c7353505aee6ce21c1053b4fff734 Mon Sep 17 00:00:00 2001 From: DashyFox Date: Mon, 27 May 2024 10:53:44 +0300 Subject: [PATCH] rp --- .vscode/arduino.json | 4 +-- IR-protocol.ino | 75 ++++++++++++++++++++++++++------------------ IR_DecoderRaw.cpp | 4 ++- IR_Encoder.cpp | 7 +++-- IR_config.cpp | 6 ++-- IR_config.h | 6 ++-- 6 files changed, 60 insertions(+), 42 deletions(-) diff --git a/.vscode/arduino.json b/.vscode/arduino.json index fb0e740..6f4beb9 100644 --- a/.vscode/arduino.json +++ b/.vscode/arduino.json @@ -1,6 +1,6 @@ { - "configuration": "pnum=BLUEPILL_F103C8,upload_method=swdMethod,xserial=none,usb=CDCgen,xusb=FS,opt=osstd,dbg=none,rtlib=nano", - "board": "STMicroelectronics:stm32:GenF1", + "configuration": "flash=2097152_0,freq=133,opt=Small,rtti=Disabled,stackprotect=Disabled,exceptions=Disabled,dbgport=Disabled,dbglvl=None,usbstack=picosdk,ipbtstack=ipv4only,uploadmethod=default", + "board": "rp2040:rp2040:rpipico", "port": "COM17", "output": "bin", "prebuild": "if exist bin rd /s /q bin", diff --git a/IR-protocol.ino b/IR-protocol.ino index b60281a..389e598 100644 --- a/IR-protocol.ino +++ b/IR-protocol.ino @@ -1,27 +1,27 @@ #include "IR_Decoder.h" #include "IR_Encoder.h" #include "TimerStatic.h" -#include "MemoryCheck.h" +// #include "MemoryCheck.h" /////////////// Pinout /////////////// -#define dec0_PIN PB0 -#define dec1_PIN PB1 -#define dec2_PIN PA2 -#define dec3_PIN PB3 -#define dec4_PIN PB4 -#define dec5_PIN PB5 -#define dec6_PIN PB6 -#define dec7_PIN PB7 -#define dec8_PIN PB8 -#define dec9_PIN PB9 -#define dec10_PIN PB10 -#define dec11_PIN PB11 -#define dec12_PIN PB12 -#define dec13_PIN PB13 -#define dec14_PIN PB14 -#define dec15_PIN PB15 +#define dec0_PIN 0 +#define dec1_PIN 1 +#define dec2_PIN 2 +#define dec3_PIN 3 +#define dec4_PIN 4 +#define dec5_PIN 5 +#define dec6_PIN 6 +#define dec7_PIN 7 +#define dec8_PIN 8 +#define dec9_PIN 9 +#define dec10_PIN 10 +#define dec11_PIN 11 +#define dec12_PIN 12 +#define dec13_PIN 13 +#define dec14_PIN 14 +#define dec15_PIN 15 -#define LoopOut PA7 +#define LoopOut 16 #define dec_ISR(n) \ void dec_##n##_ISR() { dec##n.isr(); } @@ -35,6 +35,10 @@ #define decTick(n) dec##n.tick(); #define decStat(n) rx_flag |= statusSimple(dec##n); +void digitalToggle(uint8_t pin){ + digitalWrite(pin, !digitalRead(pin)); +} + //////////////// Ini ///////////////// #define INFO "IR_FOX TEST" @@ -43,11 +47,11 @@ //////////////// Var ///////////////// // IR_Encoder encForward(PA5, 42 /* , &decBackward */); -IR_Encoder enc0(PA5, 42 /* , &decBackward */); -IR_Encoder enc1(PA4, 127 /* , &decBackward */); -IR_Encoder enc2(PA3, 137 /* , &decBackward */); -IR_Encoder enc3(PA0, 777 /* , &decBackward */); -IR_Encoder enc10(PC15, 555 /* , &decBackward */); +IR_Encoder enc0(18, 42 /* , &decBackward */); +IR_Encoder enc1(19, 127 /* , &decBackward */); +IR_Encoder enc2(20, 137 /* , &decBackward */); +IR_Encoder enc3(21, 777 /* , &decBackward */); +// IR_Encoder enc10(PC15, 555 /* , &decBackward */); // IR_Encoder enc11(PC14, 127 /* , &decBackward */); // IR_Encoder enc12(PC13, 137 /* , &decBackward */); // IR_Encoder enc13(PA12, 777 /* , &decBackward */); @@ -59,6 +63,8 @@ IR_Encoder enc10(PC15, 555 /* , &decBackward */); void EncoderISR() { IR_Encoder::isr(); + // digitalToggle(LoopOut); + } //------------------------------------------------------------------- @@ -95,7 +101,7 @@ Timer t1(500, millis, []() enc1.sendData(IR_Broadcast, data3, sizeof(data3)); enc2.sendData(IR_Broadcast, data2, sizeof(data2)); enc3.sendData(IR_Broadcast, data1, sizeof(data1)); - enc10.sendData(IR_Broadcast, data4, sizeof(data4)); + // enc10.sendData(IR_Broadcast, data4, sizeof(data4)); // enc11.sendData(IR_Broadcast, data3, sizeof(data3)); // enc12.sendData(IR_Broadcast, data2, sizeof(data2)); // enc13.sendData(IR_Broadcast, data1, sizeof(data1)); @@ -186,16 +192,24 @@ Timer t1(500, millis, []() Timer signalDetectTimer; ///////////////////////////////////////////////////////////////////// -HardwareTimer IR_Timer(TIM3); +// HardwareTimer IR_Timer(TIM3); +// RPI_PICO_Timer IR_Timer(0); +struct repeating_timer timer; + +bool TimerISRHandler(struct repeating_timer *t){ + (void) t; + EncoderISR(); + return true; +} void setup() { - // MicrosTimer.setOve + add_repeating_timer_us(8, TimerISRHandler, NULL, &timer); - IR_Timer.setOverflow(carrierFrec * 2, HERTZ_FORMAT); - IR_Timer.attachInterrupt(1, EncoderISR); - NVIC_SetPriority(IRQn_Type::TIM3_IRQn, 0); - IR_Timer.resume(); + // IR_Timer.setOverflow(carrierFrec * 2, HERTZ_FORMAT); + // IR_Timer.attachInterrupt(1, EncoderISR); + // NVIC_SetPriority(IRQn_Type::TIM3_IRQn, 0); + // IR_Timer.resume(); Serial.begin(SERIAL_SPEED); Serial.println(F(INFO)); @@ -294,6 +308,7 @@ void loop() sig = in; break; } + Serial.println(in); } } Timer statusSimpleDelay; diff --git a/IR_DecoderRaw.cpp b/IR_DecoderRaw.cpp index 997b54a..692eb42 100644 --- a/IR_DecoderRaw.cpp +++ b/IR_DecoderRaw.cpp @@ -4,6 +4,7 @@ IR_DecoderRaw::IR_DecoderRaw(const uint8_t pin, uint16_t addr, IR_Encoder *encPair) : encoder(encPair) { setPin(pin); + pinMode(pin, INPUT_PULLUP); id = addr; prevRise = prevFall = prevPrevFall = prevPrevRise = 0; if (encPair != nullptr) @@ -74,7 +75,8 @@ void IR_DecoderRaw::isr() oldTime = time_; FrontStorage edge; - edge.dir = port->IDR & mask; + // edge.dir = port->IDR & mask; + edge.dir = digitalRead(pin); edge.time = time_; subBuffer.push(edge); diff --git a/IR_Encoder.cpp b/IR_Encoder.cpp index 9e1a2e7..0fcd5f9 100644 --- a/IR_Encoder.cpp +++ b/IR_Encoder.cpp @@ -14,6 +14,7 @@ std::list& IR_Encoder::get_enc_list() // определение ф IR_Encoder::IR_Encoder(uint8_t pin, uint16_t addr, IR_DecoderRaw *decPair) { setPin(pin); + pinMode(pin,OUTPUT); id = addr; this->decPair = decPair; signal = noSignal; @@ -30,7 +31,6 @@ IR_Encoder::IR_Encoder(uint8_t pin, uint16_t addr, IR_DecoderRaw *decPair) { decPair->encoder = this; } - pinMode(pin,OUTPUT); get_enc_list().push_back(this); }; @@ -256,8 +256,9 @@ void IR_Encoder::_isr() ir_out_virtual = !ir_out_virtual && state; - port->ODR &= ~(mask); - port->ODR |= mask & (ir_out_virtual ? (uint16_t)0xFFFF : (uint16_t)0x0000); + // port->ODR &= ~(mask); + // port->ODR |= mask & (ir_out_virtual ? (uint16_t)0xFFFF : (uint16_t)0x0000); + digitalWrite(pin, ir_out_virtual); if (toggleCounter) diff --git a/IR_config.cpp b/IR_config.cpp index 7acf1bc..834bc9c 100644 --- a/IR_config.cpp +++ b/IR_config.cpp @@ -2,9 +2,9 @@ void IR_FOX::setPin(uint8_t pin){ this->pin = pin; - port = digitalPinToPort(pin); - mask = digitalPinToBitMask(pin); - pinMode(pin, INPUT_PULLUP); + // port = digitalPinToPort(pin); + // mask = digitalPinToBitMask(pin); + // pinMode(pin, INPUT_PULLUP); } void IR_FOX::checkAddressRuleApply(uint16_t address, uint16_t id, bool &flag) diff --git a/IR_config.h b/IR_config.h index df654dd..756ed25 100644 --- a/IR_config.h +++ b/IR_config.h @@ -44,9 +44,9 @@ msg type: #define IR_MSG_BACK 0U // | 000...... | = Задний сигнал машинки #define IR_MSG_ACCEPT 1U // | 001..... | = подтверждение #define IR_MSG_REQUEST 2U // | 010..... | = запрос -#define IR_MSG_ 3U // | 011..... | = ?? +// #define IR_MSG_ 3U // | 011..... | = ?? #define IR_MSG_BACK_TO 4U // | 100..... | = Задний сигнал машинки c адресацией -#define IR_MSG_ 5U // | 101..... | = ?? +// #define IR_MSG_ 5U // | 101..... | = ?? #define IR_MSG_DATA_NOACCEPT 6U // | 110..... | = данные, не требующие подтверждения #define IR_MSG_DATA_ACCEPT 7U // | 111..... | = данные требующие подтверждения ; /*   // ---------- @@ -187,7 +187,7 @@ public: protected: uint16_t id; uint8_t pin; - GPIO_TypeDef *port; + // GPIO_TypeDef *port; uint16_t mask; ErrorsStruct errors; uint8_t crc8(uint8_t *data, uint8_t start, uint8_t end, uint8_t poly);