summaryrefslogtreecommitdiff
path: root/src/stm
diff options
context:
space:
mode:
Diffstat (limited to 'src/stm')
-rw-r--r--src/stm/Makefile.defs4
-rw-r--r--src/stm/ao_eeprom_stm.c20
-rw-r--r--src/stm/ao_i2c_stm.c2
-rw-r--r--src/stm/ao_spi_stm.c2
-rw-r--r--src/stm/ao_timer.c11
5 files changed, 19 insertions, 20 deletions
diff --git a/src/stm/Makefile.defs b/src/stm/Makefile.defs
index 3ce6eead..c8bb7d70 100644
--- a/src/stm/Makefile.defs
+++ b/src/stm/Makefile.defs
@@ -13,8 +13,8 @@ vpath ao-make-product.5c ../util
objcopy -O ihex $*.elf $@
CC=arm-none-eabi-gcc
-SAT=/home/keithp/sat
-SAT_CLIB=$(SAT)/lib/pdclib.a
+SAT=/opt/cortex
+SAT_CLIB=$(SAT)/lib/pdclib-cortex-m3.a
SAT_CFLAGS=-I$(SAT)/include
ifndef VERSION
diff --git a/src/stm/ao_eeprom_stm.c b/src/stm/ao_eeprom_stm.c
index 5a75a97d..58783f1a 100644
--- a/src/stm/ao_eeprom_stm.c
+++ b/src/stm/ao_eeprom_stm.c
@@ -55,10 +55,16 @@ ao_storage_erase(ao_pos_t pos) __reentrant
static void
ao_intflash_unlock(void)
{
+ /* Disable backup write protection */
+ stm_pwr.cr |= (1 << STM_PWR_CR_DBP);
+
/* Unlock Data EEPROM and FLASH_PECR register */
stm_flash.pekeyr = STM_FLASH_PEKEYR_PEKEY1;
stm_flash.pekeyr = STM_FLASH_PEKEYR_PEKEY2;
+ if (stm_flash.pecr & (1 << STM_FLASH_PECR_PELOCK))
+ printf ("eeprom unlock failed\n");
+
/* Configure the FTDW bit (FLASH_PECR[8]) to execute
* word write, whatever the previous value of the word
* being written to
@@ -68,8 +74,8 @@ ao_intflash_unlock(void)
(0 << STM_FLASH_PECR_EOPIE) |
(0 << STM_FLASH_PECR_FPRG) |
(0 << STM_FLASH_PECR_ERASE) |
- (0 << STM_FLASH_PECR_FTDW) |
- (1 << STM_FLASH_PECR_DATA) |
+ (1 << STM_FLASH_PECR_FTDW) |
+ (0 << STM_FLASH_PECR_DATA) |
(0 << STM_FLASH_PECR_PROG) |
(0 << STM_FLASH_PECR_OPTLOCK) |
(0 << STM_FLASH_PECR_PRGLOCK) |
@@ -97,15 +103,9 @@ ao_intflash_write32(uint16_t pos, uint32_t w)
addr = (uint32_t *) (stm_eeprom + pos);
- /* Erase previous word */
- *addr = 0;
+ /* Write a word to a valid address in the data EEPROM */
+ *addr = w;
ao_intflash_wait();
-
- if (w) {
- /* Write a word to a valid address in the data EEPROM */
- *addr = w;
- ao_intflash_wait();
- }
}
static void
diff --git a/src/stm/ao_i2c_stm.c b/src/stm/ao_i2c_stm.c
index 779e2275..809b5c6f 100644
--- a/src/stm/ao_i2c_stm.c
+++ b/src/stm/ao_i2c_stm.c
@@ -36,7 +36,7 @@ static uint16_t ao_i2c_addr[STM_NUM_I2C];
uint8_t ao_i2c_mutex[STM_NUM_I2C];
# define I2C_HIGH_SLOW 5000 /* ns, 100kHz clock */
-#ifdef MEGAMETRUM
+#ifdef TELEMEGA
# define I2C_HIGH_FAST 2000 /* ns, 167kHz clock */
#else
# define I2C_HIGH_FAST 1000 /* ns, 333kHz clock */
diff --git a/src/stm/ao_spi_stm.c b/src/stm/ao_spi_stm.c
index 7b4af964..56329c24 100644
--- a/src/stm/ao_spi_stm.c
+++ b/src/stm/ao_spi_stm.c
@@ -160,6 +160,8 @@ ao_spi_recv(void *block, uint16_t len, uint8_t spi_index)
uint8_t mosi_dma_index = ao_spi_stm_info[AO_SPI_INDEX(spi_index)].mosi_dma_index;
uint8_t miso_dma_index = ao_spi_stm_info[AO_SPI_INDEX(spi_index)].miso_dma_index;
+ spi_dev_null = 0xff;
+
/* Set up transmit DMA to make the SPI hardware actually run */
ao_dma_set_transfer(mosi_dma_index,
&stm_spi->dr,
diff --git a/src/stm/ao_timer.c b/src/stm/ao_timer.c
index e07625d8..8b7c2327 100644
--- a/src/stm/ao_timer.c
+++ b/src/stm/ao_timer.c
@@ -18,15 +18,12 @@
#include "ao.h"
#include <ao_task.h>
-volatile __data AO_TICK_TYPE ao_tick_count;
+volatile AO_TICK_TYPE ao_tick_count;
-uint16_t ao_time(void)
+AO_TICK_TYPE
+ao_time(void)
{
- uint16_t v;
- ao_arch_critical(
- v = ao_tick_count;
- );
- return v;
+ return ao_tick_count;
}
#if AO_DATA_ALL