Changeset - 91fbdc7bc1b8
[Not reviewed]
default
0 2 2
Ethan Zonca - 10 years ago 2014-08-24 00:20:24
ez@ethanzonca.com
Moved itoa functions to stringhelpers
4 files changed with 81 insertions and 69 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 "../..")
 
DISCOVERY:=Utilities/STM32L100C-Discovery
 
STMLIB:=libraries
 
OLEDDRV:=oleddrv
 
USBDRV:=USB
 
STD_PERIPH:=$(STMLIB)/STM32L1xx_StdPeriph_Driver
 
STARTUP:=$(STMLIB)/CMSIS/Device/ST/STM32L1xx/Source/Templates/gcc_ride7
 
LINKER_SCRIPT:=$(CURDIR)/stm32-flash.ld
 
#LINKER_SCRIPT:=$(CURDIR)/../stm32_flash.ld
 

	
 
INCLUDE=-I$(CURDIR)
 
INCLUDE+=-I$(STMLIB)/CMSIS/Include
 
INCLUDE+=-I$(STMLIB)/CMSIS/Device/ST/STM32L1xx/Include
 
INCLUDE+=-I$(STD_PERIPH)/inc
 
INCLUDE+=-I$(DISCOVERY)
 
INCLUDE+=-I$(STMLIB)/$(OLEDDRV)
 
INCLUDE+=-I$(STMLIB)/$(USBDRV)
 

	
 
# 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 %.s $(STARTUP)
 

	
 
ASRC=startup_stm32l1xx_mdp.s
 

	
 
# Project Source Files
 
SRC=main.c
 
SRC+=stm32l1xx_it.c
 
SRC+=system_stm32l1xx.c
 
SRC+=stm32l100c_discovery.c
 
SRC+=ssd1306.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+=stm32l1xx_syscfg.c
 
SRC+=misc.c
 
SRC+=stm32l1xx_adc.c
 
SRC+=stm32l1xx_dac.c
 
SRC+=stm32l1xx_dma.c
 
SRC+=stm32l1xx_exti.c
 
SRC+=stm32l1xx_flash.c
 
SRC+=stm32l1xx_gpio.c
 
SRC+=stm32l1xx_i2c.c
 
SRC+=stm32l1xx_rcc.c
 
SRC+=stm32l1xx_spi.c
 
SRC+=stm32l1xx_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+=-DSTM32L1XX
 
CDEFS+=-DMANGUSTA_DISCOVERY
 
#CDEFS+=-DUSE_USB_OTG_FS
 
CDEFS+=-DHSE_VALUE=8000000
 

	
 
MCUFLAGS=-mcpu=cortex-m3 -mthumb
 
#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 \
main.c
Show inline comments
 
#include "main.h"
 
#include "stm32l100c_discovery.h"
 
#include "ssd1306.h"
 
 
// USB includes
 
#include "hw_config.h"
 
#include "usb_lib.h"
 
#include "usb_desc.h"
 
#include "usb_pwr.h"
 
#include "stringhelpers.h"
 
 
#define SSR_PERIOD 200
 
 
#define LED_POWER GPIOB,GPIO_Pin_9
 
#define LED_STAT  GPIOA,GPIO_Pin_15
 
 
#define MAX_CS GPIOB,GPIO_Pin_12
 
 
// TODO: Grab buttonpresses with interrupts
 
// TODO: Eliminate screen buffer since we aren't using it...
 
#define SW_BTN  GPIOB, GPIO_Pin_3
 
#define SW_UP   GPIOB, GPIO_Pin_4
 
#define SW_DOWN GPIOB, GPIO_Pin_6
 
#define SW_LEFT GPIOB, GPIO_Pin_5
 
#define SW_RIGHT GPIOB, GPIO_Pin_7
 
 
// 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;
 
 
// State definition
 
enum state {
 
    STATE_IDLE = 0,
 
 
    STATE_SETP,
 
    STATE_SETI,
 
    STATE_SETD,
 
 
    STATE_PREHEAT_BREW,
 
    STATE_MAINTAIN_BREW,
 
    STATE_PREHEAT_STEAM,
 
    STATE_MAINTAIN_STEAM,
 
};
 
 
 
