248 lines
7.8 KiB
C
248 lines
7.8 KiB
C
/*******************************************************************************
|
|
* Copyright 2019-2020 Microchip FPGA Embedded Systems Solutions.
|
|
*
|
|
* SPDX-License-Identifier: MIT
|
|
*
|
|
* MPFS HAL Embedded Software
|
|
*
|
|
*/
|
|
/***************************************************************************//**
|
|
*
|
|
* Hardware registers access functions.
|
|
* The implementation of these function is platform and tool-chain specific.
|
|
* The functions declared here are implemented using assembler as part of the
|
|
* processor/tool-chain specific HAL.
|
|
*
|
|
*/
|
|
#ifndef HW_REG_ACCESS
|
|
#define HW_REG_ACCESS
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
#include "cpu_types.h"
|
|
/***************************************************************************//**
|
|
* HW_set_32bit_reg is used to write the content of a 32 bits wide peripheral
|
|
* register.
|
|
*
|
|
* @param reg_addr Address in the processor's memory map of the register to
|
|
* write.
|
|
* @param value Value to be written into the peripheral register.
|
|
*/
|
|
void
|
|
HW_set_32bit_reg
|
|
(
|
|
addr_t reg_addr,
|
|
uint32_t value
|
|
);
|
|
|
|
/***************************************************************************//**
|
|
* HW_get_32bit_reg is used to read the content of a 32 bits wide peripheral
|
|
* register.
|
|
*
|
|
* @param reg_addr Address in the processor's memory map of the register to
|
|
* read.
|
|
* @return 32 bits value read from the peripheral register.
|
|
*/
|
|
uint32_t
|
|
HW_get_32bit_reg
|
|
(
|
|
addr_t reg_addr
|
|
);
|
|
|
|
/***************************************************************************//**
|
|
* HW_set_32bit_reg_field is used to set the content of a field in a 32 bits
|
|
* wide peripheral register.
|
|
*
|
|
* @param reg_addr Address in the processor's memory map of the register to
|
|
* be written.
|
|
* @param shift Bit offset of the register field to be read within the
|
|
* register.
|
|
* @param mask Bit mask to be applied to the raw register value to filter
|
|
* out the other register fields values.
|
|
* @param value Value to be written in the specified field.
|
|
*/
|
|
void
|
|
HW_set_32bit_reg_field
|
|
(
|
|
addr_t reg_addr,
|
|
int_fast8_t shift,
|
|
uint32_t mask,
|
|
uint32_t value
|
|
);
|
|
|
|
/***************************************************************************//**
|
|
* HW_get_32bit_reg_field is used to read the content of a field out of a
|
|
* 32 bits wide peripheral register.
|
|
*
|
|
* @param reg_addr Address in the processor's memory map of the register to
|
|
* read.
|
|
* @param shift Bit offset of the register field to be written within the
|
|
* register.
|
|
* @param mask Bit mask to be applied to the raw register value to filter
|
|
* out the other register fields values.
|
|
*
|
|
* @return 32 bits value containing the register field value specified
|
|
* as parameter.
|
|
*/
|
|
uint32_t
|
|
HW_get_32bit_reg_field
|
|
(
|
|
addr_t reg_addr,
|
|
int_fast8_t shift,
|
|
uint32_t mask
|
|
);
|
|
|
|
/***************************************************************************//**
|
|
* HW_set_16bit_reg is used to write the content of a 16 bits wide peripheral
|
|
* register.
|
|
*
|
|
* @param reg_addr Address in the processor's memory map of the register to
|
|
* write.
|
|
* @param value Value to be written into the peripheral register.
|
|
*/
|
|
void
|
|
HW_set_16bit_reg
|
|
(
|
|
addr_t reg_addr,
|
|
uint_fast16_t value
|
|
);
|
|
|
|
/***************************************************************************//**
|
|
* HW_get_16bit_reg is used to read the content of a 16 bits wide peripheral
|
|
* register.
|
|
*
|
|
* @param reg_addr Address in the processor's memory map of the register to
|
|
* read.
|
|
* @return 16 bits value read from the peripheral register.
|
|
*/
|
|
uint16_t
|
|
HW_get_16bit_reg
|
|
(
|
|
addr_t reg_addr
|
|
);
|
|
|
|
/***************************************************************************//**
|
|
* HW_set_16bit_reg_field is used to set the content of a field in a 16 bits
|
|
* wide peripheral register.
|
|
*
|
|
* @param reg_addr Address in the processor's memory map of the register to
|
|
* be written.
|
|
* @param shift Bit offset of the register field to be read within the
|
|
* register.
|
|
* @param mask Bit mask to be applied to the raw register value to filter
|
|
* out the other register fields values.
|
|
* @param value Value to be written in the specified field.
|
|
*/
|
|
void HW_set_16bit_reg_field
|
|
(
|
|
addr_t reg_addr,
|
|
int_fast8_t shift,
|
|
uint_fast16_t mask,
|
|
uint_fast16_t value
|
|
);
|
|
|
|
/***************************************************************************//**
|
|
* HW_get_16bit_reg_field is used to read the content of a field from a
|
|
* 16 bits wide peripheral register.
|
|
*
|
|
* @param reg_addr Address in the processor's memory map of the register to
|
|
* read.
|
|
* @param shift Bit offset of the register field to be written within the
|
|
* register.
|
|
* @param mask Bit mask to be applied to the raw register value to filter
|
|
* out the other register fields values.
|
|
*
|
|
* @return 16 bits value containing the register field value specified
|
|
* as parameter.
|
|
*/
|
|
uint16_t HW_get_16bit_reg_field
|
|
(
|
|
addr_t reg_addr,
|
|
int_fast8_t shift,
|
|
uint_fast16_t mask
|
|
);
|
|
|
|
/***************************************************************************//**
|
|
* HW_set_8bit_reg is used to write the content of a 8 bits wide peripheral
|
|
* register.
|
|
*
|
|
* @param reg_addr Address in the processor's memory map of the register to
|
|
* write.
|
|
* @param value Value to be written into the peripheral register.
|
|
*/
|
|
void
|
|
HW_set_8bit_reg
|
|
(
|
|
addr_t reg_addr,
|
|
uint_fast8_t value
|
|
);
|
|
|
|
/***************************************************************************//**
|
|
* HW_get_8bit_reg is used to read the content of a 8 bits wide peripheral
|
|
* register.
|
|
*
|
|
* @param reg_addr Address in the processor's memory map of the register to
|
|
* read.
|
|
* @return 8 bits value read from the peripheral register.
|
|
*/
|
|
uint8_t
|
|
HW_get_8bit_reg
|
|
(
|
|
addr_t reg_addr
|
|
);
|
|
|
|
/***************************************************************************//**
|
|
* HW_set_8bit_reg_field is used to set the content of a field in a 8 bits
|
|
* wide peripheral register.
|
|
*
|
|
* @param reg_addr Address in the processor's memory map of the register to
|
|
* be written.
|
|
* @param shift Bit offset of the register field to be read within the
|
|
* register.
|
|
* @param mask Bit mask to be applied to the raw register value to filter
|
|
* out the other register fields values.
|
|
* @param value Value to be written in the specified field.
|
|
*/
|
|
void HW_set_8bit_reg_field
|
|
(
|
|
addr_t reg_addr,
|
|
int_fast8_t shift,
|
|
uint_fast8_t mask,
|
|
uint_fast8_t value
|
|
);
|
|
|
|
/***************************************************************************//**
|
|
* HW_get_8bit_reg_field is used to read the content of a field from a
|
|
* 8 bits wide peripheral register.
|
|
*
|
|
* @param reg_addr Address in the processor's memory map of the register to
|
|
* read.
|
|
* @param shift Bit offset of the register field to be written within the
|
|
* register.
|
|
* @param mask Bit mask to be applied to the raw register value to filter
|
|
* out the other register fields values.
|
|
*
|
|
* @return 8 bits value containing the register field value specified
|
|
* as parameter.
|
|
*/
|
|
uint8_t HW_get_8bit_reg_field
|
|
(
|
|
addr_t reg_addr,
|
|
int_fast8_t shift,
|
|
uint_fast8_t mask
|
|
);
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* HW_REG_ACCESS */
|
|
|
|
|
|
|