arch/arm/src/stm32: Added progmem interface support for STM32F20XX

This commit is contained in:
Dmitriy Linikov 2018-06-05 07:36:49 -06:00 committed by Gregory Nutt
parent 5c060f76eb
commit a7b2d7104a

View File

@ -62,10 +62,11 @@
#include "up_arch.h"
/* Only for the STM32F[1|3|4]0xx family and STM32L15xx. */
/* Only for the STM32F[1|2|3|4]0xx family and STM32L15xx. */
#if defined(CONFIG_STM32_STM32F10XX) || defined(CONFIG_STM32_STM32F30XX) || \
defined (CONFIG_STM32_STM32F4XXX) || defined(CONFIG_STM32_STM32L15XX)
#if defined(CONFIG_STM32_STM32F10XX) || defined(CONFIG_STM32_STM32F20XX) || \
defined(CONFIG_STM32_STM32F30XX) || defined (CONFIG_STM32_STM32F4XXX) || \
defined(CONFIG_STM32_STM32L15XX)
#if defined(CONFIG_STM32_FLASH_CONFIG_DEFAULT) && \
(defined(CONFIG_STM32_STM32F20XX) || defined(CONFIG_STM32_STM32F4XXX))
@ -93,7 +94,7 @@
#if defined(CONFIG_STM32_STM32F10XX) || defined(CONFIG_STM32_STM32F30XX)
# define FLASH_CR_PAGE_ERASE FLASH_CR_PER
# define FLASH_SR_WRITE_PROTECTION_ERROR FLASH_SR_WRPRT_ERR
#elif defined(CONFIG_STM32_STM32F4XXX)
#elif defined(CONFIG_STM32_STM32F20XX) || defined(CONFIG_STM32_STM32F4XXX)
# define FLASH_CR_PAGE_ERASE FLASH_CR_SER
# define FLASH_SR_WRITE_PROTECTION_ERROR FLASH_SR_WRPERR
#elif defined(CONFIG_STM32_STM32L15XX)
@ -432,20 +433,16 @@ ssize_t stm32_eeprom_erase(size_t addr, size_t eraselen)
*
************************************************************************************/
#ifdef CONFIG_STM32_STM32F4XXX
#ifdef defined(CONFIG_STM32_STM32F20XX) || CONFIG_STM32_STM32F4XXX
int stm32_flash_writeprotect(size_t page, bool enabled)
{
uint32_t reg;
uint32_t val;
#ifdef CONFIG_STM32_STM32F4XXX
if (page >= STM32_FLASH_NPAGES)
{
return -EFAULT;
}
#else
# warning missing logic in stm32_flash_writeprotect
#endif
/* Select the register that contains the bit to be changed */
@ -453,7 +450,7 @@ int stm32_flash_writeprotect(size_t page, bool enabled)
{
reg = STM32_FLASH_OPTCR;
}
#if defined(CONFIG_STM32_FLASH_CONFIG_I) && defined(CONFIG_STM32_STM32F4XXX)
#if defined(CONFIG_STM32_FLASH_CONFIG_I)
else
{
reg = STM32_FLASH_OPTCR1;
@ -490,7 +487,7 @@ int stm32_flash_writeprotect(size_t page, bool enabled)
putreg32(val, reg);
/* Trigger programmation */
/* Trigger programming */
modifyreg32(STM32_FLASH_OPTCR, 0, FLASH_OPTCR_OPTSTRT);
@ -545,7 +542,7 @@ size_t up_progmem_getaddress(size_t page)
#endif /* defined(CONFIG_STM32_STM32F10XX) || defined(CONFIG_STM32_STM32F30XX) || \
defined(CONFIG_STM32_STM32L15XX) */
#ifdef CONFIG_STM32_STM32F4XXX
#ifdef defined(CONFIG_STM32_STM32F20XX) || CONFIG_STM32_STM32F4XXX
size_t up_progmem_pagesize(size_t page)
{
static const size_t page_sizes[STM32_FLASH_NPAGES] = STM32_FLASH_SIZES;
@ -605,7 +602,7 @@ size_t up_progmem_getaddress(size_t page)
return base_address;
}
#endif /* defined(CONFIG_STM32_STM32F4XXX) */
#endif /* defined(CONFIG_STM32_STM32F20XX) || defined(CONFIG_STM32_STM32F4XXX) */
size_t up_progmem_npages(void)
{
@ -783,7 +780,7 @@ ssize_t up_progmem_erasepage(size_t page)
sem_lock();
#if !defined(CONFIG_STM32_STM32F4XXX)
#if !defined(CONFIG_STM32_STM32F20XX) && !defined(CONFIG_STM32_STM32F4XXX)
if (!(getreg32(STM32_RCC_CR) & RCC_CR_HSION))
{
sem_unlock();
@ -803,7 +800,7 @@ ssize_t up_progmem_erasepage(size_t page)
page_address = up_progmem_getaddress(page);
putreg32(page_address, STM32_FLASH_AR);
#elif defined(CONFIG_STM32_STM32F4XXX)
#elif defined(CONFIG_STM32_STM32F20XX) || defined(CONFIG_STM32_STM32F4XXX)
modifyreg32(STM32_FLASH_CR, FLASH_CR_SNB_MASK, FLASH_CR_SNB(page));
#endif
@ -851,7 +848,7 @@ ssize_t up_progmem_write(size_t addr, const void *buf, size_t count)
sem_lock();
#if !defined(CONFIG_STM32_STM32F4XXX)
#if !defined(CONFIG_STM32_STM32F20XX) && !defined(CONFIG_STM32_STM32F4XXX)
if (!(getreg32(STM32_RCC_CR) & RCC_CR_HSION))
{
sem_unlock();
@ -869,8 +866,9 @@ ssize_t up_progmem_write(size_t addr, const void *buf, size_t count)
modifyreg32(STM32_FLASH_CR, 0, FLASH_CR_PG);
#if defined(CONFIG_STM32_STM32F4XXX)
#if defined(CONFIG_STM32_STM32F20XX) || defined(CONFIG_STM32_STM32F4XXX)
/* TODO: implement up_progmem_write() to support other sizes than 16-bits */
modifyreg32(STM32_FLASH_CR, FLASH_CR_PSIZE_MASK, FLASH_CR_PSIZE_X16);
#endif
@ -910,5 +908,6 @@ ssize_t up_progmem_write(size_t addr, const void *buf, size_t count)
}
#endif /* !defined(CONFIG_STM32_STM32L15XX) */
#endif /* defined(CONFIG_STM32_STM32F10XX) || defined(CONFIG_STM32_STM32F30XX) || \
defined(CONFIG_STM32_STM32F4XXX) || defined(CONFIG_STM32_STM32L15XX) */
#endif /* defined(CONFIG_STM32_STM32F10XX) || defined(CONFIG_STM32_STM32F20XX) || \
* defined(CONFIG_STM32_STM32F30XX) || defined(CONFIG_STM32_STM32F4XXX) || \
* defined(CONFIG_STM32_STM32L15XX) */