char* itoa(int16_t i, char b[]){
 
    char const digit[] = "0123456789";
 
    char* p = b;
 
    if(i<0){
 
        *p++ = '-';
 
        i *= -1;
 
    }
 
    uint16_t shifter = i;
 
    do{ //Move to where representation ends
 
        ++p;
 
        shifter = shifter/10;
 
    }while(shifter);
 
    *p = '\0';
 
    do{ //Move back, inserting digits as you go
 
        *--p = digit[i%10];
 
        i = i/10;
 
    }while(i);
 
    return b;
 
}
 
 
char* itoa_fp(int16_t i, uint8_t frac, char b[]){
 
    char const digit[] = "0123456789";
 
 
    // set p to beginning of char array
 
    char* p = b;
 
 
    // If negative, set current char to '-' and inc, unnegate number
 
    if(i<0){
 
        *p++ = '-';
 
        i *= -1;
 
    }
 
 
    // Init shifter to numeric value
 
    uint16_t shifter = i;
 
    uint16_t frac_shifter = frac;
 
 
    // Iterate through 10s places, incrementing text pointer as we go
 
    do{ 
 
        ++p;
 
        shifter = shifter/10;
 
    }while(shifter);
 
    
 
    ++p; // increment for decimal point
 
 
    do{
 
        ++p;
 
        frac_shifter = frac_shifter/10;
 
    }while(frac_shifter);
 
        
 
 
    // Null-terminate the string
 
    *p = '\0';
 
 
    // Go backwards and write out fractional digits 
 
    do{ 
 
        *--p = digit[frac%10];
 
        frac = frac/10;
 
    }while(frac);
 
 
    *--p = '.'; // insert decimal point
 
 
    // Go backwards and write out remaining digits 
 
    do{ 
 
        *--p = digit[i%10];
 
        i = i/10;
 
    }while(i);
 
    return b;
 
}
 
 
 
static __IO uint32_t TimingDelay;
 
 
// Move to header file
 
void init_gpio();
 
void init_spi();
 
void process();
 
void machine();
 
 
int main(void)
 
{
 
 
    // Init clocks
 
    SystemInit();
 
 
    // Init GPIO
 
    init_gpio();
 
 
    // Init USB
 
    //Set_USBClock();
 
    //USB_Interrupts_Config();
 
    //USB_Init();
 
 
    // Turn on power LED
 
    GPIO_SetBits(LED_POWER);
 
 
    // TODO: Awesome pwm of power LED (TIM4_CH4 or TIM11_CH1)
 
    // TODO: PWM of stat led (TIM3_CH2)
 
 
    // 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 OLED over SPI
 
    ssd1306_Init();
 
    ssd1306_block_write();
 
 
    // Startup screen 
 
    ssd1306_DrawString("therm v0.1", 1, 40);
 
    ssd1306_DrawString("protofusion.org/therm", 3, 0);
 
    Delay(1500);
 
    ssd1306_block_write();
 
 
    // Main loop
stringhelpers.c
Show inline comments
 
new file 100644
 
#include <inttypes.h>
 

	
 
char* itoa(int16_t i, char b[]){
 

	
 
    char const digit[] = "0123456789";
 
    char* p = b;
 
    if(i<0){
 
        *p++ = '-';
 
        i *= -1;
 
    }
 
    uint16_t shifter = i;
 
    do{ //Move to where representation ends
 
        ++p;
 
        shifter = shifter/10;
 
    }while(shifter);
 
    *p = '\0';
 
    do{ //Move back, inserting digits as you go
 
        *--p = digit[i%10];
 
        i = i/10;
 
    }while(i);
 
    return b;
 
}
 

	
 
char* itoa_fp(int16_t i, uint8_t frac, char b[]){
 
    char const digit[] = "0123456789";
 

	
 
    // set p to beginning of char array
 
    char* p = b;
 

	
 
    // If negative, set current char to '-' and inc, unnegate number
 
    if(i<0){
 
        *p++ = '-';
 
        i *= -1;
 
    }
 

	
 
    // Init shifter to numeric value
 
    uint16_t shifter = i;
 
    uint16_t frac_shifter = frac;
 

	
 
    // Iterate through 10s places, incrementing text pointer as we go
 
    do{ 
 
        ++p;
 
        shifter = shifter/10;
 
    }while(shifter);
 
    
 
    ++p; // increment for decimal point
 

	
 
    do{
 
        ++p;
 
        frac_shifter = frac_shifter/10;
 
    }while(frac_shifter);
 
        
 

	
 
    // Null-terminate the string
 
    *p = '\0';
 

	
 
    // Go backwards and write out fractional digits 
 
    do{ 
 
        *--p = digit[frac%10];
 
        frac = frac/10;
 
    }while(frac);
 

	
 
    *--p = '.'; // insert decimal point
 

	
 
    // Go backwards and write out remaining digits 
 
    do{ 
 
        *--p = digit[i%10];
 
        i = i/10;
 
    }while(i);
 
    return b;
 
}
 

	
stringhelpers.h
Show inline comments
 
new file 100644
 
#ifndef STRINGHELPERS_H 
 
#define STRINGHELPERS_H
 

	
 
char* itoa(int16_t i, char b[]);
 
char* itoa_fp(int16_t i, uint8_t frac, char b[]);
 

	
 
#endif
0 comments (0 inline, 0 general)