Changeset - 41c563eb0a68
[Not reviewed]
cortex-f0
3 4 0
Ethan Zonca - 10 years ago 2015-01-03 15:13:36
ez@ethanzonca.com
Remove old usb cruft
7 files changed with 13 insertions and 425 deletions:
0 comments (0 inline, 0 general)
Makefile
Show inline comments
 
TARGET:=therm
 
TOOLCHAIN_PATH:=/usr/bin
 
TOOLCHAIN_PREFIX:=arm-none-eabi
 
OPTLVL:=3 # Optimization level, can be [0, 1, 2, 3, s].
 

	
 
#PROJECT_NAME:=$(notdir $(lastword $(CURDIR)))
 
TOP:=$(shell readlink -f "../..")
 
LIBDIR:=libraries
 

	
 
HAL_LIB:=$(LIBDIR)/STM32F0xx_HAL_Driver
 
USB_LIB:=$(LIBDIR)/STM32_USB_Device_Library
 

	
 
STARTUP:=$(STMLIB)/CMSIS/Device/ST/STM32F0xx/Source/Templates/gcc_ride7
 
STARTUP:=$(STMLIB)/CMSIS/Device/ST/STM32F0xx/Source/Templates/gcc
 

	
 
LINKER_SCRIPT:=$(CURDIR)/stm32-flash.ld
 

	
 
# Local libs
 
INCLUDE=-I$(CURDIR)
 

	
 
# CMSIS
 
INCLUDE+=-I$(LIBDIR)/CMSIS/Include
 
INCLUDE+=-I$(LIBDIR)/CMSIS/Device/ST/STM32F0xx/Include
 

	
 
# USB
 
INCLUDE+=-I$(USB_LIB)/Class/CDC
 
INCLUDE+=-I$(USB_LIB)/Core
 

	
 
# HAL
 
INCLUDE+=-I$(HAL_LIB)/Inc
 

	
 

	
 
# vpath is used so object files are written to the current directory instead
 
# of the same directory as their source files
 
vpath %.c $(DISCOVERY) $(STD_PERIPH)/src \
 
          $(STMLIB)/USB \
 
          $(STMLIB)/STM32_USB-FS_Device_Library/Class/hid/src \
 
          $(STMLIB)/STM32_USB-FS_Device_Library/Core/src
 
vpath %.c $(HAL_LIB)/src \
 
          $(LIBDIR)/$(USB_LIB) \
 
          $(LIBDIR)/$(USB_LIB)/Class/CDC \
 
          $(LIBDIR)/$(USB_LIB)/Core
 
vpath %.s $(STARTUP)
 

	
 
ASRC=startup_stm32f042.s
 
ASRC=startup_stm32f042x6.s
 

	
 
# Project Source Files
 
SRC=main.c
 
SRC+=stm32f0xx_it.c
 
SRC+=stm32f0xx_hal_msp.c
 
SRC+=system_stm32f0xx.c
 
SRC+=ssd1306.c
 
SRC+=eeprom_min.c
 
SRC+=gpio.c
 
SRC+=spi.c
 
SRC+=clock.c
 
SRC+=stringhelpers.c
 

	
 
# Discovery Source Files
 
#SRC+=stm32f4_discovery_lis302dl.c
 
#SRC+=stm32f4_discovery.c
 
#SRC+=stm32f4_discovery_audio_codec.c
 

	
 
# Standard Peripheral Source Files
 
SRC+=stm32f0xx_syscfg.c
 
SRC+=misc.c
 
SRC+=stm32f0xx_adc.c
 
SRC+=stm32f0xx_dac.c
 
SRC+=stm32f0xx_dma.c
 
SRC+=stm32f0xx_exti.c
 
SRC+=stm32f0xx_flash.c
 
SRC+=stm32f0xx_gpio.c
 
SRC+=stm32f0xx_i2c.c
 
SRC+=stm32f0xx_rcc.c
 
SRC+=stm32f0xx_spi.c
 
