Skip to content

Commit c828d2c

Browse files
NVIC ICER now clears the bit in NVIC ISER
1 parent f3ca9fc commit c828d2c

1 file changed

Lines changed: 23 additions & 1 deletion

File tree

Inc/MockedDrivers/NVIC.hpp

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,34 @@
44
#include "MockedDrivers/common.hpp"
55
#include "MockedDrivers/compiler_specific.hpp"
66

7+
#include "MockedDrivers/Register.hpp"
8+
9+
enum class NVICReg {
10+
Reg_ISER, Reg_ICER, Reg_ISPR, Reg_ICPR, Reg_IABR, Reg_IP,
11+
};
12+
13+
template<NVICReg Reg>
14+
class NVICRegister : public RegisterBase<NVICReg, Reg> {
15+
public:
16+
using RegisterBase<NVICReg, Reg>::RegisterBase;
17+
using RegisterBase<NVICReg, Reg>::operator=;
18+
};
19+
20+
721
class NVIC_Type
822
{
23+
struct ICER_Register : public RegisterBase<NVICReg, NVICReg::Reg_ICER> {
24+
ICER_Register& operator=(uint32_t val) {
25+
volatile uint32_t *ISER_offset = (volatile uint32_t*)((volatile uint8_t*)&this->reg - offsetof(NVIC_Type, ICER));
26+
*ISER_offset = *ISER_offset & ~val;
27+
return *this;
28+
}
29+
};
30+
931
public:
1032
volatile uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */
1133
uint32_t RESERVED0[24U];
12-
volatile uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */
34+
ICER_Register ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */
1335
uint32_t RESERVED1[24U];
1436
volatile uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */
1537
uint32_t RESERVED2[24U];

0 commit comments

Comments
 (0)