Implement blinker with Relays

This commit is contained in:
zaubentrucker 2024-12-23 12:53:03 +01:00
parent 65ec5beadb
commit 5ddd8ef236
3 changed files with 73 additions and 37 deletions

View file

@ -12,7 +12,7 @@
platform = ch32v
board = ch32v003f4p6_evt_r0
framework = noneos-sdk
# build_flags = -D SYSCLK_FREQ_48MHZ_HSI -D LOD_DEBUG_ENABLE -DCH32V003F4 -DCH32V00X -DCH32V00x -DCH32V003
build_flags = -D SYSCLK_FREQ_48MHZ_HSI -DSDI_PRINT=1
monitor_speed = 115200
[env:ch32v003f4p6_evt_r0]

View file

@ -25,7 +25,25 @@ extern "C" {
}
#endif
int main(void) {
int main(void) {
u8 i = 0;
#ifdef NVIC_PriorityGroup_2
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
#else
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
#endif
Delay_Init();
#if (SDI_PRINT == SDI_PR_OPEN)
SDI_Printf_Enable();
#else
USART_Printf_Init(115200);
#endif
printf("SystemClk:%ld\r\n", SystemCoreClock);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
SystemCoreClockUpdate();
@ -39,10 +57,25 @@ int main(void) {
LOG_DEBUG(EOL "Sys Clock: %ld" EOL, SystemCoreClock);
MOD_IO2::Setup();
while (1) {
}
MOD_IO2::Setup();
bool should_blink = false;
while (1)
{
Wait_Ms(1000);
printf("-DEBUG-PR-%08x\r\n", i++);
if(should_blink) {
MOD_IO2::onRelayOn(0x40, 0, 0x03);
}
Wait_Ms(1000);
printf("-DEBUG-PR-%08x\r\n", i++);
if(should_blink) {
MOD_IO2::onRelayOff(0x40, 0, 0x03);
}
}
}
void NMI_Handler(void) {

View file

@ -95,43 +95,12 @@ protected:
static uint8_t onGetRelayState(uint8_t reg, uint8_t offset);
static void onSetRelayState(uint8_t reg, uint8_t offset, uint8_t data);
static void onRelayOn(uint8_t reg, uint8_t offset, uint8_t data);
static void onRelayOff(uint8_t reg, uint8_t offset, uint8_t data);
static uint8_t onGetRelayOff(uint8_t reg, uint8_t offset);
static void onSetPWM(uint8_t reg, uint8_t offset, uint8_t data);
static void onSetAddress(uint8_t reg, uint8_t offset, uint8_t data);
inline static const MOD_IO2_REG_Map_Type REG_MAP[MOD_IO2_REG_COUNT] = {
{.reg = MOD_IO2_SET_DIR, .onRead = onGetDir, .onWrite = onSetDir},
{.reg = MOD_IO2_SET_OUT, .onRead = onGetLevel, .onWrite = onSetLevel},
{.reg = MOD_IO2_GET_IN, .onRead = onGetLevel, .onWrite = NULL},
{.reg = MOD_IO2_SET_PULL_UP, .onRead = onGetPullUp, .onWrite = onSetPullUp},
// Analog input
{.reg = MOD_IO2_GET_ANALOG0, .onRead = onAnalogGet, .onWrite = NULL},
{.reg = MOD_IO2_GET_ANALOG5, .onRead = onAnalogGet, .onWrite = NULL},
{.reg = MOD_IO2_GET_ANALOG6, .onRead = onAnalogGet, .onWrite = NULL},
{.reg = MOD_IO2_GET_BOARD_ID, .onRead = onGetBoardID, .onWrite = NULL},
{.reg = MOD_IO2_GET_VERSION, .onRead = onGetVersion, .onWrite = NULL},
{.reg = MOD_IO2_RELAY_STATE, .onRead = onGetRelayState, .onWrite = onSetRelayState},
{.reg = MOD_IO2_RELAY_ON, .onRead = onGetRelayState, .onWrite = onRelayOn},
{.reg = MOD_IO2_RELAY_OFF, .onRead = onGetRelayOff, .onWrite = onRelayOff},
{.reg = MOD_IO2_RELAY_STATE_GET, .onRead = onGetRelayState, .onWrite = NULL},
// PWM
{.reg = MOD_IO2_SET_PWM_OFF, .onRead = NULL, .onWrite = onSetPWM},
{.reg = MOD_IO2_SET_PWM1, .onRead = NULL, .onWrite = onSetPWM},
{.reg = MOD_IO2_SET_PWM2, .onRead = NULL, .onWrite = onSetPWM},
// DAC is NOT available
{.reg = 0x60, .onRead = NULL, .onWrite = NULL},
{.reg = MOD_IO2_SET_ADDRESS, .onRead = NULL, .onWrite = onSetAddress},
};
inline static const MOD_IO2_GPIO_Map_Type PGM1_JUMPER = {
.port = GPIOD, .pin = GPIO_Pin_1, .adc = 255, .tim = NULL, .tch = 255
@ -203,6 +172,40 @@ public:
static void onRegisterSet(uint8_t reg);
static uint8_t onRegRead(uint8_t reg, uint8_t offset);
static void onRegWrite(uint8_t reg, uint8_t offset, uint8_t data);
static void onRelayOn(uint8_t reg, uint8_t offset, uint8_t data);
static void onRelayOff(uint8_t reg, uint8_t offset, uint8_t data);
protected:
inline static const MOD_IO2_REG_Map_Type REG_MAP[MOD_IO2_REG_COUNT] = {
{.reg = MOD_IO2_SET_DIR, .onRead = onGetDir, .onWrite = onSetDir},
{.reg = MOD_IO2_SET_OUT, .onRead = onGetLevel, .onWrite = onSetLevel},
{.reg = MOD_IO2_GET_IN, .onRead = onGetLevel, .onWrite = NULL},
{.reg = MOD_IO2_SET_PULL_UP, .onRead = onGetPullUp, .onWrite = onSetPullUp},
// Analog input
{.reg = MOD_IO2_GET_ANALOG0, .onRead = onAnalogGet, .onWrite = NULL},
{.reg = MOD_IO2_GET_ANALOG5, .onRead = onAnalogGet, .onWrite = NULL},
{.reg = MOD_IO2_GET_ANALOG6, .onRead = onAnalogGet, .onWrite = NULL},
{.reg = MOD_IO2_GET_BOARD_ID, .onRead = onGetBoardID, .onWrite = NULL},
{.reg = MOD_IO2_GET_VERSION, .onRead = onGetVersion, .onWrite = NULL},
{.reg = MOD_IO2_RELAY_STATE, .onRead = onGetRelayState, .onWrite = onSetRelayState},
{.reg = MOD_IO2_RELAY_ON, .onRead = onGetRelayState, .onWrite = onRelayOn},
{.reg = MOD_IO2_RELAY_OFF, .onRead = onGetRelayOff, .onWrite = onRelayOff},
{.reg = MOD_IO2_RELAY_STATE_GET, .onRead = onGetRelayState, .onWrite = NULL},
// PWM
{.reg = MOD_IO2_SET_PWM_OFF, .onRead = NULL, .onWrite = onSetPWM},
{.reg = MOD_IO2_SET_PWM1, .onRead = NULL, .onWrite = onSetPWM},
{.reg = MOD_IO2_SET_PWM2, .onRead = NULL, .onWrite = onSetPWM},
// DAC is NOT available
{.reg = 0x60, .onRead = NULL, .onWrite = NULL},
{.reg = MOD_IO2_SET_ADDRESS, .onRead = NULL, .onWrite = onSetAddress},
};
};
#endif /* __MOD_IO2_H */