fix systick, i2c interrupt handlers not defined as interrupt

This commit is contained in:
true 2024-10-25 17:28:56 -07:00
parent 8d82d83568
commit 56cd06876a
3 changed files with 9 additions and 5 deletions

View File

@ -31,6 +31,7 @@ void HardFault_Handler(void)
while (1);
}
__attribute__((interrupt("WCH-Interrupt-fast")))
void SysTick_Handler(void)
{
// ---- PROCESS UI AND COMMS

View File

@ -9,7 +9,8 @@
* some notes:
* - writing does not loop; if writing to the end then new writes will cause an error interrupt.
* - added write protection for first 16 bytes.
* - many registers will only commit to action upon valid I2C stop received.
* - the code don't send NACKs on invalid writes.
* - write registers will only commit to action upon valid I2C stop received.
*
*
* register map:
@ -129,8 +130,8 @@ void i2cs_write_cb(uint16_t initial_reg, uint16_t last_reg)
// error - see i2c_slave.h for error types
void i2cs_werr_cb(uint16_t reg, uint8_t data, uint8_t error)
{
i2cs_reg[0x0d]++;
if (!i2cs_reg[0x0d]) i2cs_reg[0x0c]++;
i2cs_reg[REG_WERR_LO]++;
if (!i2cs_reg[REG_WERR_LO]) i2cs_reg[REG_WERR_HI]++;
}
// called upon every register read
@ -208,7 +209,7 @@ void I2C1_EV_IRQHandler(void)
i2cs_state.position = i2cs_state.offset; // Reset position
}
if (STAR1 & I2C_STAR1_RXNE) { // Write event
if (STAR1 & I2C_STAR1_RXNE) { // Write from master event
if (i2cs_state.first_write == 2) { // low address byte written; set the offset
i2cs_state.offset = i2cs_state.offset | I2C1->DATAR;
i2cs_state.position = i2cs_state.offset;
@ -240,7 +241,7 @@ void I2C1_EV_IRQHandler(void)
}
}
if (STAR1 & I2C_STAR1_TXE) { // Read event
if (STAR1 & I2C_STAR1_TXE) { // Read to master event
i2cs_state.writing = 0;
if (i2cs_state.position < i2cs_state.reg_len) {
I2C1->DATAR = i2cs_state.reg_file[i2cs_state.position];
@ -262,6 +263,7 @@ void I2C1_EV_IRQHandler(void)
}
}
__attribute__((interrupt("WCH-Interrupt-fast")))
void I2C1_ER_IRQHandler(void)
{
uint16_t STAR1 = I2C1->STAR1;

View File

@ -140,6 +140,7 @@ int main(void)
exti_nvic_init();
// configure systick
systick_init();
while (1) {
__WFI();