Merge pull request #7601 from roberthartung/cpu_atmega_fix_prr

cpu/atmega: use power.h defines instead of direct register access
This commit is contained in:
Francisco Acosta 2017-09-14 14:18:32 +02:00 committed by GitHub
commit 3bee2c0f82
8 changed files with 6 additions and 18 deletions

View File

@ -133,14 +133,6 @@ extern "C" {
* @{ * @{
*/ */
#define SPI_NUMOF 1 /* set to 0 to disable SPI */ #define SPI_NUMOF 1 /* set to 0 to disable SPI */
#ifdef CPU_ATMEGA328P
#define MEGA_PRR PRR /* Power Reduction Register is PRR */
#endif
#ifdef CPU_ATMEGA2560
#define MEGA_PRR PRR0 /* Power Reduction Register is PRR0 */
#endif
/** @} */ /** @} */
/** /**

View File

@ -101,7 +101,6 @@ extern "C" {
* @{ * @{
*/ */
#define SPI_NUMOF 1 /* set to 0 to disable SPI */ #define SPI_NUMOF 1 /* set to 0 to disable SPI */
#define MEGA_PRR PRR0 /* Power Reduction Register */
/** @} */ /** @} */
/** /**

View File

@ -48,7 +48,6 @@ enum {
*/ */
#define I2C_PORT_REG PORTD #define I2C_PORT_REG PORTD
#define I2C_PIN_MASK (1 << PORTD0) | (1 << PORTD1) #define I2C_PIN_MASK (1 << PORTD0) | (1 << PORTD1)
#define I2C_POWER_REG PRR0
/** @} */ /** @} */
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -50,7 +50,6 @@ enum {
*/ */
#define I2C_PORT_REG PORTD #define I2C_PORT_REG PORTD
#define I2C_PIN_MASK (1 << PORTD0) | (1 << PORTD1) #define I2C_PIN_MASK (1 << PORTD0) | (1 << PORTD1)
#define I2C_POWER_REG PRR0
/** @} */ /** @} */
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -47,7 +47,6 @@ enum {
*/ */
#define I2C_PORT_REG PORTC #define I2C_PORT_REG PORTC
#define I2C_PIN_MASK (1 << PORTC4) | (1 << PORTC5) #define I2C_PIN_MASK (1 << PORTC4) | (1 << PORTC5)
#define I2C_POWER_REG PRR
/** @} */ /** @} */
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -22,6 +22,7 @@
#define ATMEGA_REGS_COMMON_H #define ATMEGA_REGS_COMMON_H
#include <avr/io.h> #include <avr/io.h>
#include <avr/power.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {

View File

@ -251,13 +251,13 @@ int i2c_write_regs(i2c_t dev, uint8_t address, uint8_t reg, const void *data, in
void i2c_poweron(i2c_t dev) void i2c_poweron(i2c_t dev)
{ {
assert(dev < I2C_NUMOF); assert(dev < I2C_NUMOF);
I2C_POWER_REG &= ~(1 << PRTWI); power_twi_enable();
} }
void i2c_poweroff(i2c_t dev) void i2c_poweroff(i2c_t dev)
{ {
assert(dev < I2C_NUMOF); assert(dev < I2C_NUMOF);
I2C_POWER_REG |= (1 << PRTWI); power_twi_disable();
} }
static int _start(uint8_t address, uint8_t rw_flag) static int _start(uint8_t address, uint8_t rw_flag)

View File

@ -42,7 +42,7 @@ void spi_init(spi_t bus)
{ {
assert(bus == 0); assert(bus == 0);
/* power off the SPI peripheral */ /* power off the SPI peripheral */
MEGA_PRR |= (1 << PRSPI); power_spi_disable();
/* trigger the pin configuration */ /* trigger the pin configuration */
spi_init_pins(bus); spi_init_pins(bus);
} }
@ -64,12 +64,11 @@ int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
/* lock the bus and power on the SPI peripheral */ /* lock the bus and power on the SPI peripheral */
mutex_lock(&lock); mutex_lock(&lock);
MEGA_PRR &= ~(1 << PRSPI); power_spi_enable();
/* configure as master, with given mode and clock */ /* configure as master, with given mode and clock */
SPSR = (clk >> S2X_SHIFT); SPSR = (clk >> S2X_SHIFT);
SPCR = ((1 << SPE) | (1 << MSTR) | mode | (clk & CLK_MASK)); SPCR = ((1 << SPE) | (1 << MSTR) | mode | (clk & CLK_MASK));
SPCR |= (1 << SPE);
/* clear interrupt flag by reading SPSR and data register by reading SPDR */ /* clear interrupt flag by reading SPSR and data register by reading SPDR */
(void)SPSR; (void)SPSR;
@ -82,7 +81,7 @@ void spi_release(spi_t bus)
{ {
/* power off and release the bus */ /* power off and release the bus */
SPCR &= ~(1 << SPE); SPCR &= ~(1 << SPE);
MEGA_PRR |= (1 << PRSPI); power_spi_disable();
mutex_unlock(&lock); mutex_unlock(&lock);
} }