Suppress new GCC 12 warning (#842)
This commit is contained in:
parent
b3c56e7169
commit
9644399993
@ -65,13 +65,13 @@ bool rtc_set_datetime(datetime_t *t) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Write to setup registers
|
// Write to setup registers
|
||||||
rtc_hw->setup_0 = (((uint)t->year) << RTC_SETUP_0_YEAR_LSB ) |
|
rtc_hw->setup_0 = (((uint32_t)t->year) << RTC_SETUP_0_YEAR_LSB ) |
|
||||||
(((uint)t->month) << RTC_SETUP_0_MONTH_LSB) |
|
(((uint32_t)t->month) << RTC_SETUP_0_MONTH_LSB) |
|
||||||
(((uint)t->day) << RTC_SETUP_0_DAY_LSB);
|
(((uint32_t)t->day) << RTC_SETUP_0_DAY_LSB);
|
||||||
rtc_hw->setup_1 = (((uint)t->dotw) << RTC_SETUP_1_DOTW_LSB) |
|
rtc_hw->setup_1 = (((uint32_t)t->dotw) << RTC_SETUP_1_DOTW_LSB) |
|
||||||
(((uint)t->hour) << RTC_SETUP_1_HOUR_LSB) |
|
(((uint32_t)t->hour) << RTC_SETUP_1_HOUR_LSB) |
|
||||||
(((uint)t->min) << RTC_SETUP_1_MIN_LSB) |
|
(((uint32_t)t->min) << RTC_SETUP_1_MIN_LSB) |
|
||||||
(((uint)t->sec) << RTC_SETUP_1_SEC_LSB);
|
(((uint32_t)t->sec) << RTC_SETUP_1_SEC_LSB);
|
||||||
|
|
||||||
// Load setup values into rtc clock domain
|
// Load setup values into rtc clock domain
|
||||||
rtc_hw->ctrl = RTC_CTRL_LOAD_BITS;
|
rtc_hw->ctrl = RTC_CTRL_LOAD_BITS;
|
||||||
@ -95,13 +95,13 @@ bool rtc_get_datetime(datetime_t *t) {
|
|||||||
uint32_t rtc_0 = rtc_hw->rtc_0;
|
uint32_t rtc_0 = rtc_hw->rtc_0;
|
||||||
uint32_t rtc_1 = rtc_hw->rtc_1;
|
uint32_t rtc_1 = rtc_hw->rtc_1;
|
||||||
|
|
||||||
t->dotw = (rtc_0 & RTC_RTC_0_DOTW_BITS ) >> RTC_RTC_0_DOTW_LSB;
|
t->dotw = (int8_t) ((rtc_0 & RTC_RTC_0_DOTW_BITS ) >> RTC_RTC_0_DOTW_LSB);
|
||||||
t->hour = (rtc_0 & RTC_RTC_0_HOUR_BITS ) >> RTC_RTC_0_HOUR_LSB;
|
t->hour = (int8_t) ((rtc_0 & RTC_RTC_0_HOUR_BITS ) >> RTC_RTC_0_HOUR_LSB);
|
||||||
t->min = (rtc_0 & RTC_RTC_0_MIN_BITS ) >> RTC_RTC_0_MIN_LSB;
|
t->min = (int8_t) ((rtc_0 & RTC_RTC_0_MIN_BITS ) >> RTC_RTC_0_MIN_LSB);
|
||||||
t->sec = (rtc_0 & RTC_RTC_0_SEC_BITS ) >> RTC_RTC_0_SEC_LSB;
|
t->sec = (int8_t) ((rtc_0 & RTC_RTC_0_SEC_BITS ) >> RTC_RTC_0_SEC_LSB);
|
||||||
t->year = (rtc_1 & RTC_RTC_1_YEAR_BITS ) >> RTC_RTC_1_YEAR_LSB;
|
t->year = (int16_t) ((rtc_1 & RTC_RTC_1_YEAR_BITS ) >> RTC_RTC_1_YEAR_LSB);
|
||||||
t->month = (rtc_1 & RTC_RTC_1_MONTH_BITS) >> RTC_RTC_1_MONTH_LSB;
|
t->month = (int8_t) ((rtc_1 & RTC_RTC_1_MONTH_BITS) >> RTC_RTC_1_MONTH_LSB);
|
||||||
t->day = (rtc_1 & RTC_RTC_1_DAY_BITS ) >> RTC_RTC_1_DAY_LSB;
|
t->day = (int8_t) ((rtc_1 & RTC_RTC_1_DAY_BITS ) >> RTC_RTC_1_DAY_LSB);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -148,13 +148,13 @@ void rtc_set_alarm(datetime_t *t, rtc_callback_t user_callback) {
|
|||||||
rtc_disable_alarm();
|
rtc_disable_alarm();
|
||||||
|
|
||||||
// Only add to setup if it isn't -1
|
// Only add to setup if it isn't -1
|
||||||
rtc_hw->irq_setup_0 = ((t->year < 0) ? 0 : (((uint)t->year) << RTC_IRQ_SETUP_0_YEAR_LSB )) |
|
rtc_hw->irq_setup_0 = ((t->year < 0) ? 0 : (((uint32_t)t->year) << RTC_IRQ_SETUP_0_YEAR_LSB )) |
|
||||||
((t->month < 0) ? 0 : (((uint)t->month) << RTC_IRQ_SETUP_0_MONTH_LSB)) |
|
((t->month < 0) ? 0 : (((uint32_t)t->month) << RTC_IRQ_SETUP_0_MONTH_LSB)) |
|
||||||
((t->day < 0) ? 0 : (((uint)t->day) << RTC_IRQ_SETUP_0_DAY_LSB ));
|
((t->day < 0) ? 0 : (((uint32_t)t->day) << RTC_IRQ_SETUP_0_DAY_LSB ));
|
||||||
rtc_hw->irq_setup_1 = ((t->dotw < 0) ? 0 : (((uint)t->dotw) << RTC_IRQ_SETUP_1_DOTW_LSB)) |
|
rtc_hw->irq_setup_1 = ((t->dotw < 0) ? 0 : (((uint32_t)t->dotw) << RTC_IRQ_SETUP_1_DOTW_LSB)) |
|
||||||
((t->hour < 0) ? 0 : (((uint)t->hour) << RTC_IRQ_SETUP_1_HOUR_LSB)) |
|
((t->hour < 0) ? 0 : (((uint32_t)t->hour) << RTC_IRQ_SETUP_1_HOUR_LSB)) |
|
||||||
((t->min < 0) ? 0 : (((uint)t->min) << RTC_IRQ_SETUP_1_MIN_LSB )) |
|
((t->min < 0) ? 0 : (((uint32_t)t->min) << RTC_IRQ_SETUP_1_MIN_LSB )) |
|
||||||
((t->sec < 0) ? 0 : (((uint)t->sec) << RTC_IRQ_SETUP_1_SEC_LSB ));
|
((t->sec < 0) ? 0 : (((uint32_t)t->sec) << RTC_IRQ_SETUP_1_SEC_LSB ));
|
||||||
|
|
||||||
// Set the match enable bits for things we care about
|
// Set the match enable bits for things we care about
|
||||||
if (t->year >= 0) hw_set_bits(&rtc_hw->irq_setup_0, RTC_IRQ_SETUP_0_YEAR_ENA_BITS);
|
if (t->year >= 0) hw_set_bits(&rtc_hw->irq_setup_0, RTC_IRQ_SETUP_0_YEAR_ENA_BITS);
|
||||||
|
@ -12,9 +12,6 @@
|
|||||||
// Returns the 32 bit pointer into the ROM if found or NULL otherwise.
|
// Returns the 32 bit pointer into the ROM if found or NULL otherwise.
|
||||||
typedef void *(*rom_table_lookup_fn)(uint16_t *table, uint32_t code);
|
typedef void *(*rom_table_lookup_fn)(uint16_t *table, uint32_t code);
|
||||||
|
|
||||||
// Convert a 16 bit pointer stored at the given rom address into a 32 bit pointer
|
|
||||||
#define rom_hword_as_ptr(rom_address) (void *)(uintptr_t)(*(uint16_t *)rom_address)
|
|
||||||
|
|
||||||
void *rom_func_lookup(uint32_t code) {
|
void *rom_func_lookup(uint32_t code) {
|
||||||
return rom_func_lookup_inline(code);
|
return rom_func_lookup_inline(code);
|
||||||
}
|
}
|
||||||
|
@ -116,8 +116,18 @@ bool rom_funcs_lookup(uint32_t *table, unsigned int count);
|
|||||||
// Returns the 32 bit pointer into the ROM if found or NULL otherwise.
|
// Returns the 32 bit pointer into the ROM if found or NULL otherwise.
|
||||||
typedef void *(*rom_table_lookup_fn)(uint16_t *table, uint32_t code);
|
typedef void *(*rom_table_lookup_fn)(uint16_t *table, uint32_t code);
|
||||||
|
|
||||||
|
#if defined(__GNUC__) && (__GNUC__ >= 12)
|
||||||
// Convert a 16 bit pointer stored at the given rom address into a 32 bit pointer
|
// Convert a 16 bit pointer stored at the given rom address into a 32 bit pointer
|
||||||
#define rom_hword_as_ptr(rom_address) (void *)(uintptr_t)(*(uint16_t *)rom_address)
|
static inline void *rom_hword_as_ptr(uint16_t rom_address) {
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Warray-bounds"
|
||||||
|
return (void *)(uintptr_t)*(uint16_t *)(uintptr_t)rom_address;
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
// Convert a 16 bit pointer stored at the given rom address into a 32 bit pointer
|
||||||
|
#define rom_hword_as_ptr(rom_address) (void *)(uintptr_t)(*(uint16_t *)(uintptr_t)(rom_address))
|
||||||
|
#endif
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Lookup a bootrom function by code. This method is forceably inlined into the caller for FLASH/RAM sensitive code usage
|
* \brief Lookup a bootrom function by code. This method is forceably inlined into the caller for FLASH/RAM sensitive code usage
|
||||||
|
@ -336,7 +336,10 @@ uint8_t rp2040_chip_version(void);
|
|||||||
* @return the RP2040 rom version number (1 for RP2040-B0, 2 for RP2040-B1, 3 for RP2040-B2)
|
* @return the RP2040 rom version number (1 for RP2040-B0, 2 for RP2040-B1, 3 for RP2040-B2)
|
||||||
*/
|
*/
|
||||||
static inline uint8_t rp2040_rom_version(void) {
|
static inline uint8_t rp2040_rom_version(void) {
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Warray-bounds"
|
||||||
return *(uint8_t*)0x13;
|
return *(uint8_t*)0x13;
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! \brief No-op function for the body of tight loops
|
/*! \brief No-op function for the body of tight loops
|
||||||
|
Loading…
Reference in New Issue
Block a user