register zugriff verschönert
This commit is contained in:
parent
78e8ab5d1c
commit
72c34b6ba4
|
@ -5,31 +5,30 @@
|
|||
|
||||
const char PLOT_FILE[] = "plot.bin";
|
||||
|
||||
constexpr uint8_t SFR_OFFSET = 0x20;
|
||||
constexpr uint8_t SFR_DDRB = 0x04;
|
||||
constexpr uint8_t SFR_WDTCSR = 0x60;
|
||||
constexpr uint8_t SFR_PORTB = 0x05;
|
||||
|
||||
/*
|
||||
* Dieses Beispiel erzeugt einen 300ms langen Impuls an PB0.
|
||||
*
|
||||
*/
|
||||
int main()
|
||||
{
|
||||
uint8_t DDRB, PORTB;
|
||||
uint8_t tmp;
|
||||
B15F& drv = B15F::getInstance();
|
||||
|
||||
DDRB = drv.getRegister(SFR_DDRB + SFR_OFFSET);
|
||||
DDRB |= (1<<0);
|
||||
drv.setRegister(SFR_DDRB + SFR_OFFSET, DDRB);
|
||||
|
||||
PORTB = drv.getRegister(SFR_PORTB + SFR_OFFSET);
|
||||
PORTB |= (1<<0);
|
||||
drv.setRegister(SFR_PORTB + SFR_OFFSET, PORTB);
|
||||
tmp = drv.getRegister(&DDRB);
|
||||
tmp |= (1<<0);
|
||||
drv.setRegister(&DDRB, tmp);
|
||||
|
||||
|
||||
tmp = drv.getRegister(&PORTB);
|
||||
tmp |= (1<<0);
|
||||
drv.setRegister(&PORTB, tmp);
|
||||
|
||||
|
||||
drv.delay_ms(300);
|
||||
|
||||
PORTB = drv.getRegister(SFR_PORTB + SFR_OFFSET);
|
||||
PORTB &= ~(1<<0);
|
||||
drv.setRegister(SFR_PORTB + SFR_OFFSET, PORTB);
|
||||
|
||||
tmp = drv.getRegister(&PORTB);
|
||||
tmp &= ~(1<<0);
|
||||
drv.setRegister(&PORTB, tmp);
|
||||
}
|
||||
|
|
|
@ -393,14 +393,14 @@ bool B15F::pwmSetValue(uint8_t value)
|
|||
return aw == MSG_OK;
|
||||
}
|
||||
|
||||
bool B15F::setRegister(uint8_t adr, uint8_t val)
|
||||
bool B15F::setRegister(volatile uint8_t* adr, uint8_t val)
|
||||
{
|
||||
usart.clearInputBuffer();
|
||||
|
||||
uint8_t rq[] =
|
||||
{
|
||||
RQ_SET_REG,
|
||||
adr,
|
||||
static_cast<uint8_t>(reinterpret_cast<size_t>(adr)),
|
||||
val
|
||||
};
|
||||
|
||||
|
@ -411,14 +411,14 @@ bool B15F::setRegister(uint8_t adr, uint8_t val)
|
|||
return aw == val;
|
||||
}
|
||||
|
||||
uint8_t B15F::getRegister(uint8_t adr)
|
||||
uint8_t B15F::getRegister(volatile uint8_t* adr)
|
||||
{
|
||||
usart.clearInputBuffer();
|
||||
|
||||
uint8_t rq[] =
|
||||
{
|
||||
RQ_GET_REG,
|
||||
adr
|
||||
static_cast<uint8_t>(reinterpret_cast<size_t>(adr))
|
||||
};
|
||||
|
||||
usart.transmit(&rq[0], 0, sizeof(rq));
|
||||
|
|
|
@ -18,6 +18,11 @@
|
|||
#include "driverexception.h"
|
||||
#include "timeoutexception.h"
|
||||
|
||||
// wichtig für die Register-Zugriffe
|
||||
#define _AVR_IO_H_ 1 // Erzwinge die Inklusion
|
||||
#include "/usr/lib/avr/include/avr/sfr_defs.h"
|
||||
#include "/usr/lib/avr/include/avr/iom1284p.h"
|
||||
|
||||
typedef std::function<void(std::exception&)> errorhandler_t;
|
||||
|
||||
|
||||
|
@ -217,14 +222,14 @@ public:
|
|||
* \param val Neuer Wert für das Register
|
||||
* \throws DriverException
|
||||
*/
|
||||
bool setRegister(uint8_t adr, uint8_t val);
|
||||
bool setRegister(volatile uint8_t* adr, uint8_t val);
|
||||
|
||||
/**
|
||||
* Liefert den Wert eines MCU Registers.
|
||||
* \param adr Speicheradresse des Registers
|
||||
* \throws DriverException
|
||||
*/
|
||||
uint8_t getRegister(uint8_t adr);
|
||||
uint8_t getRegister(volatile uint8_t* adr);
|
||||
|
||||
/*************************/
|
||||
|
||||
|
|
Loading…
Reference in a new issue