26 #ifndef EXTERNALIRQ_INCLUDED 27 #define EXTERNALIRQ_INCLUDED 66 virtual void Reset(
void);
128 void ChangeMode(
unsigned char m);
129 bool fireAgain(
void);
130 bool mustSetFlagOnFire(
void);
133 void PinStateHasChanged(
Pin *pin);
149 void PinStateHasChanged(
Pin *pin);
virtual void ClearIrqFlag(unsigned int vector)
Basic AVR device, contains the core functionality.
ExternalIRQHandler(AvrDevice *core, HWIrqSystem *irqsys, IOSpecialReg *mask, IOSpecialReg *flag)
Pin class, handles input and output to external parts.
std::vector< int > irqbits
mapping index to mask bit
std::vector< ExternalIRQ * > extirqs
list with external IRQ's
void registerIrq(int vector, int irqBit, ExternalIRQ *extirq)
Defines a Port, e.g. a hardware device for GPIO.
int bitshift
how many bits to shift to get mode from control register
ExternalIRQHandler * handler
reference to IRQ handler
std::map< int, int > vector2idx
mapping irq vector to index
void setHandlerIndex(ExternalIRQHandler *h, int idx)
register handler and index for signaling interrupt
Handler for external IRQ's to communicate with IRQ system and mask/flag registers.
IOSpecialReg * flag_reg
the interrupt flag register
virtual void ChangeMode(unsigned char m)
Handle change of control register.
Interface class to connect hardware units to control registers.
bool twoBitMode
IRQ is controlled by 2 mode bits.
virtual bool mustSetFlagOnFire(void)
does fire interrupt set the interrupt flag? (level interrupt does this not!)
bool mode8515
at90s8515 don't support MODE_EDGE_ALL
virtual void ResetMode(void)
Reset mode.
virtual bool fireAgain(void)
does the interrupt source fire again? (for interrupt on level)
Basic handler for one external IRQ, handles control register.
void fireInterrupt(void)
fire a interrupt
virtual unsigned char set_from_reg(const IOSpecialReg *reg, unsigned char nv)
bool state
saved state from pin
IOSpecialReg * mask_reg
the interrupt mask register
void fireInterrupt(int idx)
fire a interupt from IRQ with index
unsigned char mask
mask for extract mode from control register
int handlerIndex
my own index on handler instance
std::vector< int > vectors
mapping index to vector
unsigned char irq_mask
mask register value for registered IRQ's
unsigned int portSize
how much pins the port controls
HWIrqSystem * irqsystem
pointer to irq system
unsigned char irq_flag
flag register value for registered IRQ's
virtual unsigned char get_from_client(const IOSpecialReg *reg, unsigned char v)
unsigned char reg_mask
mask for relevant bits in flag and mask register
virtual bool LevelInterruptPending(unsigned int vector)
Pin-change interrupt on all pins of a port.
virtual bool IsLevelInterrupt(unsigned int vector)
unsigned char mode
control mode from control register
External interrupt (INT0, INT1...) on a single pin, one and 2 bit configuration.