arch/arm/src/stm32: Added progmem interface support for STM32F20XX
This commit is contained in:
parent
5c060f76eb
commit
a7b2d7104a
@ -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) */
|
||||
|
Loading…
Reference in New Issue
Block a user