The hal-avr-mega-spi is a lightweight spi hardware abstraction library for AVR ATmega microcontrollers. It provides a clean interface for spi initialization and communication while hiding direct register-level interaction from higher software layers. The library is intended for projects that want to separate low-level device startup code from application logic and establish a small, reusable system layer for AVR targets.
SPImaster configuration for AVRATmegadevices.SPImaster communication for AVRATmegadevices.- Encapsulation of low-level register access.
- Compact and reusable API for embedded projects.
- Foundation for layered HAL architectures.
The
hal-avr-mega-spilibrary reduces coupling by providing a focused interface for essentialspisystem services. This improves portability inside a project, keeps startup code organized, and makes higher-level modules easier to maintain.
hal/
├── common/
| ├── enums/
| | └── SPI_enums.h
| └── macros/
| └── PORT_macros.h
└── avr/
└── spi/
├── spi.c
└── spi.h
The library can be downloaded (zip or tar), cloned or used as submodule in a project.
| Type | File | Description |
|---|---|---|
| Library | zip / tar | AVR spi library |
mkdir -p ./hal/
git clone https://github.com/0x007E/hal-common.git ./hal
mv ./hal/hal-common ./hal/common
mkdir -p ./hal/avr
git clone https://github.com/0x007E/hal-avr-mega-spi.git ./hal/avr
mv ./hal/avr/hal-avr-mega-spi ./hal/avr/spigit submodule add https://github.com/0x007E/hal-common.git ./hal/common
git submodule add https://github.com/0x007E/hal-avr-mega-spi.git ./hal/avr/spiAdditional parameters like spi clock speed, prescaler, pin definitions and many more can be setup in the header file. A user friendly description can be found here.
#include "../hal/avr/spi/spi.h"
int main(void)
{
spi_init(SPI_MSB, SPI_Rising, SPI_Rising);
while (1)
{
spi_select(SPI_Enable);
unsigned char data = 0x00;
data = spi_transfer(data);
spi_select(SPI_Disable);
}
}| Type | Link | Description |
|---|---|---|
| AVR-Series | ATmega16A datasheet |
R. GAECHTER
