Changeset - 0ee0ed9a3b7d
[Not reviewed]
default
0 3 0
Ethan Zonca - 10 years ago 2014-09-25 21:34:24
ez@ethanzonca.com
Added clock startup failure check
3 files changed with 14 insertions and 7 deletions:
0 comments (0 inline, 0 general)
main.c
Show inline comments
 
@@ -3,25 +3,24 @@
 
#include "ssd1306.h"
 
#include "config.h"
 
#include "eeprom_min.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
 
// TODO: Eliminate screen buffer since we aren't using it...
 
 
// 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;
 
 
// Globalish setting vars
 
uint8_t boottobrew = 0;
 
#define WINDUP_GUARD_GAIN 100
 
@@ -30,25 +29,24 @@ uint16_t k_p = 1;
 
uint16_t k_i = 1;
 
uint16_t k_d = 1;
 
 
// ISR ticks var TODO: Double check functionality after volatilazation... needed on ARM?
 
volatile uint32_t ticks = 0;
 
 
// Increase on each press, and increase at a fast rate after duration elapsed of continuously holding down... somehow...
 
uint32_t change_time_reset = 0;
 
#define CHANGE_PERIOD_MS 100
 
#define CHANGE_ELAPSED (ticks - change_time_reset) > CHANGE_PERIOD_MS
 
#define CHANGE_RESET change_time_reset = ticks
 
 
 
int16_t setpoint_brew = 0;
 
int16_t setpoint_steam = 0;
 
 
// State definition
 
enum state {
 
    STATE_IDLE = 0,
 
 
    STATE_SETP,
 
    STATE_SETI,
 
    STATE_SETD,
 
    STATE_SETWINDUP,
 
    STATE_SETBOOTTOBREW,
 
@@ -95,27 +93,36 @@ int main(void)
 
    // 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_clearscreen();
 
 
    // Check for problems on startup
 
    if(clock_fail) {
 
        ssd1306_DrawString("ERROR: Check Xtal", 3, 0);
 
        delay(2000);
 
    }
 
 
    // 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)
 
    {
 
@@ -361,37 +368,33 @@ void restore_settings()
 
    setpoint_brew = (*(__IO uint32_t*)(EEPROM_BASE_ADDR + EEPROM_ADDR_BREWTEMP));
 
 
    while(Minimal_FLASH_GetStatus()==FLASH_BUSY);
 
    setpoint_steam = (*(__IO uint32_t*)(EEPROM_BASE_ADDR + EEPROM_ADDR_STEAMTEMP));    
 
    
 
    Minimal_EEPROM_Lock();
 
}
 
 
 
void user_input(uint16_t* to_modify)
 
{
 
    if(CHANGE_ELAPSED) {
 
 
        // TODO: Make function that takes reference to a var and increase/decreases it based on buttonpress
 
        if(!GPIO_ReadInputDataBit(SW_UP) ) {
 
            CHANGE_RESET;
 
            (*to_modify)++;
 
        }
 
        else if(!GPIO_ReadInputDataBit(SW_DOWN) && (*to_modify) > 0) {
 
            CHANGE_RESET;
 
            (*to_modify)--;
 
        }
 
 
    }
 
 
}
 
 
void machine()
 
{
 
    uint8_t last_state = state;
 
 
    uint8_t sw_btn = !GPIO_ReadInputDataBit(SW_BTN);
 
    uint8_t sw_up = !GPIO_ReadInputDataBit(SW_UP);
 
    uint8_t sw_down = !GPIO_ReadInputDataBit(SW_DOWN);
 
    uint8_t sw_left = !GPIO_ReadInputDataBit(SW_LEFT);
 
    uint8_t sw_right = !GPIO_ReadInputDataBit(SW_RIGHT);
 
 
@@ -746,25 +749,24 @@ void delay(__IO uint32_t nTime)
 
}
 
 
// ISR-triggered decrement of delay and increment of tickcounter
 
void TimingDelay_Decrement(void)
 
{
 
  if (TimingDelay != 0x00)
 
  { 
 
    TimingDelay--;
 
  }
 
  ticks++;
 
}
 
 
 
void init_spi(void)
 
{
 
    SPI_InitTypeDef  SPI_InitStructure;
 
 
    // OLED IC
 
    SPI_Cmd(SPI1, DISABLE); 
 
    SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;
 
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
 
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
 
    SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
 
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
 
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
system_stm32l1xx.c
Show inline comments
 
@@ -286,24 +286,26 @@ void SystemCoreClockUpdate (void)
 
  /* HCLK clock frequency */
 
  SystemCoreClock >>= tmp;
 
}
 

	
 
/**
 
  * @brief  Configures the System clock frequency, AHB/APBx prescalers and Flash 
 
  *         settings.
 
  * @note   This function should be called only once the RCC clock configuration  
 
  *         is reset to the default reset state (done in SystemInit() function).             
 
  * @param  None
 
  * @retval None
 
  */
 
uint8_t clock_fail = 0;
 

	
 
static void SetSysClock(void)
 
{
 
  __IO uint32_t StartUpCounter = 0, HSEStatus = 0;
 
  
 
  /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/
 
  /* Enable HSE */
 
  RCC->CR |= ((uint32_t)RCC_CR_HSEON);
 
 
 
  /* Wait till HSE is ready and if Time out is reached exit */
 
  do
 
  {
 
    HSEStatus = RCC->CR & RCC_CR_HSERDY;
 
@@ -365,24 +367,25 @@ static void SetSysClock(void)
 
        
 
    /* Select PLL as system clock source */
 
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
 
    RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;
 

	
 
    /* Wait till PLL is used as system clock source */
 
    while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)RCC_CFGR_SWS_PLL)
 
    {
 
    }
 
  }
 
  else
 
  {
 
	clock_fail = 1;
 
//	while(1);
 
    /* If HSE fails to start-up, the application will have wrong clock
 
       configuration. User can add here some code to deal with this error */
 
  }
 
}
 

	
 
/**
 
  * @}
 
  */
 

	
 
/**
 
  * @}
system_stm32l1xx.h
Show inline comments
 
@@ -49,24 +49,26 @@
 
 
/**
 
  * @}
 
  */
 
 
 
/** @addtogroup STM32L1xx_System_Exported_types
 
  * @{
 
  */
 
 
extern uint32_t SystemCoreClock;          /*!< System Clock Frequency (Core Clock) */
 
 
extern uint8_t clock_fail;
 
 
/**
 
  * @}
 
  */
 
 
/** @addtogroup STM32L1xx_System_Exported_Constants
 
  * @{
 
  */
 
 
/**
 
  * @}
 
  */
 
0 comments (0 inline, 0 general)