RISC-V/V203F6P6/usart/main.cpp

60 lines
1.7 KiB
C++
Raw Normal View History

2025-01-26 16:50:07 +01:00
#include "system.h"
#include "gpio.h"
#include "usart.h"
#include "print.h"
/*********************************************************************************
Sériový port na CH32V203F6P6 je příklad jak by z dokumentace člověka klepla pepka.
Podle DS to jen jeden sériový port, ale vývody USART1 nejsou nijak vyvedeny
z pouzdra. Tak zkusíte USART2, a ejhle, ono to funguje.
**********************************************************************************/
#if 0
class TEST : public BaseLayer { // Testovací třída pro test příjmu - OK.
static constexpr unsigned buflen = 64u;
char buffer [buflen];
unsigned rx_index;
GpioClass & led;
public:
explicit TEST (GpioClass & io) noexcept : BaseLayer(), rx_index(0u), led(io) {}
uint32_t Up(const char * data, const uint32_t len) override {
for (unsigned n=0u; n<len; n++) {
const char c = data [n];
if (c == '\r') { // Enter
Down ("\r\n", 2);
Down (buffer, rx_index); // Vrátí obsah bufferu na novém řádku
Down ("\r\n", 2);
rx_index = 0u;
return 0;
}
buffer [rx_index] = c;
const bool b = rx_index & 1u;
led << b; // Po každém znaku změní stav
rx_index += 1u;
}
return len;
}
};
#endif
static constexpr unsigned timeout = 100'000;
static GpioClass led (GPIOB, 8);
static Usart serial (57600);
static Print cout;
//static TEST test (led);
int main () {
led << true;
delay_init();
//test += serial;
cout += serial;
int passcnt = 0;
for (;;) {
delay_us(timeout);
cout << "pass : " << passcnt << EOL;
const bool b = passcnt & 1;
led << b;
passcnt += 1;
}
return 0;
}