SRC+=stm32f0xx_tim.c
 

	
 
# USB Source Files
 
SRC+=usb_core.c
 
SRC+=usb_init.c
 
SRC+=usb_int.c
 
SRC+=usb_mem.c
 
SRC+=usb_regs.c
 
SRC+=usb_sil.c
 
SRC+=hw_config.c
 
SRC+=usb_desc.c
 
SRC+=usb_endp.c
 
SRC+=usb_istr.c
 
SRC+=usb_prop.c
 
SRC+=usb_pwr.c
 

	
 
CDEFS=-DUSE_STDPERIPH_DRIVER
 
CDEFS+=-DSTM32F0XX
 
CDEFS+=-DMANGUSTA_DISCOVERY
 
#CDEFS+=-DUSE_USB_OTG_FS
 

	
 
# EMZ FIXME
 
CDEFS+=-DHSE_VALUE=8000000
 

	
 

	
 
#EMZ Optimized: 
 
MCUFLAGS=-mcpu=cortex-m3 -mthumb -ffunction-sections -fdata-sections -mfloat-abi=soft
 

	
 
# Default:  MCUFLAGS=-mcpu=cortex-m3 -mthumb -ffunction-sections -fdata-sections
 

	
 
#MCUFLAGS=-mcpu=cortex-m4 -mthumb -mlittle-endian -mfpu=fpa -mfloat-abi=hard -mthumb-interwork
 
#MCUFLAGS=-mcpu=cortex-m4 -mfpu=vfpv4-sp-d16 -mfloat-abi=hard
 
COMMONFLAGS=-O$(OPTLVL) -g -Wall
 
CFLAGS=$(COMMONFLAGS) $(MCUFLAGS) $(INCLUDE) $(CDEFS)
 

	
 
LDLIBS=
 
LDFLAGS=$(COMMONFLAGS) -fno-exceptions -ffunction-sections -fdata-sections \
 
        -nostartfiles -Wl,--gc-sections,-T$(LINKER_SCRIPT)
 

	
 
#####
 
#####
 

	
 
OBJ = $(SRC:%.c=%.o) $(ASRC:%.s=%.o)
 

	
 
CC=$(TOOLCHAIN_PATH)/$(TOOLCHAIN_PREFIX)-gcc
 
LD=$(TOOLCHAIN_PATH)/$(TOOLCHAIN_PREFIX)-gcc
 
OBJCOPY=$(TOOLCHAIN_PATH)/$(TOOLCHAIN_PREFIX)-objcopy
 
AS=$(TOOLCHAIN_PATH)/$(TOOLCHAIN_PREFIX)-as
 
AR=$(TOOLCHAIN_PATH)/$(TOOLCHAIN_PREFIX)-ar
 
GDB=$(TOOLCHAIN_PATH)/$(TOOLCHAIN_PREFIX)-gdb
 
SIZE=$(TOOLCHAIN_PATH)/$(TOOLCHAIN_PREFIX)-size
 

	
 

	
 
all: $(OBJ)
 
	$(CC) -o $(TARGET).elf $(LDFLAGS) $(OBJ)	$(LDLIBS)
 
	$(OBJCOPY) -O ihex   $(TARGET).elf $(TARGET).hex
 
	$(OBJCOPY) -O binary $(TARGET).elf $(TARGET).bin
 

	
 
.PHONY: clean
 

	
 
clean:
 
	rm -f $(OBJ)
 
	rm -f $(TARGET).elf
 
	rm -f $(TARGET).hex
 
	rm -f $(TARGET).bin
 

	
 
# Display size
 
size: $(TARGET).elf
 
	@echo Invoking: ARM GNU Print Size
 
	$(SIZE) --format=berkeley $<
 
	@echo
eeprom_min.h
Show inline comments
 
#ifndef EEPROM_MIN_H
 
#define EEPROM_MIN_H
 

	
 
#define EEPROM_BASE_ADDR    0x08080000    
 
#define EEPROM_BYTE_SIZE    0x0FFF  
 

	
 
