register zugriff verschönert

This commit is contained in:
Tristan Krause 2019-06-07 10:34:08 +02:00
parent 78e8ab5d1c
commit 72c34b6ba4
3 changed files with 25 additions and 21 deletions

View file

@ -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);
}

View file

@ -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));

View file

@ -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);
/*************************/