arch: expand SPI API to handle slave mode of operation

Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
arch: move SPI setup code into a generic helper

Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
arch: add timer1_disable helper for ATmega48P

Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
arch: add SPI API

Add simple init master and tx byte helpers.

Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
arch: add a timer1 ATmega48P API

This adds a simple to use function that sets up timer1.

Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
arch: include mcu-specific headers after defining the various macros

This allows the mcu-specific headers to use them.

Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
arch: make TCNT1, ICR1, OCR1A, and OCR1B accessible as uint16_t

Use unions to make the registers accessible as both uint8_t low/high pair as
well as a uint16_t.

Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
arch: include string.h for memset, etc.

Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
Add generic INTERRUPT_{EN,DIS}ABLE macros

Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
build: warn if switch of enum doesn't list all values

Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
arch: define REG_PCICR_PCIE[0-2] on ATmega48P

Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
arch: define friedlier macros for TCCR1B's ICES field on ATmega48P

Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
arch.h: add ARRAY_LEN

Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
arch: add MCU_RAW_FREQ for ATmega48P

Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
arch: move most of generic code into arch/generic_*.h

Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
arch: add mcu_set_clock_prescalar helper

A more advanced version would disable interrupts if they are enabled to
avoid an interrupt mid-function breaking the back-to-back instruction
requirement.

Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
arch: add __set_pin static inline

This is a low-overhead function to set/clear a GPIO pin.

Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
arch: add PIN_{INPUT,OUTPUT}_* macros

These can be used to construct the PORT and DDR register values in more
semantically readable way.

Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
arch: add ATmega48P EECR register defines

Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
arch: fix ATmega48P's eearh register name

There was a typo.

Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
Next