#define EEPROM_ADDR_WINDUP_GUARD 	0x001C
 
#define EEPROM_ADDR_BOOTTOBREW		0x0020
 
#define EEPROM_ADDR_K_P			0x0024
 
#define EEPROM_ADDR_K_I			0x0028
 
#define EEPROM_ADDR_K_D			0x002C
 

	
 
#define EEPROM_ADDR_BREWTEMP		0x0030
 
#define EEPROM_ADDR_STEAMTEMP		0x0034
 

	
 
#define EEPROM_ADDR_UNITS		0x0038
 

	
 

	
 
/*
 
void Minimal_EEPROM_Unlock(void);
 
void Minimal_EEPROM_Lock(void);
 
FLASH_Status Minimal_FLASH_GetStatus(void);
 
FLASH_Status Minimal_FLASH_WaitForLastOperation(uint32_t Timeout);
 
void Minimal_EEPROM_ProgramWord(uint32_t Address, uint32_t Data);
 
*/
 

	
 
#endif
hw_config.c
Show inline comments
 
deleted file
hw_config.h
Show inline comments
 
deleted file
main.c
Show inline comments
 
#include "main.h"
 
#include "stm32f0xx_hal_conf.h"
 
#include "usb_device.h"
 
#include "ssd1306.h"
 
#include "config.h"
 
#include "eeprom_min.h"
 
#include "gpio.h"
 
#include "clock.h"
 
#include "spi.h"
 
 
// USB includes
 
//#include "hw_config.h"
 
//#include "usb_lib.h"
 
//#include "usb_desc.h"
 
//#include "usb_pwr.h"
 
//#include "stringhelpers.h"
 
 
// TODO: Grab buttonpresses with interrupts
 
 
// USB Supporting Vars
 
extern __IO uint8_t Receive_Buffer[64];
 
extern __IO  uint32_t Receive_length ;
 
extern __IO  uint32_t length ;
 
uint8_t Send_Buffer[64];
 
uint32_t packet_sent=1;
 
uint32_t packet_receive=1;
 
 
enum tempunits {
 
    TEMP_UNITS_CELSIUS = 0,
 
    TEMP_UNITS_FAHRENHEIT,
 
};
 
 
// Globalish setting vars
 
uint8_t boottobrew = 0;
 
uint8_t temp_units = TEMP_UNITS_CELSIUS;
 
uint16_t windup_guard = 1;
 
uint16_t k_p = 1;
 
uint16_t k_i = 1;
 
uint16_t k_d = 1;
 
 
uint8_t ignore_tc_error  = 0;
 
 
// ISR ticks var
 
volatile uint32_t ticks = 0;
 
 
int16_t setpoint_brew = 0;
 
int16_t setpoint_steam = 0;
 
 
// HAL Variables
 
SPI_HandleTypeDef hspi1;
 
 
 
// State definition
 
enum state {
 
    STATE_IDLE = 0,
 
 
    STATE_SETP,
 
    STATE_SETI,
 
    STATE_SETD,
 
    STATE_SETSTEPS,
 
    STATE_SETWINDUP,
 
    STATE_SETBOOTTOBREW,
 
    STATE_SETUNITS,
 
 
    STATE_PREHEAT_BREW,
 
    STATE_MAINTAIN_BREW,
 
    STATE_PREHEAT_STEAM,
 
    STATE_MAINTAIN_STEAM,
 
 
    STATE_TC_ERROR
 
};
 
 
uint8_t state = STATE_IDLE;
 
 
static __IO uint32_t TimingDelay;
 
 
// Move to header file
 
void process();
 
void machine();
 
 
void restore_settings();
 
void save_settings();
 
void save_setpoints();
 
 
int main(void)
 
