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"; 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. * Dieses Beispiel erzeugt einen 300ms langen Impuls an PB0.
* *
*/ */
int main() int main()
{ {
uint8_t DDRB, PORTB; uint8_t tmp;
B15F& drv = B15F::getInstance(); 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); tmp = drv.getRegister(&DDRB);
PORTB |= (1<<0); tmp |= (1<<0);
drv.setRegister(SFR_PORTB + SFR_OFFSET, PORTB); drv.setRegister(&DDRB, tmp);
tmp = drv.getRegister(&PORTB);
tmp |= (1<<0);
drv.setRegister(&PORTB, tmp);
drv.delay_ms(300); drv.delay_ms(300);
PORTB = drv.getRegister(SFR_PORTB + SFR_OFFSET);
PORTB &= ~(1<<0); tmp = drv.getRegister(&PORTB);
drv.setRegister(SFR_PORTB + SFR_OFFSET, PORTB); tmp &= ~(1<<0);
drv.setRegister(&PORTB, tmp);
} }

View file

@ -393,14 +393,14 @@ bool B15F::pwmSetValue(uint8_t value)
return aw == MSG_OK; 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(); usart.clearInputBuffer();
uint8_t rq[] = uint8_t rq[] =
{ {
RQ_SET_REG, RQ_SET_REG,
adr, static_cast<uint8_t>(reinterpret_cast<size_t>(adr)),
val val
}; };
@ -411,14 +411,14 @@ bool B15F::setRegister(uint8_t adr, uint8_t val)
return aw == val; return aw == val;
} }
uint8_t B15F::getRegister(uint8_t adr) uint8_t B15F::getRegister(volatile uint8_t* adr)
{ {
usart.clearInputBuffer(); usart.clearInputBuffer();
uint8_t rq[] = uint8_t rq[] =
{ {
RQ_GET_REG, RQ_GET_REG,
adr static_cast<uint8_t>(reinterpret_cast<size_t>(adr))
}; };
usart.transmit(&rq[0], 0, sizeof(rq)); usart.transmit(&rq[0], 0, sizeof(rq));

View file

@ -18,6 +18,11 @@
#include "driverexception.h" #include "driverexception.h"
#include "timeoutexception.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; typedef std::function<void(std::exception&)> errorhandler_t;
@ -217,14 +222,14 @@ public:
* \param val Neuer Wert für das Register * \param val Neuer Wert für das Register
* \throws DriverException * \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. * Liefert den Wert eines MCU Registers.
* \param adr Speicheradresse des Registers * \param adr Speicheradresse des Registers
* \throws DriverException * \throws DriverException
*/ */
uint8_t getRegister(uint8_t adr); uint8_t getRegister(volatile uint8_t* adr);
/*************************/ /*************************/