{
 
    // Init clocks
 
    HAL_Init();
 
    SystemClock_Config();
 
    
 
    // Init GPIO
 
    init_gpio();
 
 
    // Turn on power LED
 
    GPIO_SetBits(LED_POWER);
 
 
    // TODO: Awesome pwm of power LED (TIM4_CH4 or TIM11_CH1)
 
 
    // Configure 1ms SysTick (change if more temporal resolution needed) 
 
    RCC_ClocksTypeDef RCC_Clocks;
 
    RCC_GetClocksFreq(&RCC_Clocks);
 
    SysTick_Config(RCC_Clocks.HCLK_Frequency / 1000);
 
 
    // Init SPI busses
 
    init_spi();
 
 
    // Init USB 
 
    init_usb();
 
    
 
    // Init OLED over SPI
 
    ssd1306_Init();
 
    ssd1306_clearscreen();
 
 
    // Check for problems on startup
 
    uint8_t clock_fail = 0; // FIXME implement in system
 
    if(clock_fail) {
 
        //ssd1306_DrawStringBig("ERROR: Check Xtal", 2, 0);
 
        ssd1306_DrawStringBig("NO XTAL", 2, 0);
 
        delay(1000);
 
        ssd1306_clearscreen();
 
    }
 
 
    // Init USB
 
    //Set_System(); // hw_config.h
 
    //Set_USBClock();
 
    //SB_Interrupts_Config();
 
    //SB_Init();
 
    //SYSCFG_USBPuCmd(ENABLE);
 
    //PowerOn();
 
 
    // Startup screen 
 
    ssd1306_DrawString("therm v0.1", 1, 40);
 
    ssd1306_DrawString("protofusion.org/therm", 3, 0);
 
 
    delay(1500);
 
    ssd1306_clearscreen();
 
    
 
    restore_settings();
 
    if(boottobrew)
 
      state = STATE_PREHEAT_BREW; // Go to brew instead of idle if configured thusly
 
 
    GPIO_ResetBits(LED_STAT);
 
 
    // Main loop
 
    while(1)
 
    {
 
        // Process sensor inputs
 
        process();
 
 
        // Run state machine
 
        machine(); 
 
    }
 
}
 
 
// Read temperature and update global temp vars
 
int32_t temp = 0;
 
uint8_t temp_frac = 0;
 
uint8_t state_resume = 0;
 
 
void update_temp() {
 
    // Assert CS
 
    GPIO_ResetBits(MAX_CS);
 
    delay(1);
 
 
    // This may not clock at all... might need to send 16 bits first
 
    SPI_I2S_SendData(SPI2, 0xAAAA); // send dummy data
 
    //SPI_I2S_SendData(SPI2, 0xAA); // send dummy data
 
    uint16_t temp_pre = SPI_I2S_ReceiveData(SPI2);
 
 
    if(temp_pre & 0b0000000000000010) {
 
        ssd1306_DrawString("Fatal Error", 3, 35);
 
        state = STATE_TC_ERROR;
 
    }
 
    else if(temp_pre & 0b0000000000000001 && !ignore_tc_error) {
 
        state_resume = state;
 
        state = STATE_TC_ERROR;
 
        temp = 0;
 
        temp_frac = 0;
 
    }
 
    else 
 
    {
 
        if(state == STATE_TC_ERROR)
 
        {
 
            state = state_resume;
 
            ssd1306_clearscreen();
 
        }
 
 
        uint8_t sign = temp >> 15;// top bit is sign
 
 
        temp_pre = temp_pre >> 2; // Drop 2 lowest bits
 
        temp_frac = temp_pre & 0b11; // get fractional part
 
        temp_frac *= 25; // each bit is .25 a degree, up to fixed point
 
        temp_pre = temp_pre >> 2; // Drop 2 fractional bits 
 
main.h
Show inline comments
 
#ifndef __MAIN_H
 
#define __MAIN_H
 
 
#define STM32F042x6
 
 
#include "stm32f0xx_hal_conf.h"
 
 
void TimingDelay_Decrement(void);
 
void delay(__IO uint32_t nTime);
 
 
#endif /* __MAIN_H */
 
platform_config.h
Show inline comments
 
deleted file
0 comments (0 inline, 0 general)