From bbc9b62788f5e2f94dd550708a6af22f6d49eb98 Mon Sep 17 00:00:00 2001 From: lottaviano Date: Wed, 4 May 2011 13:00:13 +0000 Subject: [PATCH] Graphical support with empty template for STM32VLDiscovery board added to the wizard. Signed-off-by: Andrea Scalise Signed-off-by: Matteo Silvestri git-svn-id: https://src.develer.com/svnoss/bertos/trunk@4876 38d2e660-2303-0410-9eaa-f027e97ec537 --- boards/stm32VLDiscovery/.image.png | Bin 0 -> 40657 bytes boards/stm32VLDiscovery/.spec | 32 ++ boards/stm32VLDiscovery/hw/hw_adc.h | 69 ++++ boards/stm32VLDiscovery/hw/hw_afsk.c | 41 +++ boards/stm32VLDiscovery/hw/hw_afsk.h | 85 +++++ boards/stm32VLDiscovery/hw/hw_blanker.h | 49 +++ boards/stm32VLDiscovery/hw/hw_boot.h | 50 +++ boards/stm32VLDiscovery/hw/hw_buzzer.h | 51 +++ boards/stm32VLDiscovery/hw/hw_buzzerled.h | 46 +++ boards/stm32VLDiscovery/hw/hw_cpufreq.h | 63 ++++ boards/stm32VLDiscovery/hw/hw_dataflash.c | 125 +++++++ boards/stm32VLDiscovery/hw/hw_dataflash.h | 47 +++ boards/stm32VLDiscovery/hw/hw_dc_motor.h | 71 ++++ boards/stm32VLDiscovery/hw/hw_ft245rl.h | 64 ++++ boards/stm32VLDiscovery/hw/hw_i2c_bitbang.h | 156 +++++++++ boards/stm32VLDiscovery/hw/hw_input.h | 46 +++ boards/stm32VLDiscovery/hw/hw_kbd.h | 66 ++++ boards/stm32VLDiscovery/hw/hw_lcd_32122a.h | 155 +++++++++ boards/stm32VLDiscovery/hw/hw_lcd_hd44.h | 157 +++++++++ boards/stm32VLDiscovery/hw/hw_led.h | 71 ++++ boards/stm32VLDiscovery/hw/hw_lm75.h | 49 +++ boards/stm32VLDiscovery/hw/hw_mcp41.c | 52 +++ boards/stm32VLDiscovery/hw/hw_mcp41.h | 74 +++++ boards/stm32VLDiscovery/hw/hw_ntc.c | 45 +++ boards/stm32VLDiscovery/hw/hw_ntc.h | 135 ++++++++ boards/stm32VLDiscovery/hw/hw_phase.c | 45 +++ boards/stm32VLDiscovery/hw/hw_phase.h | 79 +++++ boards/stm32VLDiscovery/hw/hw_rit128x96.h | 78 +++++ boards/stm32VLDiscovery/hw/hw_sd.h | 52 +++ boards/stm32VLDiscovery/hw/hw_sensor.h | 92 ++++++ boards/stm32VLDiscovery/hw/hw_ser.h | 52 +++ boards/stm32VLDiscovery/hw/hw_sipo.h | 108 ++++++ boards/stm32VLDiscovery/hw/hw_spi.h | 114 +++++++ boards/stm32VLDiscovery/hw/hw_spi_dma.h | 47 +++ boards/stm32VLDiscovery/hw/hw_stepper.h | 308 ++++++++++++++++++ boards/stm32VLDiscovery/hw/hw_tas5706a.h | 64 ++++ boards/stm32VLDiscovery/hw/hw_tc520.h | 70 ++++ boards/stm32VLDiscovery/hw/hw_thermo.h | 121 +++++++ boards/stm32VLDiscovery/hw/hw_timer.h | 51 +++ boards/stm32VLDiscovery/hw/hw_tlv5618.h | 69 ++++ boards/stm32VLDiscovery/hw/hw_tmp123.h | 52 +++ boards/stm32VLDiscovery/hw/kbd_map.h | 61 ++++ boards/stm32VLDiscovery/hw/mcp41_map.h | 58 ++++ boards/stm32VLDiscovery/hw/ntc_map.h | 60 ++++ boards/stm32VLDiscovery/hw/phase_map.h | 57 ++++ boards/stm32VLDiscovery/hw/pwm_map.h | 60 ++++ boards/stm32VLDiscovery/hw/thermo_map.h | 56 ++++ boards/stm32VLDiscovery/templates/.spec | 3 + boards/stm32VLDiscovery/templates/empty/.spec | 8 + .../templates/empty/cfg/cfg_adc.h | 112 +++++++ .../templates/empty/cfg/cfg_afsk.h | 113 +++++++ .../templates/empty/cfg/cfg_ax25.h | 75 +++++ .../templates/empty/cfg/cfg_battfs.h | 67 ++++ .../templates/empty/cfg/cfg_context_switch.h | 71 ++++ .../templates/empty/cfg/cfg_dataflash.h | 55 ++++ .../templates/empty/cfg/cfg_dc_motor.h | 111 +++++++ .../templates/empty/cfg/cfg_debug.h | 54 +++ .../templates/empty/cfg/cfg_emb_flash.h | 73 +++++ .../templates/empty/cfg/cfg_fat.h | 156 +++++++++ .../templates/empty/cfg/cfg_flash25.h | 51 +++ .../templates/empty/cfg/cfg_formatwr.h | 65 ++++ .../templates/empty/cfg/cfg_gfx.h | 67 ++++ .../templates/empty/cfg/cfg_hashtable.h | 51 +++ .../templates/empty/cfg/cfg_heap.h | 50 +++ .../templates/empty/cfg/cfg_i2c.h | 83 +++++ .../templates/empty/cfg/cfg_i2s.h | 74 +++++ .../templates/empty/cfg/cfg_ini_reader.h | 48 +++ .../templates/empty/cfg/cfg_kbd.h | 58 ++++ .../templates/empty/cfg/cfg_keytag.h | 61 ++++ .../templates/empty/cfg/cfg_kfile.h | 61 ++++ .../templates/empty/cfg/cfg_lcd_32122a.h | 63 ++++ .../templates/empty/cfg/cfg_lcd_hd44.h | 69 ++++ .../templates/empty/cfg/cfg_lm75.h | 57 ++++ .../templates/empty/cfg/cfg_md2.h | 53 +++ .../templates/empty/cfg/cfg_monitor.h | 47 +++ .../templates/empty/cfg/cfg_nmea.h | 85 +++++ .../templates/empty/cfg/cfg_parser.h | 46 +++ .../templates/empty/cfg/cfg_phase.h | 55 ++++ .../templates/empty/cfg/cfg_pocketbus.h | 71 ++++ .../templates/empty/cfg/cfg_proc.h | 107 ++++++ .../templates/empty/cfg/cfg_pwm.h | 56 ++++ .../templates/empty/cfg/cfg_ramp.h | 115 +++++++ .../templates/empty/cfg/cfg_randpool.h | 55 ++++ .../templates/empty/cfg/cfg_sd.h | 75 +++++ .../templates/empty/cfg/cfg_sem.h | 47 +++ .../templates/empty/cfg/cfg_ser.h | 222 +++++++++++++ .../templates/empty/cfg/cfg_signal.h | 47 +++ .../templates/empty/cfg/cfg_spi_bitbang.h | 51 +++ .../templates/empty/cfg/cfg_stepper.h | 69 ++++ .../templates/empty/cfg/cfg_tas5706a.h | 50 +++ .../templates/empty/cfg/cfg_thermo.h | 71 ++++ .../templates/empty/cfg/cfg_timer.h | 67 ++++ .../templates/empty/cfg/cfg_usb.h | 64 ++++ .../templates/empty/cfg/cfg_usbkbd.h | 78 +++++ .../templates/empty/cfg/cfg_usbmouse.h | 78 +++++ .../templates/empty/cfg/cfg_usbser.h | 78 +++++ .../templates/empty/cfg/cfg_wdt.h | 47 +++ .../templates/empty/cfg/cfg_xmodem.h | 79 +++++ .../stm32VLDiscovery/templates/empty/empty.mk | 92 ++++++ .../templates/empty/empty_user.mk | 43 +++ .../stm32VLDiscovery/templates/empty/main.c | 40 +++ .../templates/empty/project.bertos | 74 +++++ 102 files changed, 7371 insertions(+) create mode 100755 boards/stm32VLDiscovery/.image.png create mode 100644 boards/stm32VLDiscovery/.spec create mode 100644 boards/stm32VLDiscovery/hw/hw_adc.h create mode 100644 boards/stm32VLDiscovery/hw/hw_afsk.c create mode 100644 boards/stm32VLDiscovery/hw/hw_afsk.h create mode 100644 boards/stm32VLDiscovery/hw/hw_blanker.h create mode 100644 boards/stm32VLDiscovery/hw/hw_boot.h create mode 100644 boards/stm32VLDiscovery/hw/hw_buzzer.h create mode 100644 boards/stm32VLDiscovery/hw/hw_buzzerled.h create mode 100644 boards/stm32VLDiscovery/hw/hw_cpufreq.h create mode 100644 boards/stm32VLDiscovery/hw/hw_dataflash.c create mode 100644 boards/stm32VLDiscovery/hw/hw_dataflash.h create mode 100644 boards/stm32VLDiscovery/hw/hw_dc_motor.h create mode 100644 boards/stm32VLDiscovery/hw/hw_ft245rl.h create mode 100644 boards/stm32VLDiscovery/hw/hw_i2c_bitbang.h create mode 100644 boards/stm32VLDiscovery/hw/hw_input.h create mode 100644 boards/stm32VLDiscovery/hw/hw_kbd.h create mode 100644 boards/stm32VLDiscovery/hw/hw_lcd_32122a.h create mode 100644 boards/stm32VLDiscovery/hw/hw_lcd_hd44.h create mode 100644 boards/stm32VLDiscovery/hw/hw_led.h create mode 100644 boards/stm32VLDiscovery/hw/hw_lm75.h create mode 100644 boards/stm32VLDiscovery/hw/hw_mcp41.c create mode 100644 boards/stm32VLDiscovery/hw/hw_mcp41.h create mode 100644 boards/stm32VLDiscovery/hw/hw_ntc.c create mode 100644 boards/stm32VLDiscovery/hw/hw_ntc.h create mode 100644 boards/stm32VLDiscovery/hw/hw_phase.c create mode 100644 boards/stm32VLDiscovery/hw/hw_phase.h create mode 100644 boards/stm32VLDiscovery/hw/hw_rit128x96.h create mode 100644 boards/stm32VLDiscovery/hw/hw_sd.h create mode 100644 boards/stm32VLDiscovery/hw/hw_sensor.h create mode 100644 boards/stm32VLDiscovery/hw/hw_ser.h create mode 100644 boards/stm32VLDiscovery/hw/hw_sipo.h create mode 100644 boards/stm32VLDiscovery/hw/hw_spi.h create mode 100644 boards/stm32VLDiscovery/hw/hw_spi_dma.h create mode 100644 boards/stm32VLDiscovery/hw/hw_stepper.h create mode 100644 boards/stm32VLDiscovery/hw/hw_tas5706a.h create mode 100644 boards/stm32VLDiscovery/hw/hw_tc520.h create mode 100644 boards/stm32VLDiscovery/hw/hw_thermo.h create mode 100644 boards/stm32VLDiscovery/hw/hw_timer.h create mode 100644 boards/stm32VLDiscovery/hw/hw_tlv5618.h create mode 100644 boards/stm32VLDiscovery/hw/hw_tmp123.h create mode 100644 boards/stm32VLDiscovery/hw/kbd_map.h create mode 100644 boards/stm32VLDiscovery/hw/mcp41_map.h create mode 100644 boards/stm32VLDiscovery/hw/ntc_map.h create mode 100644 boards/stm32VLDiscovery/hw/phase_map.h create mode 100644 boards/stm32VLDiscovery/hw/pwm_map.h create mode 100644 boards/stm32VLDiscovery/hw/thermo_map.h create mode 100644 boards/stm32VLDiscovery/templates/.spec create mode 100644 boards/stm32VLDiscovery/templates/empty/.spec create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_adc.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_afsk.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_ax25.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_battfs.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_context_switch.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_dataflash.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_dc_motor.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_debug.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_emb_flash.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_fat.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_flash25.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_formatwr.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_gfx.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_hashtable.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_heap.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_i2c.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_i2s.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_ini_reader.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_kbd.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_keytag.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_kfile.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_lcd_32122a.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_lcd_hd44.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_lm75.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_md2.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_monitor.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_nmea.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_parser.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_phase.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_pocketbus.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_proc.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_pwm.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_ramp.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_randpool.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_sd.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_sem.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_ser.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_signal.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_spi_bitbang.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_stepper.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_tas5706a.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_thermo.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_timer.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_usb.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_usbkbd.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_usbmouse.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_usbser.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_wdt.h create mode 100644 boards/stm32VLDiscovery/templates/empty/cfg/cfg_xmodem.h create mode 100644 boards/stm32VLDiscovery/templates/empty/empty.mk create mode 100644 boards/stm32VLDiscovery/templates/empty/empty_user.mk create mode 100644 boards/stm32VLDiscovery/templates/empty/main.c create mode 100644 boards/stm32VLDiscovery/templates/empty/project.bertos diff --git a/boards/stm32VLDiscovery/.image.png b/boards/stm32VLDiscovery/.image.png new file mode 100755 index 0000000000000000000000000000000000000000..b88877dd44cf436cdc491b8e0278be58746eca63 GIT binary patch literal 40657 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 N002ovPDHLkV1l5!*w_F7 literal 0 HcmV?d00001 diff --git a/boards/stm32VLDiscovery/.spec b/boards/stm32VLDiscovery/.spec new file mode 100644 index 00000000..a7f2ab55 --- /dev/null +++ b/boards/stm32VLDiscovery/.spec @@ -0,0 +1,32 @@ +name = "ST Microeletronics STM32VLDiscovery" +description = ''' +

ST Microeletronics STM32VLDiscovery

+ +

+ + + + + + + + + + + + + + + + + + +
CPUST Microelectronics STM32F100RB
Clock24MHz
Memory128kB Flash, 8kB SRAM
Peripheralstimers, UART, SPI, I²C, ISP, JTAG/BDM, user and reset buttons, ST-Link USB connector, leds, SWD connector
+

+

+STM32LVDiscovery® is based on ST Microelectronics STM32F100RB Cortex-M3 CPU. Visit the STM32VLDiscovery page for more information. +

+ +''' + + diff --git a/boards/stm32VLDiscovery/hw/hw_adc.h b/boards/stm32VLDiscovery/hw/hw_adc.h new file mode 100644 index 00000000..8e0f0dee --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_adc.h @@ -0,0 +1,69 @@ +/** + * \file + * + * + * \brief Some ADC utilis. + * + * \author Daniele Basile + */ + +#ifndef HW_ADC_H +#define HW_ADC_H + +#include + +#include + +/* + * Return the Vrefint voltage in mV. + */ +INLINE uint16_t hw_readVrefint(void) +{ + return ADC_RANGECONV(adc_read(ADC_VREFINT_CH), 0, 3300); +} + +/* + * Return the cpu core temperature in degrees * 100. + */ +INLINE uint16_t hw_readIntTemp(void) +{ + uint16_t vsens = ADC_RANGECONV(adc_read(ADC_TEMP_CH), 0, 3300); + + uint16_t temp = (((ADC_TEMP_V25 - vsens) * 1000)/ ADC_TEMP_SLOPE) + ADC_TEMP_CONST; + return (temp / 10); +} + +INLINE uint16_t hw_readRawTemp(void) +{ + return (uint16_t)ADC_RANGECONV(adc_read(ADC_TEMP_CH), 0, 3300); +} + +#endif /* HW_ADC_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_afsk.c b/boards/stm32VLDiscovery/hw/hw_afsk.c new file mode 100644 index 00000000..8adb432d --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_afsk.c @@ -0,0 +1,41 @@ +/** + * \file + * + * + * \brief AFSK modem hardware-specific definitions. + * + * + * \author Francesco Sacchi + */ + + +#include "hw_afsk.h" + diff --git a/boards/stm32VLDiscovery/hw/hw_afsk.h b/boards/stm32VLDiscovery/hw/hw_afsk.h new file mode 100644 index 00000000..eae0ef73 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_afsk.h @@ -0,0 +1,85 @@ +/** + * \file + * + * + * \brief AFSK modem hardware-specific definitions. + * + * \author Francesco Sacchi + */ + +#ifndef HW_AFSK_H +#define HW_AFSK_H + +#include "cfg/cfg_arch.h" + +#warning TODO:This is an example implementation, you must implement it! + +/** + * Initialize the specified channel of the ADC for AFSK needs. + * The adc should be configured to have a continuos stream of convertions. + * For every convertion there must be an ISR that read the sample + * and call afsk_adc_isr(), passing the context and the sample. + * + * \param ch channel to be used for AFSK demodulation. + * \param ctx AFSK context (\see Afsk). This parameter must be saved and + * passed back to afsk_adc_isr() for every convertion. + */ +#define AFSK_ADC_INIT(ch, ctx) do { (void)ch, (void)ctx; } while (0) + +#define AFSK_STROBE_INIT() do { /* Implement me */ } while (0) +#define AFSK_STROBE_ON() do { /* Implement me */ } while (0) +#define AFSK_STROBE_OFF() do { /* Implement me */ } while (0) + +/** + * Initialize the specified channel of the DAC for AFSK needs. + * The DAC has to be configured in order to call an ISR for every sample sent. + * The DAC doesn't have to start the IRQ immediatly but have to wait + * the AFSK driver to call AFSK_DAC_IRQ_START(). + * The ISR must then call afsk_dac_isr() passing the AFSK context. + * \param ch DAC channel to be used for AFSK modulation. + * \param ctx AFSK context (\see Afsk). This parameter must be saved and + * passed back to afsk_dac_isr() for every convertion. + */ +#define AFSK_DAC_INIT(ch, ctx) do { (void)ch, (void)ctx; } while (0) + +/** + * Start DAC convertions on channel \a ch. + * \param ch DAC channel. + */ +#define AFSK_DAC_IRQ_START(ch) do { (void)ch; /* Implement me */ } while (0) + +/** + * Stop DAC convertions on channel \a ch. + * \param ch DAC channel. + */ +#define AFSK_DAC_IRQ_STOP(ch) do { (void)ch; /* Implement me */ } while (0) + +#endif /* HW_AFSK_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_blanker.h b/boards/stm32VLDiscovery/hw/hw_blanker.h new file mode 100644 index 00000000..c8c11331 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_blanker.h @@ -0,0 +1,49 @@ +/** + * \file + * + * + * \brief Hardware-specific definitions + * + * + * \author Daniele Basile + */ + +#ifndef HW_BALNCKER_H +#define HW_BALNCKER_H + +#warning TODO:This is an example implementation, you must implement it! + +#define BLK_LCDON /* power_LcdOn() Implement me! */ +#define BLK_LCDOFF /* power_LcdOff() Implement me! */ + + +#endif /* HW_BLANCKER_H */ + diff --git a/boards/stm32VLDiscovery/hw/hw_boot.h b/boards/stm32VLDiscovery/hw/hw_boot.h new file mode 100644 index 00000000..34238102 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_boot.h @@ -0,0 +1,50 @@ +/** + * \file + * + * + * \brief Bootloader hardware specific definition. + * + * \author Daniele Basile + */ + +#ifndef HW_BOOT_H +#define HW_BOOT_H + +/** + * Define bootloader flash size. + * + * Note: Remember that this size should be comply + * to size defined in linker script, otherwise you + * could not find the main program application. + */ +#define FLASH_BOOT_SIZE 0x8000 // 32kbyte + +#endif /* HW_BOOT_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_buzzer.h b/boards/stm32VLDiscovery/hw/hw_buzzer.h new file mode 100644 index 00000000..d5974782 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_buzzer.h @@ -0,0 +1,51 @@ +/** + * \file + * + * + * \brief Buzzer hardware-specific definitions + * + * + * \author Francesco Sacchi + */ + +#ifndef HW_BUZZER_H +#define HW_BUZZER_H + +#warning TODO:This is an example implementation, you must implement it! + +#define BUZZER_BIT 1 +#define IS_BUZZER_ON 0 +#define BUZZER_HW_INIT do { /* Implement me! */ } while (0) +#define BUZZER_ON do { /* Implement me! */ } while (0) +#define BUZZER_OFF do { /* Implement me! */ } while (0) + +#endif /* HW_BUZZER_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_buzzerled.h b/boards/stm32VLDiscovery/hw/hw_buzzerled.h new file mode 100644 index 00000000..4399e0a8 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_buzzerled.h @@ -0,0 +1,46 @@ +/** + * \file + * + * + * \brief Buzzerled hardware-specific definitions + * + * + * \author Daniele Basile + */ + + +#ifndef HW_BUZZERLED_H +#define HW_BUZZERLED_H + +#warning TODO:This is an example implementation, you must implement it! + + +#endif /* HW_BUZZERLED_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_cpufreq.h b/boards/stm32VLDiscovery/hw/hw_cpufreq.h new file mode 100644 index 00000000..7bbca4c5 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_cpufreq.h @@ -0,0 +1,63 @@ +/** + * \file + * + * + * \brief Hardware-specific definitions + * + * + * \author Francesco Sacchi + */ + +#ifndef HW_CPUFREQ_H +#define HW_CPUFREQ_H + +#ifndef CPU_FREQ + #warning CPU_FREQ is not defined, you should upgrade to the newer clock frequency defining method. + + /* + * This file is DEPRECATED, it will be removed in the next major release. + * We have set up a new cpu frequency definition method. + * The new macro CPU_FREQ should be defined as a compiler flag in the + * makefile instead of the old CLOCK_FREQ macro. With new projects you should only + * use the CPU_FREQ macro. + * + * With gcc you should add something like this: + * + * -D'CPU_FREQ=(12288000UL)' + * + * For backward compatibility the old method is still supported. + */ + #include "hw/hw_cpu.h" + + #define CPU_FREQ (CLOCK_FREQ) +#endif /* CPU_FREQ */ + +#endif /* HW_CPUFREQ_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_dataflash.c b/boards/stm32VLDiscovery/hw/hw_dataflash.c new file mode 100644 index 00000000..1a758a86 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_dataflash.c @@ -0,0 +1,125 @@ +/** + * \file + * + * + * \brief Dataflash HW control routines. + * + * \author Francesco Sacchi + */ + +#include "hw/hw_dataflash.h" + +#include +#include +#include + +#warning TODO:This is an example implementation, you must implement it! + +MOD_DEFINE(hw_dataflash); + +/** + * Data flash init function. + * + * This function provide to initialize all that + * needs to drive a dataflash memory. + * Generaly needs to init pins to drive a CS line + * and reset line. + */ +void dataflash_hw_init(void) +{ + + //Disable CS line (remove if not needed) + dataflash_hw_setCS(false); + + /* + * Put here your code! + * + * Note: + * - if you drive manualy CS line, here init a CS pin + * - if you use a dedicated reset line, here init a reset pin + */ + + MOD_INIT(hw_dataflash); +} + +/** + * Chip Select drive. + * + * This function enable or disable a CS line. + * You must implement this function comply to a dataflash + * memory datasheet to allow the drive to enable a memory + * when \p enable flag is true, and disable it when is false. + */ +void dataflash_hw_setCS(bool enable) +{ + if (enable) + { + /* + * Put here your code to enable + * dataflash memory + */ + } + else + { + /* + * Put here your code to disable + * dataflash memory + */ + } +} + +/** + * Reset data flash memory. + * + * This function provide to send reset signal to + * dataflash memory. You must impement it comly to a dataflash + * memory datasheet to allow the drive to set a reset pin + * when \p enable flag is true, and disable it when is false. + * + */ +void dataflash_hw_setReset(bool enable) +{ + if (enable) + { + /* + * Put here your code to set reset of + * dataflash memory + */ + } + else + { + /* + * Put here your code to clear reset of + * dataflash memory + */ + } +} + diff --git a/boards/stm32VLDiscovery/hw/hw_dataflash.h b/boards/stm32VLDiscovery/hw/hw_dataflash.h new file mode 100644 index 00000000..0ea2fc9a --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_dataflash.h @@ -0,0 +1,47 @@ +/** + * \file + * + * + * \brief Dataflash HW control routines (interface). + * + * \author Francesco Sacchi + */ + +#ifndef HW_DATAFLASH_H +#define HW_DATAFLASH_H + +#include + +void dataflash_hw_init(void); +void dataflash_hw_setCS(bool enable); +void dataflash_hw_setReset(bool enable); + +#endif /* HW_DATAFLASH_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_dc_motor.h b/boards/stm32VLDiscovery/hw/hw_dc_motor.h new file mode 100644 index 00000000..f39388df --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_dc_motor.h @@ -0,0 +1,71 @@ +/** + * \file + * + * + * \brief DC motor hardware-specific definitions + * + * \author Daniele Basile + */ + +#ifndef HW_DC_MOTOR_H +#define HW_DC_MOTOR_H + +#warning TODO:This is an example implementation, you must implement it! + +/** + * Define fuctions which read adc value from specific device + */ + #define HW_DC_MOTOR_READ_VALUE(dev, min, max) \ + ({ \ + /* Put here the fuction that read from ADC */ \ + (void)(dev); \ + (void)(min); \ + (void)(max); \ + (0); \ + }) + +// Macro that enable the select DC motor +#define DC_MOTOR_ENABLE(dev) /* Implement me! */ +// Macro that disable the select DC motor +#define DC_MOTOR_DISABLE(dev) /* Implement me! */ + +// Macro that left the DC motor rotor float +#define DC_MOTOR_STOP_FLOAT(dev) DC_MOTOR_DISABLE(dev) +// Macro that put in short circuit DC motor supply pins +#define DC_MOTOR_STOP_BRAKED(dev) do { /* Implement me! */ } while (0) + +// Macro that set motor direction +#define DC_MOTOR_SET_DIR(dev, dir) do { /* Implement me! */ } while (0) + +#define MOTOR_DC_INIT() do { /* Implement me! */ } while (0) + + +#endif /* HW_DC_MOTOR_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_ft245rl.h b/boards/stm32VLDiscovery/hw/hw_ft245rl.h new file mode 100644 index 00000000..e2600201 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_ft245rl.h @@ -0,0 +1,64 @@ +/** + * \file + * + * + * \brief FT245RL USB interface hardware-specific definitions + * + * + * \author Francesco Sacchi + */ + +#ifndef HW_FT245RL_H +#define HW_FT245RL_H + +#warning TODO:This is an example implementation, you must implement it! + +#define FT245RL_DATA_IN() /* Implement me! */ +#define FT245RL_DATA_OUT() /* Implement me! */ +#define WR_HI /* Implement me! */ +#define WR_LO /* Implement me! */ + +#define RD_HI /* Implement me! */ +#define RD_LO /* Implement me! */ + +#define FT245RL_INIT() \ +do \ +{ \ + /* Implement me! */ \ +} while(0) + +#define FT245RL_DATA_RDY() (/* Implement me! */ false) +#define FT245RL_GETDATA() ({/* Implement me! */ (0);}) +#define FT245RL_TX_ALLOWED() (/* Implement me! */ false) +#define FT245RL_SETDATA(data) do {/* Implement me! */ (void)((data)); } while(0) + +#endif /* HW_FT245RL_H */ + diff --git a/boards/stm32VLDiscovery/hw/hw_i2c_bitbang.h b/boards/stm32VLDiscovery/hw/hw_i2c_bitbang.h new file mode 100644 index 00000000..a5aea90a --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_i2c_bitbang.h @@ -0,0 +1,156 @@ +/** + * \file + * + * + * \brief Macro for I2C bitbang operation. + * + * + * + * \author Francesco Sacchi + */ + +#ifndef HW_I2C_BITBANG_H +#define HW_I2C_BITBANG_H + +#include + +#include + +#include +#include +#include + +#define SDA_PIN BV(0) +#define SCL_PIN BV(1) + +#define SDA_HI \ + stm32_gpioPinConfig((struct stm32_gpio *)GPIOB_BASE, SDA_PIN, GPIO_MODE_IN_FLOATING, GPIO_SPEED_50MHZ) + +#define SDA_LO \ + stm32_gpioPinConfig((struct stm32_gpio *)GPIOB_BASE, SDA_PIN, GPIO_MODE_OUT_PP, GPIO_SPEED_50MHZ) + +#define SCL_HI \ + stm32_gpioPinConfig((struct stm32_gpio *)GPIOB_BASE, SCL_PIN, GPIO_MODE_IN_FLOATING, GPIO_SPEED_50MHZ) + +#define SCL_LO \ + stm32_gpioPinConfig((struct stm32_gpio *)GPIOB_BASE, SCL_PIN, GPIO_MODE_OUT_PP, GPIO_SPEED_50MHZ) + + +#define SCL_IN \ + ({ \ + (stm32_gpioPinRead((struct stm32_gpio *)GPIOB_BASE, SCL_PIN)); \ + }) + +#define SDA_IN \ + ({ \ + (stm32_gpioPinRead((struct stm32_gpio *)GPIOB_BASE, SDA_PIN)); \ + }) + +/** + * This macro should set SDA and SCL lines as input. + */ +#define I2C_BITBANG_HW_INIT \ + do { \ + RCC->APB2ENR |= RCC_APB2_GPIOB; \ + stm32_gpioPinConfig((struct stm32_gpio *)GPIOB_BASE, SDA_PIN | SCL_PIN, GPIO_MODE_IN_FLOATING, GPIO_SPEED_50MHZ); \ + } while (0) + +/** + * Half bit delay routine used to generate the correct timings. + */ +#define I2C_HALFBIT_DELAY() \ + do { \ + timer_delay(1); \ + } while (0) + + +/* + * New api + */ +#include + +INLINE void i2c_sdaHi(int dev) +{ + (void)(dev); + stm32_gpioPinConfig((struct stm32_gpio *)GPIOB_BASE, SDA_PIN, GPIO_MODE_IN_FLOATING, GPIO_SPEED_50MHZ); +} + +INLINE void i2c_sdaLo(int dev) +{ + (void)(dev); + stm32_gpioPinConfig((struct stm32_gpio *)GPIOB_BASE, SDA_PIN, GPIO_MODE_OUT_PP, GPIO_SPEED_50MHZ); +} + +INLINE void i2c_sclHi(int dev) +{ + (void)(dev); + stm32_gpioPinConfig((struct stm32_gpio *)GPIOB_BASE, SCL_PIN, GPIO_MODE_IN_FLOATING, GPIO_SPEED_50MHZ); +} + +INLINE void i2c_sclLo(int dev) +{ + (void)(dev); + stm32_gpioPinConfig((struct stm32_gpio *)GPIOB_BASE, SCL_PIN, GPIO_MODE_OUT_PP, GPIO_SPEED_50MHZ); +} + +INLINE bool i2c_sdaIn(int dev) +{ + (void)(dev); + return stm32_gpioPinRead((struct stm32_gpio *)GPIOB_BASE, SDA_PIN); +} + +INLINE bool i2c_sclIn(int dev) +{ + (void)(dev); + return stm32_gpioPinRead((struct stm32_gpio *)GPIOB_BASE, SCL_PIN); +} + +/** + * Half bit delay routine used to generate the correct timings. + */ +INLINE void i2c_halfbitDelay(int dev) +{ + (void)(dev); + timer_udelay(1); +} + +/** + * This macro should set SDA and SCL lines as input. + */ +INLINE void i2c_bitbangInit(int dev) +{ + (void)(dev); + RCC->APB2ENR |= RCC_APB2_GPIOB; + stm32_gpioPinConfig((struct stm32_gpio *)GPIOB_BASE, SDA_PIN | SCL_PIN, GPIO_MODE_IN_FLOATING, GPIO_SPEED_50MHZ); +} + +#endif /* HW_I2C_BITBANG_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_input.h b/boards/stm32VLDiscovery/hw/hw_input.h new file mode 100644 index 00000000..dbf3bc50 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_input.h @@ -0,0 +1,46 @@ +/** + * \file + * + * + * \brief Macro for HW_INPUT_H + * + * \author Andrea Grandi + */ + +#ifndef HW_INPUT_H +#define HW_INPUT_H + +#warning FIXME: This is an example implementation, you must implement it + +#define INPUT_INIT() do { /* implement me */} while(0) + +#endif /* HW_INPUT_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_kbd.h b/boards/stm32VLDiscovery/hw/hw_kbd.h new file mode 100644 index 00000000..905c3c7d --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_kbd.h @@ -0,0 +1,66 @@ +/** + * \file + * + * + * \author Andrea Righi + * + * \brief Keyboard driver of the STM32-P103 evaluation board + */ + +#ifndef HW_KBD_H +#define HW_KBD_H + +#include "hw/kbd_map.h" + +#include +#include + +#define K_RPT_MASK (K_WAKEUP) + +#define KBD_HW_INIT \ + do { \ + stm32_gpioPinConfig((struct stm32_gpio *)GPIOA_BASE, \ + BV(0), GPIO_MODE_IN_FLOATING, \ + GPIO_SPEED_50MHZ); \ + } while (0) + +EXTERN_C int emul_kbdReadCols(void); + +/** + * Read the keyboard ports and return the mask of + * depressed keys. + */ +INLINE keymask_t kbd_readkeys(void) +{ + return stm32_gpioPinRead((struct stm32_gpio *)GPIOA_BASE, BV(0)); +} + +#endif /* HW_KBD_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_lcd_32122a.h b/boards/stm32VLDiscovery/hw/hw_lcd_32122a.h new file mode 100644 index 00000000..6ec29c5c --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_lcd_32122a.h @@ -0,0 +1,155 @@ +/** + * \file + * + * + * \brief Displaytech 32122A LCD driver + * + * \author Bernie Innocenti + * \author Stefano Fedrigo + * + */ + +#ifndef HW_LCD_32122A_H +#define HW_LCD_32122A_H + +#include +#include + +#warning TODO:This is an example implementation, you must implement it! + +/** + * Predefined LCD PWM contrast values + */ +#define LCD_DEF_PWM 145 +#define LCD_MAX_PWM 505 +#define LCD_MIN_PWM 130 +#define LCD_PWM_CH 0 + + +/** + * \name LCD I/O pins/ports + * @{ + */ +#define LCD_RS /* Implement me! */ +#define LCD_RW /* Implement me! */ +#define LCD_PE_E1 /* Implement me! */ +#define LCD_PE_E2 /* Implement me! */ +#define LCD_DB0 /* Implement me! */ +#define LCD_DB1 /* Implement me! */ +#define LCD_DB2 /* Implement me! */ +#define LCD_DB3 /* Implement me! */ +#define LCD_DB4 /* Implement me! */ +#define LCD_DB5 /* Implement me! */ +#define LCD_DB6 /* Implement me! */ +#define LCD_DB7 /* Implement me! */ +#define LCD_PF_DB0 /* Implment me! */ +/*@}*/ + +/** + * \name LCD bus control macros + * @{ + */ +#define LCD_CLR_A0 do { /* Implement me! */ } while (0) +#define LCD_SET_A0 do { /* Implement me! */ } while (0) +#define LCD_CLR_RD do { /* Implement me! */ } while (0) +#define LCD_SET_RD do { /* Implement me! */ } while (0) +#define LCD_CLR_E1 do { /* Implement me! */ } while (0) +#define LCD_SET_E1 do { /* Implement me! */ } while (0) +#define LCD_CLR_E2 do { /* Implement me! */ } while (0) +#define LCD_SET_E2 do { /* Implement me! */ } while (0) +#define LCD_SET_E(x) do { (void)x; /* Implement me! */ } while (0) +#define LCD_CLR_E(x) do { (void)x; /* Implement me! */ } while (0) +/*@}*/ + +/** + * \name Chip select bits for LCD_SET_E() + * @{ + */ +#define LCDF_E1 ( 0/* Implement me! */) +#define LCDF_E2 ( 0/* Implement me! */) +/*@}*/ +/** Read from the LCD data bus (DB[0-7]) */ +#define LCD_WRITE(x) ((void)x)/* Implement me! */ +/** Write to the LCD data bus (DB[0-7]) */ +#define LCD_READ (0 /* Implement me! */ ) + +/** Set data bus direction to output (write to display) */ +#define LCD_DB_OUT /* Implement me! */ + +/** Set data bus direction to input (read from display) */ +#define LCD_DB_IN /* Implement me! */ + +/** Delay for write (Enable pulse width, 220ns) */ +#define LCD_DELAY_WRITE \ + do { \ + NOP; \ + NOP; \ + NOP; \ + NOP; \ + NOP; \ + } while (0) + +/** Delay for read (Data ouput delay time, 120ns) */ +#define LCD_DELAY_READ \ + do { \ + NOP; \ + NOP; \ + NOP; \ + NOP; \ + } while (0) + + +#define LCD_32122_RESET() do { /* Implement me! */ } while (0) + +INLINE void lcd_32122a_hw_bus_init(void) +{ + cpu_flags_t flags; + IRQ_SAVE_DISABLE(flags); + + /* + * Here set bus pin! + * to init a lcd device. + * + */ + + /* + * Data bus is in output state most of the time: + * LCD r/w functions assume it is left in output state + */ + LCD_DB_OUT; + + + IRQ_RESTORE(flags); +} + +#endif /* HW_LCD_32122A_H */ + diff --git a/boards/stm32VLDiscovery/hw/hw_lcd_hd44.h b/boards/stm32VLDiscovery/hw/hw_lcd_hd44.h new file mode 100644 index 00000000..dfebbcab --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_lcd_hd44.h @@ -0,0 +1,157 @@ +/** + * \file + * + * + * \brief LCD low-level hardware macros + * + * \author Bernie Innocenti + * \author Stefano Fedrigo + * + */ + +#ifndef HW_LCD_HD44_H +#define HW_LCD_HD44_H + +#include "cfg/cfg_lcd_hd44.h" /* CONFIG_LCD_4BIT */ + +#include +#include + +#warning TODO:This is an example implementation, you must implement it! + +/** + * \name LCD I/O pins/ports + * @{ + */ +#define LCD_RS /* Implement me! */ +#define LCD_RW /* Implement me! */ +#define LCD_E /* Implement me! */ +#define LCD_DB0 /* Implement me! */ +#define LCD_DB1 /* Implement me! */ +#define LCD_DB2 /* Implement me! */ +#define LCD_DB3 /* Implement me! */ +#define LCD_DB4 /* Implement me! */ +#define LCD_DB5 /* Implement me! */ +#define LCD_DB6 /* Implement me! */ +#define LCD_DB7 /* Implement me! */ +/*@}*/ + +/** + * \name DB high nibble (DB[4-7]) + * @{ + */ + +#if CONFIG_LCD_4BIT + #define LCD_MASK (LCD_DB7 | LCD_DB6 | LCD_DB5 | LCD_DB4) + #define LCD_SHIFT 4 +#else + #define LCD_MASK (uint8_t)0xff + #define LCD_SHIFT 0 +#endif +/*@}*/ + +/** + * \name LCD bus control macros + * @{ + */ +#define LCD_CLR_RS /* Implement me! */ +#define LCD_SET_RS /* Implement me! */ +#define LCD_CLR_RD /* Implement me! */ +#define LCD_SET_RD /* Implement me! */ +#define LCD_CLR_E /* Implement me! */ +#define LCD_SET_E /* Implement me! */ + +/* Enter command mode */ +#define LCD_SET_COMMAND() /* Implement me! */ + +/* Enter data mode */ +#define LCD_SET_DATA() /* Implement me! */ + +#if CONFIG_LCD_4BIT + #define LCD_WRITE_H(x) ((void)x)/* Implement me! */ + #define LCD_WRITE_L(x) ((void)x)/* Implement me! */ + #define LCD_READ_H ( 0 /* Implement me! */ ) + #define LCD_READ_L ( 0 /* Implement me! */ ) +#else + #define LCD_WRITE(x) ((void)x)/* Implement me! */ + #define LCD_READ (0 /* Implement me! */ ) +#endif +/*@}*/ + +/** Set data bus direction to output (write to display) */ +#define LCD_DB_OUT /* Implement me! */ + +/** Set data bus direction to input (read from display) */ +#define LCD_DB_IN /* Implement me! */ +/** Delay for write (Enable pulse width, 220ns) */ +#define LCD_DELAY_WRITE \ + do { \ + NOP; \ + NOP; \ + NOP; \ + NOP; \ + NOP; \ + } while (0) + +/** Delay for read (Data ouput delay time, 120ns) */ +#define LCD_DELAY_READ \ + do { \ + NOP; \ + NOP; \ + NOP; \ + NOP; \ + } while (0) + + + +INLINE void lcd_hd44_hw_bus_init(void) +{ + cpu_flags_t flags; + IRQ_SAVE_DISABLE(flags); + + /* + * Here set bus pin! + * to init a lcd device. + * + */ + + /* + * Data bus is in output state most of the time: + * LCD r/w functions assume it is left in output state + */ + LCD_DB_OUT; + + + IRQ_RESTORE(flags); +} + +#endif /* HW_LCD_HD44_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_led.h b/boards/stm32VLDiscovery/hw/hw_led.h new file mode 100644 index 00000000..0116098b --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_led.h @@ -0,0 +1,71 @@ +/** + * \file + * + * + * \brief Led on/off macros for STM32-P103 board. + * + * \author Andrea Righi + */ + +#ifndef HW_LED_H +#define HW_LED_H + +#include + +#include + +#include +#include + +#define LED_PIN BV(8) +#define LED_GPIO_BASE ((struct stm32_gpio *)GPIOC_BASE) + +#define LED_ON() \ + do { \ + stm32_gpioPinWrite(LED_GPIO_BASE, LED_PIN, 1); \ + } while (0) + +#define LED_OFF() \ + do { \ + stm32_gpioPinWrite(LED_GPIO_BASE, LED_PIN, 0); \ + } while (0) + +#define LED_INIT() \ + do { \ + /* Enable clocking on GPIOA and GPIOC */ \ + RCC->APB2ENR |= RCC_APB2_GPIOC; \ + /* Configure the LED pin as GPIO */ \ + stm32_gpioPinConfig(LED_GPIO_BASE, \ + LED_PIN, GPIO_MODE_OUT_PP, \ + GPIO_SPEED_50MHZ); \ + } while(0) + +#endif /* HW_LED_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_lm75.h b/boards/stm32VLDiscovery/hw/hw_lm75.h new file mode 100644 index 00000000..290dae09 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_lm75.h @@ -0,0 +1,49 @@ +/** + * \file + * + * + * \brief Hardware macro definition. + * + * \author Daniele Basile + */ + +#ifndef HW_LM75_H +#define HW_LM75_H + +#warning TODO:This is an example implentation, you must implement it! + +#define LM75_HW_INIT() \ + do { \ + /* Pin init */\ + } while (0) + +#endif /* HW_LM75_H */ + diff --git a/boards/stm32VLDiscovery/hw/hw_mcp41.c b/boards/stm32VLDiscovery/hw/hw_mcp41.c new file mode 100644 index 00000000..512b19a1 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_mcp41.c @@ -0,0 +1,52 @@ +/** + * \file + * + * + * \brief MCP41 hardware-specific definitions + * + * \author Francesco Sacchi + */ + +#include "hw/hw_mcp41.h" + +#include +#include + +#warning TODO:This is an example implementation, you must implement it! + +const uint16_t mcp41_ports[MCP41_CNT] = +{ + 0, /* add here mcp41 ports */ +}; +const uint8_t mcp41_pins [MCP41_CNT] = +{ + 0, /* add here mcp41 ports */ +}; + diff --git a/boards/stm32VLDiscovery/hw/hw_mcp41.h b/boards/stm32VLDiscovery/hw/hw_mcp41.h new file mode 100644 index 00000000..b31a7dd8 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_mcp41.h @@ -0,0 +1,74 @@ +/** + * \file + * + * + * \brief MCP41 hardware-specific definitions + * + * \author Francesco Sacchi + */ + +#ifndef HW_MCP41_H +#define HW_MCP41_H + +#include "hw/mcp41_map.h" + +#include + + +#warning TODO:This is an example implementation, you must implement it! + + +INLINE void SET_MCP41_DDR(Mcp41Dev dev) +{ + /* Implement me! */ + //Warning: this funtions is like avr target name, + //fix it to comply for all target. + + //Only for test remove when implement this function + (void)dev; +} + +INLINE void MCP41_ON(Mcp41Dev i) +{ + /* Implement me! */ + + //Only for test remove when implement this function + (void)i; +} + +INLINE void MCP41_OFF(Mcp41Dev i) +{ + /* Implement me! */ + + //Only for test remove when implement this function + (void)i; +} + +#endif /* HW_MCP41_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_ntc.c b/boards/stm32VLDiscovery/hw/hw_ntc.c new file mode 100644 index 00000000..2509239d --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_ntc.c @@ -0,0 +1,45 @@ +/** + * \file + * + * + * \brief NTC hardware-specific definition + * + * \author Lorenzo Berni + * + */ + +#include +#include "hw/ntc_map.h" + +const res_t NTC_RSER[NTC_CNT]; +const res_t NTC_RPAR[NTC_CNT]; +const amp_t NTC_AMP[NTC_CNT]; +const NtcHwInfo* NTC_INFO[NTC_CNT]; diff --git a/boards/stm32VLDiscovery/hw/hw_ntc.h b/boards/stm32VLDiscovery/hw/hw_ntc.h new file mode 100644 index 00000000..0f6743ad --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_ntc.h @@ -0,0 +1,135 @@ +/** + * \file + * + * + * \brief NTC hardware-specific definition + * + * \author Francesco Sacchi + * + * A NTC acts as a variable resistor, whose resistance changes as a + * function of the temperature it measures. To sample it correctly, it is + * usually parallelized and serialized with two fixed resistor. The following diagram shows + * what is the exact disposition of the components, as handled by this + * library: + * + *
+ *                 o Vref
+ *                 |
+ *                 |                               o Vref
+ *                 |                               |
+ *               -----                             |
+ *              |     |                        ---------
+ *              | Rser|                       |         |
+ *              |     |                       |         |
+ *               -----     -----              |   ADC   |
+ *                 | Vp   |     |             |         |
+ *      -----------|------| Amp |-------------|         |
+ *     |           |      |     |      Vadc   |         |
+ *   -----       -----     -----               ---------
+ *  |     |     |     |
+ *  | NTC |     | Rpar|
+ *  |     |     |     |
+ *   -----       -----
+ *     |           |
+ *     |           |
+ *   -----       -----
+ *    ---         ---
+ *
+ * Amp is an amplifier that amplify of AMP times the signal. + * If we indicate Rp as the parallel of NTC with Rpar, ADCBITS as the bits of the ad converter + * and ADCVAL as the result from the adc convertion (Not Vadc but just the value read + * from the adc register), after various calculation, the expression of Rp is: + * + *
+ *
+ *            ADCVAL * Rser
+ * Rp = ------------------------
+ *         ADCBITS
+ *	2         * AMP - ADCVAL
+ *
+ * + * And after that NTC obvisiously is: + *
+ *        Rpar * Rp
+ * NTC = ----------
+ *        Rpar - Rp
+ *
+ * + * + * The function ntc_hw_read() compute the resistence using these formulas above. + */ + +#ifndef HW_NTC_H +#define HW_NTC_H + +#include "ntc_map.h" + +#include + +#include +#include + +#warning TODO:This is an example implementation, you must implement it! + +extern const res_t NTC_RSER[NTC_CNT]; +extern const res_t NTC_RPAR[NTC_CNT]; +extern const amp_t NTC_AMP[NTC_CNT]; +extern const NtcHwInfo* NTC_INFO[NTC_CNT]; + + +/*! + * Read the resistence of ntc device \a dev. + * Return the result in res_t type. + */ +INLINE res_t ntc_hw_read(NtcDev dev) +{ + ASSERT(dev < NTC_CNT); + // See above for formula explanation. + adcread_t adcval = adc_read((uint16_t)dev); + float rp = (adcval * NTC_RSER[dev] ) / ((1 << adc_bits()) * NTC_AMP[dev] - adcval); + + //kprintf("Rp[%f], Rntc[%f]\n", rp/100, ((NTC_RPAR[dev] * rp) / (NTC_RPAR[dev] - rp)) / 100.0); + + return ( (NTC_RPAR[dev] * rp) / (NTC_RPAR[dev] - rp) ); +} + + +/*! + * Return the info (aka the table) associated with ntc device \a dev. + */ +INLINE const NtcHwInfo* ntc_hw_getInfo(NtcDev dev) +{ + return NTC_INFO[dev]; +} + +#define NTC_HW_INIT do { /* Implement me! */ } while(0) + +#endif /* HW_NTC_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_phase.c b/boards/stm32VLDiscovery/hw/hw_phase.c new file mode 100644 index 00000000..cd502426 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_phase.c @@ -0,0 +1,45 @@ +/** + * \file + * + * + * \brief Phase control hardware-specific definitions + * + * \author Francesco Sacchi + */ + +#ifndef HW_PHASE_H +#define HW_PHASE_H + +#include "hw/hw_phase.h" + +#warning TODO:This is an example implementation, you must implement it! + +#endif /* HW_PHASE_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_phase.h b/boards/stm32VLDiscovery/hw/hw_phase.h new file mode 100644 index 00000000..7cae67cf --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_phase.h @@ -0,0 +1,79 @@ +/** + * \file + * + * + * \brief Phase control hardware-specific definitions + * + * + * \author Francesco Sacchi + */ + +#ifndef HW_PHASE_H +#define HW_PHASE_H + +#include "hw/phase_map.h" + +#include + +#warning TODO:This is an example implementation, you must implement it! + +#define PHASE_HW_INIT do { /* Implement me! */ }while (0) + +INLINE void TRIAC_OFF(TriacDev i) +{ + /* Implement me! */ + + //Only for test remove when implement this function + (void)i; +} + + +INLINE void TRIAC_ON(TriacDev i) +{ + /* Implement me! */ + + //Only for test remove when implement this function + (void)i; +} + +INLINE void SET_TRIAC_DDR(TriacDev i) +{ + /* Implement me! */ + + //Only for test remove when implement this function + (void)i; +} + +void zerocross_isr(void); +#define DEFINE_ZEROCROSS_ISR() void zerocross_isr(void) + + +#endif /* HW_PHASE_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_rit128x96.h b/boards/stm32VLDiscovery/hw/hw_rit128x96.h new file mode 100644 index 00000000..c24d1a87 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_rit128x96.h @@ -0,0 +1,78 @@ +/** + * \file + * + * + * \brief LM3S1986: OLED-RIT-128x96 (P14201) low-level hardware macros + * + * \author Andrea Righi + */ + +#ifndef HW_RIT128x96_H +#define HW_RIT128x96_H + +#include "cfg/macros.h" /* BV() */ +#include "cfg/debug.h" + +#include +#include +#include + +/** + * \name LCD I/O pins/ports + * @{ + */ +/* OLED Data/Command control pin */ +#define GPIO_OLEDDC_PIN 0 /* Implement me! */ + +/* OLED enable pin */ +#define GPIO_OLEDEN_PIN 0 /* Implement me! */ +/*@}*/ + +/** + * \name LCD bus control macros + * @{ + */ +/* Enter command mode */ +#define LCD_SET_COMMAND() /* Implement me! */ + +/* Enter data mode */ +#define LCD_SET_DATA() /* Implement me! */ + +/* Send data to the display */ +#define LCD_WRITE(x) ((void)x)/* Implement me! */ +/*@}*/ + +INLINE void lcd_rit128x96_hw_bus_init(void) +{ + /* Implement me! */ +} + +#endif /* HW_RIT128x96_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_sd.h b/boards/stm32VLDiscovery/hw/hw_sd.h new file mode 100644 index 00000000..ed10b806 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_sd.h @@ -0,0 +1,52 @@ +/** + * \file + * + * + * \brief SD driver hardware-specific definitions. + * + * + * \author Luca Ottaviano + */ + +#ifndef HW_SD_H +#define HW_SD_H + +#warning FIXME: This is an example implementation, you must implement it + +#define SD_CS_INIT() do { /* implement me */} while(0) +#define SD_CS_ON() do { /* implement me */} while(0) +#define SD_CS_OFF() do { /* implement me */} while(0) + +#define SD_PIN_INIT() do { /* implement me */} while(0) +#define SD_CARD_PRESENT() true /* implement me */ +#define SD_WRITE_PROTECT() false /* implement me */ + +#endif /* HW_SD_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_sensor.h b/boards/stm32VLDiscovery/hw/hw_sensor.h new file mode 100644 index 00000000..9913ff98 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_sensor.h @@ -0,0 +1,92 @@ +/** + * \file + * + * + * \brief Sensor hardware-specific definitions + * + * + * \author Daniele Basile + */ + +#ifndef HW_SENSOR_H +#define HW_SENSOR_H + +#warning TODO:This is an example implementation, you must implement it! + +#define NUM_HOME_SENSORS 1 + + +INLINE bool hw_home_sensor_read(int sensor) +{ + /* Implement me! */ + + //Only for test remove when implement this function + (void)sensor; + return 0; +} + +INLINE void hw_home_sensor_set_inverted(int sensor, bool inverted) +{ + /* Implement me! */ + + //Only for test remove when implement this function + (void)sensor; + (void)inverted; +} + +INLINE bool hw_level_sensor_read(int sensor) +{ + /* Implement me! */ + + //Only for test remove when implement this function + (void)sensor; + return 0; +} + +INLINE void hw_level_sensor_set_inverted(int sensor, bool inverted) +{ + /* Implement me! */ + + //Only for test remove when implement this function + (void)sensor; + (void)inverted; +} + +INLINE bool bld_hw_sensor_read(int sensor) +{ + /* Implement me! */ + + //Only for test remove when implement this function + (void)sensor; + return 0; +} + +#endif /* HW_SENSOR_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_ser.h b/boards/stm32VLDiscovery/hw/hw_ser.h new file mode 100644 index 00000000..2033c982 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_ser.h @@ -0,0 +1,52 @@ +/** + * \file + * + * + * \brief Serial hardware-specific definitions + * + * + * \author Daniele Basile + */ + +#ifndef HW_SER_H +#define HW_SER_H + +#include "cfg/cfg_ser.h" + +#if CONFIG_SER_STROBE + #warning FIXME: this is an example implementation, you must implement it + + #define SER_STROBE_INIT do { /* implement me */ } while (0) + #define SER_STROBE_ON do { /* implement me */ } while (0) + #define SER_STROBE_OFF do { /* implement me */ } while (0) +#endif + +#endif /* HW_SER_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_sipo.h b/boards/stm32VLDiscovery/hw/hw_sipo.h new file mode 100644 index 00000000..552d4dd5 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_sipo.h @@ -0,0 +1,108 @@ +/** + * \file + * + * + * \brief Macro for HW_SIPO_H + * + * + * + * \author Andrea Grandi + * \author Daniele Basile + */ + +#ifndef HW_SIPO_H +#define HW_SIPO_H + +/** + * Map sipo connection on board. + */ +typedef enum SipoMap +{ + SIPO_CNT +} SipoMap; + +/** + * Define generic macro to set pins logic level + */ +#define SIPO_SET_LEVEL_LOW(dev) do { /* Implement me! */ } while (0) +#define SIPO_SET_LEVEL_HIGH(dev) do { /* Implement me! */ } while (0) + + +/** + * Generate one low pulse on select line. + */ +#define PULSE_LOW(dev) do { /* Implement me! */ } while (0) + +/** + * Generate one hight pulse on select line. + */ +#define PULSE_HIGH(dev) do { /* Implement me! */ } while (0) + + +/** + * Define the procedure to drive serial input in sipo device (SI). + */ +#define SIPO_SI_HIGH() do { /* Implement me! */ } while (0) +#define SIPO_SI_LOW() do { /* Implement me! */ } while (0) + +/** + * Drive clock to shift SI data into latch. + */ +#define SIPO_SI_CLOCK(clk_pol) \ + do { \ + (void)clk_pol; \ + /* Implement me! */ \ + } while (0) + +/** + * Do everything needed in order to load dato into sipo. + */ +#define SIPO_LOAD(device, load_pol) do { /* Implement me! */ } while (0) + +/** + * Enable the shift register output. + */ +#define SIPO_ENABLE() do { /* Implement me! */ } while (0) + +/** + * Set polarity for Load, Clk, SI signals. + */ +#define SIPO_SET_LD_LEVEL(device, load_pol) do { /* Implement me! */ } while (0) +#define SIPO_SET_CLK_LEVEL(clock_pol) do { /* Implement me! */ } while (0) +#define SIPO_SET_SI_LEVEL() do { /* Implement me! */ } while (0) + +/** + * Do anything that needed to init sipo pins. + */ +#define SIPO_INIT_PIN() do { /* Implement me! */ } while (0) + +#endif /* HW_SIPO_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_spi.h b/boards/stm32VLDiscovery/hw/hw_spi.h new file mode 100644 index 00000000..991b86a9 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_spi.h @@ -0,0 +1,114 @@ +/** + * \file + * + * + * \brief Hardware macro definition. + * + * + * \author Daniele Basile + */ + +#ifndef HW_SPI_H +#define HW_SPI_H + +#warning TODO:This is an example implentation, you must implement it! + +#include + +/** + * SPI pin definition. + * + * \note CS is assert when level + * is low. + * + * \{ + */ +#define CS /* pin */ ///Connect to CS pin of Flash memory. +#define SCK /* pin */ ///Connect to SCK pin of Flash memory. +#define MOSI /* pin */ ///Connect to SI pin of Flash memory. +#define MISO /* pin */ ///Connect to SO pin of Flash memory. +#define SPI_PORT /* pin */ ///Micro pin PORT register. +#define SPI_PIN /* pin */ ///Micro pin PIN register. +#define SPI_DDR /* pin */ ///Micro pin DDR register. +/*\}*/ + +/** + * Pin logic level. + * + * \{ + */ +#define MOSI_LOW() do { /* Implement me! */ } while(0) +#define MOSI_HIGH() do { /* Implement me! */ } while(0) +#define MISO_HIGH() do { /* Implement me! */ } while(0) +#define SCK_LOW() do { /* Implement me! */ } while(0) +#define SCK_HIGH() do { /* Implement me! */ } while(0) +#define CS_LOW() do { /* Implement me! */ } while(0) +#define CS_HIGH() do { /* Implement me! */ } while(0) +/*\}*/ + +/** + * SPI pin commands. + * + * \{ + */ +#define CS_ENABLE() CS_LOW() +#define CS_DISABLE() CS_HIGH() +#define SS_ACTIVE() CS_LOW() +#define SS_INACTIVE() CS_HIGH() +#define SCK_INACTIVE() SCK_LOW() +#define SCK_ACTIVE() SCK_HIGH() +#define CS_OUT() do { /* Implement me! */ } while(0) +#define MOSI_IN() do { /* Implement me! */ } while(0) +#define MOSI_OUT() do { /* Implement me! */ } while(0) +#define IS_MISO_HIGH() (false /* Implement me! */ ) +#define MISO_IN() do { /* Implement me! */ } while(0) +#define MISO_OUT() do { /* Implement me! */ } while(0) +#define SCK_OUT() do { /* Implement me! */ } while(0) + +#define SCK_PULSE()\ + do {\ + SCK_HIGH();\ + SCK_LOW();\ + } while (0) +/*\}*/ + + +#define SPI_HW_INIT() \ + CS_DISABLE();\ + MOSI_LOW();\ + SCK_LOW();\ + MISO_IN();\ + MOSI_OUT();\ + SCK_OUT();\ + CS_OUT(); + +#endif /* HW_SPI_H */ + diff --git a/boards/stm32VLDiscovery/hw/hw_spi_dma.h b/boards/stm32VLDiscovery/hw/hw_spi_dma.h new file mode 100644 index 00000000..3d68f65d --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_spi_dma.h @@ -0,0 +1,47 @@ +/** + * \file + * + * + * \brief SPI DMA driver hardware-specific definitions. + * + * + * \author Francesco Sacchi + */ + +#ifndef HW_SPI_DMA_H +#define HW_SPI_DMA_H + +#define SPI_DMA_STROBE_INIT() do {/*PIOA_PER = BV(13); PIOA_OER = BV(13);*/} while(0) + +#define SPI_DMA_STROBE_ON() do {/*PIOA_CODR = BV(13);*/} while(0) +#define SPI_DMA_STROBE_OFF() do {/*PIOA_SODR = BV(13);*/} while(0) + +#endif /* HW_SPI_DMA_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_stepper.h b/boards/stm32VLDiscovery/hw/hw_stepper.h new file mode 100644 index 00000000..b97bacba --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_stepper.h @@ -0,0 +1,308 @@ +/** + * \file + * + * + * \brief Stepper hardware-specific definitions + * + * + * \author Daniele Basile + */ + + +#ifndef HW_STEPPER_H +#define HW_STEPPER_H + +#include + +#include + +#include + +#warning TODO:This is an example implentation, you must implement it! + +#define STEPPER_STROBE_INIT \ +do { \ + /* put init code for strobe */ \ +} while (0) + + +#define STEPPER_STROBE_ON do { /* Implement me! */ } while(0) +#define STEPPER_STROBE_OFF do { /* Implement me! */ } while(0) + +/** + * CPU clock frequency is divided by 2^STEPPER_PRESCALER_LOG2 to + * obtain stepper clock. + */ +#define STEPPER_PRESCALER_LOG2 1 + +/** + * Stepper timer clock frequency. + */ +#define STEPPER_CLOCK ((CPU_FREQ) >> STEPPER_PRESCALER_LOG2) + +/** + * us delay to reset a stepper motor. + * This is the time neccessary to reset + * the stepper controll chip. (see datasheet for more detail). + */ +#define STEPPER_RESET_DELAY 1 + +/* + * Pins define for each stepper + */ +#define STEPPER_1_CW_CCW_PIN 0 +#define STEPPER_1_HALF_FULL_PIN 0 +#define STEPPER_1_CONTROL_PIN 0 +#define STEPPER_1_ENABLE_PIN 0 +#define STEPPER_1_RESET_PIN 0 + +/* put here other stepper motor */ + +#define STEPPER_1_SET do { /* Implement me! */ } while(0) +/* add here the set for other stepper motor */ + +#define STEPPER_1_CLEAR do { /* Implement me! */ } while(0) +/* add here the clear for other stepper motor */ + +/* + * Generic macro definition + */ + +/* + * Stepper init macro + */ +#define STEPPER_PIN_INIT_MACRO(port, index) do { \ + /* Add here init pin code */ \ + } while (0) + +/* + * Stepper commands macros + */ +#define STEPPER_SET_CW(index) do { /* Implement me! */ } while (0) +#define STEPPER_SET_CCW(index) do { /* Implement me! */ } while (0) +#define STEPPER_SET_HALF(index) do { /* Implement me! */ } while (0) +#define STEPPER_SET_FULL(index) do { /* Implement me! */ } while (0) +#define STEPPER_SET_CONTROL_LOW(index) do { /* Implement me! */ } while (0) +#define STEPPER_SET_CONTROL_HIGHT(index) do { /* Implement me! */ } while (0) +#define STEPPER_SET_ENABLE(index) do { /* Implement me! */ } while (0) +#define STEPPER_SET_DISABLE(index) do { /* Implement me! */ } while (0) +#define STEPPER_SET_RESET_ENABLE(index) do { /* Implement me! */ } while (0) +#define STEPPER_SET_RESET_DISABLE(index) do { /* Implement me! */ } while (0) + + +/* + * Reset stepper macro + */ + +#define STEPPER_RESET_MACRO(index) do { \ + STEPPER_SET_RESET_ENABLE(index); \ + timer_udelay(STEPPER_RESET_DELAY); \ + STEPPER_SET_RESET_DISABLE(index); \ + } while (0) + +/* + * Set half or full step macro + */ +#define STEPPER_SET_STEP_MODE_MACRO(index, flag) do { \ + if (flag) \ + STEPPER_SET_HALF(index); \ + else \ + STEPPER_SET_FULL(index); \ + } while (0) + +/* + * Set control status macro + */ +#warning TODO: This macro is not implemented (see below) + +#define STEPPER_SET_CONTROL_BIT_MACRO(index, flag) do { \ + /* if (flag) */ \ + /* WARNING This macros not implemented */ \ + /* else */ \ + /* WARNING This macros not implemented */ \ + } while (0) + +/* + * Set current power macro + */ +#warning TODO: This macro is not implemented (see below) + +#define STEPPER_SET_POWER_CURRENT_MACRO(index, flag) do { \ + /* if (flag) */ \ + /* WARNING This macrois not implemented */ \ + /* else */ \ + /* WARNING This macrois not implemented */ \ + } while (0) + +/* + * Set rotation of stepper motor + * - dir = 1: positive rotation + * - dir = 0: no motor moviment + * - dir = -1: negative rotation + * + */ +#define STEPPER_SET_DIRECTION_MACRO(index, dir) do { \ + switch (dir) \ + { \ + case 1: \ + STEPPER_SET_CW(index); \ + break; \ + case -1: \ + STEPPER_SET_CCW(index); \ + break; \ + case 0: \ + break; \ + } \ + } while (0) + + +/* + * Define macros for manage low level of stepper. + */ + +#define STEPPER_INIT() do { \ + STEPPER_PIN_INIT_MACRO(A, 1); \ + /* Add here code for other stepper motor */ \ + } while (0) + + +/* + * Enable select stepper motor + */ +#define STEPPER_ENABLE(index) do { \ + switch (index) \ + { \ + case 1: \ + STEPPER_SET_ENABLE(1); \ + break; \ + /* Add here code for other stepper motor */ \ + } \ + } while (0) + +/* + * Enable all stepper connect to micro + */ +#define STEPPER_ENABLE_ALL() do { \ + STEPPER_SET_ENABLE(1); \ + /* Add here code for other stepper motor */ \ + } while (0) + +/* + * Disable select stepper motor + */ +#define STEPPER_DISABLE(index) do { \ + switch (index) \ + { \ + case 1: \ + STEPPER_SET_DISABLE(1); \ + break; \ + /* Add here code for other stepper motor */ \ + } \ + } while (0) + +/* + * Disable all stepper connect to micro + */ +#define STEPPER_DISABLE_ALL() do { \ + STEPPER_SET_DISABLE(1); \ + /* Add here code for other stepper motor */ \ + } while (0) + +/* + * Reset selected stepper motor + */ +#define STEPPER_RESET(index) do { \ + switch (index) \ + { \ + case 1: \ + STEPPER_RESET_MACRO(1); \ + break; \ + /* Add here code for other stepper motor */ \ + } \ + } while (0) + +/* + * Reset all stepper motor + */ +#define STEPPER_RESET_ALL() do { \ + STEPPER_RESET_MACRO(1) \ + /* Add here code for other stepper motor */ \ + } while (0) + +// Set half/full step macros +#define STEPPER_SET_HALF_STEP(index, flag) do { \ + switch (index) \ + { \ + case 1: \ + STEPPER_SET_STEP_MODE_MACRO(1, flag); \ + break; \ + /* Add here code for other stepper motor */ \ + } \ + } while (0) + + +// Control status +#define STEPPER_SET_CONTROL_BIT(index, flag) do { \ + switch (index) \ + { \ + case 1: \ + STEPPER_SET_CONTROL_BIT_MACRO(1, flag); \ + break; \ + /* Add here code for other stepper motor */ \ + } \ + } while (0) + + +// Set stepper power current +#define STEPPER_SET_POWER_CURRENT(index, flag) do { \ + switch (index) \ + { \ + case 1: \ + STEPPER_SET_POWER_CURRENT_MACRO(1, flag); \ + break; \ + /* Add here code for other stepper motor */ \ + } \ + } while (0) + +// Set rotation dirction of stepper motor +#define STEPPER_SET_DIRECTION(index, dir) do { \ + switch (index) \ + { \ + case 1: \ + STEPPER_SET_DIRECTION_MACRO(1, dir); \ + break; \ + /* Add here code for other stepper motor */ \ + } \ + } while (0) + +#endif /* HW_STEPPER_H */ + + diff --git a/boards/stm32VLDiscovery/hw/hw_tas5706a.h b/boards/stm32VLDiscovery/hw/hw_tas5706a.h new file mode 100644 index 00000000..fda85e12 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_tas5706a.h @@ -0,0 +1,64 @@ +/** + * \file + * + * + * \brief HW pin handling. + * + * + * \author Francesco Sacchi + */ + +#ifndef HW_TAS5706A_H +#define HW_TAS5706A_H + +#include + +#warning FIXME: This is an example implementation, you must implement it + +#define TAS5706A_SETPOWERDOWN(val) do { (void) val; /* implement me */ } while (0) +#define TAS5706A_SETRESET(val) do { (void) val; /* implement me */ } while (0) +#define TAS5706A_SETMUTE(val) do { (void) val; /* implement me */ } while (0) + +#define TAS5706A_PIN_INIT() \ + do { \ + TAS5706A_SETPOWERDOWN(true); \ + TAS5706A_SETRESET(true); \ + TAS5706A_SETMUTE(true); \ + /* complete me */ \ + } while (0) + +#define TAS5706A_MCLK_INIT() \ + do { \ + /* implement me */ \ + } while(0) + + +#endif /* HW_TAS5706A_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_tc520.h b/boards/stm32VLDiscovery/hw/hw_tc520.h new file mode 100644 index 00000000..77d48d07 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_tc520.h @@ -0,0 +1,70 @@ +/** + * \file + * + * + * + * \brief TC520 hardware-specific definitions + * + * \author Francesco Sacchi + */ + +#ifndef HW_TC520_H +#define HW_TC520_H + +#include + +#warning TODO:This is an example implentation, you must implement it! + +#define CE_PIN 0 +#define DV_PIN 0 +#define LOAD_PIN 0 +#define READ_PIN 0 + + +#define DV_HIGH() /* Implement me! */ +#define DV_LOW() /* Implement me! */ + +#define CE_HIGH() /* Implement me! */ +#define CE_LOW() /* Implement me! */ + +#define LOAD_HIGH() /* Implement me! */ +#define LOAD_LOW() /* Implement me! */ + +#define READ_HIGH() /* Implement me! */ +#define READ_LOW() /* Implement me! */ + +#define TC520_HW_INIT \ +do\ +{\ + /* Put here your code to init hardware */ \ +} while(0) + +#endif /* HW_TC520_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_thermo.h b/boards/stm32VLDiscovery/hw/hw_thermo.h new file mode 100644 index 00000000..6f478068 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_thermo.h @@ -0,0 +1,121 @@ +/** + * \file + * + * + * \brief thermo hardware-specific control functions. + * + * \author Francesco Sacchi + * + */ + +#ifndef HW_THERMO_H +#define HW_THERMO_H + +#include "hw/thermo_map.h" + +#include + +#include + + +INLINE ticks_t thermo_hw_timeout(ThermoDev dev) +{ + (void)dev; + return 0; +} + +/** + * This function should return the temperature set tolerance. + */ +INLINE deg_t thermo_hw_tolerance(ThermoDev dev) +{ + (void)dev; + return 0; +} + +/** + * Read the temperature of the hw device \a dev. + */ +INLINE deg_t thermo_hw_read(ThermoDev dev) +{ + ASSERT(dev < THERMO_CNT); + /* Put here the code to read current temperature */ + return 0; +} + + +/** + * Turns off a specific device. + * This function is usefull to handle errors. + */ +INLINE void thermo_hw_off(ThermoDev dev) +{ + ASSERT(dev < THERMO_CNT); + /* Put here the code to turn off the thermo device */ +} + +/** + * Based on the current temperature \a cur_temp and the target temperature \a target, + * this function turns on and off specific thermo device. + * It may use also PID control for thermo-regolations. + */ +INLINE void thermo_hw_set(ThermoDev dev, deg_t target, deg_t cur_temp) +{ + ASSERT(dev < THERMO_CNT); + + if (target - cur_temp > 0) + { + /* + * We are leveaving the target temperature, so + * turn on the thermo device! + */ + } + else + { + /* + * Ok, we are near the target temperature, so + * turn off the thermo device! + */ + } + +} + +#define THERMO_HW_INIT _thermo_hw_init() + +/** + * Init hw associated with thermo-control. + */ +INLINE void _thermo_hw_init(void) +{ + /* Init your devices here! */ +} + +#endif /* HW_THERMO_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_timer.h b/boards/stm32VLDiscovery/hw/hw_timer.h new file mode 100644 index 00000000..f9542b28 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_timer.h @@ -0,0 +1,51 @@ +/** + * \file + * + * + * \brief Timer hardware-specific definitions + * + * + * \author Francesco Sacchi + */ + +#ifndef HW_TIMER_H +#define HW_TIMER_H + +#include "cfg/cfg_timer.h" + +#if CONFIG_TIMER_STROBE + #warning TODO:This is an example implementation, you must implement it! + #define TIMER_STROBE_INIT do { /* implement me */ } while (0) + #define TIMER_STROBE_ON do { /* implement me */ } while (0) + #define TIMER_STROBE_OFF do { /* implement me */ } while (0) +#endif + +#endif /* HW_TIMER_H */ diff --git a/boards/stm32VLDiscovery/hw/hw_tlv5618.h b/boards/stm32VLDiscovery/hw/hw_tlv5618.h new file mode 100644 index 00000000..4a2b4202 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_tlv5618.h @@ -0,0 +1,69 @@ +/** + * \file + * + * + * \brief TLV5816 DAC hardware-specific definitions + * + * + * \author Francesco Sacchi + */ + +#ifndef HW_TLV5816_H +#define HW_TLV5816_H + +#warning TODO:This is an example implementation, you must implement it! + +#define TLV5618_CSINIT(pin) \ +do \ +{ \ + (void)pin; \ + /* Implement me! */ \ + TLV5618_CSHIGH(pin); \ +} while(0) + +#define TLV5618_CSLOW(pin) \ +do \ +{ \ + (void)pin; \ + /* Implement me! */ \ +} while(0) + + +#define TLV5618_CSHIGH(pin) \ +do \ +{ \ + (void)pin; \ + /* Implement me! */ \ +} while(0) + + +#endif /* HW_TLV5816_H */ + diff --git a/boards/stm32VLDiscovery/hw/hw_tmp123.h b/boards/stm32VLDiscovery/hw/hw_tmp123.h new file mode 100644 index 00000000..adb18588 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/hw_tmp123.h @@ -0,0 +1,52 @@ +/** + * \file + * + * + * \brief Hardware macro definition. + * + * \author Daniele Basile + */ + +#ifndef HW_TMP123_H +#define HW_TMP123_H + +#warning TODO:This is an example implentation, you must implement it! + +#define TMP123_HW_CS_EN() /* Implement me! */ +#define TMP123_HW_CS_DIS() /* Implement me! */ + +#define TMP123_HW_INIT() \ + do { \ + /* Pin init */\ + } while (0) + +#endif /* HW_TMP123_H */ + diff --git a/boards/stm32VLDiscovery/hw/kbd_map.h b/boards/stm32VLDiscovery/hw/kbd_map.h new file mode 100644 index 00000000..d19ab81e --- /dev/null +++ b/boards/stm32VLDiscovery/hw/kbd_map.h @@ -0,0 +1,61 @@ +/** + * \file + * + * + * \author Andrea Righi + * + * \brief Keyboard map definitions for the STM32-P103 evaluation board + */ + +#ifndef HW_KBD_MAP_H +#define HW_KBD_MAP_H + +#include + +/** + * Type for keyboard mask. + */ +typedef uint16_t keymask_t; + +/** + * \name Keycodes. + */ +/*@{*/ +#define K_WAKEUP BV(0) + +#define K_REPEAT BV(13) /**< This is a repeated keyevent. */ +#define K_TIMEOUT BV(14) /**< Fake key event for timeouts. */ +#define K_LONG BV(15) +/*@}*/ + +#define K_LNG_MASK 0 + +#endif /* HW_KBD_MAP_H */ diff --git a/boards/stm32VLDiscovery/hw/mcp41_map.h b/boards/stm32VLDiscovery/hw/mcp41_map.h new file mode 100644 index 00000000..b2d223cf --- /dev/null +++ b/boards/stm32VLDiscovery/hw/mcp41_map.h @@ -0,0 +1,58 @@ +/** + * \file + * + * + * \brief MCP41 digital potentiometer map definitions. + * + * + * \author Francesco Sacchi + */ + +#ifndef MCP41_MAP_H +#define MCP41_MAP_H + +#warning TODO:This is an example implentation, you must implement it! + +/** \name Enum for mcp41 pot evices. + * \{ + * + */ +typedef enum Mcp41Dev +{ + MCP41_LED, + + /* put here other mcp41 device */ + + MCP41_CNT, +} Mcp41Dev; +/* \} */ + +#endif /* MCP41_MAP_H */ diff --git a/boards/stm32VLDiscovery/hw/ntc_map.h b/boards/stm32VLDiscovery/hw/ntc_map.h new file mode 100644 index 00000000..6d256be7 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/ntc_map.h @@ -0,0 +1,60 @@ +/** + * \file + * + * + * \brief NTC map definitions. + * + * + * \author Giovanni Bajo + * \author Francesco Sacchi + */ + +#ifndef NTC_MAP_H +#define NTC_MAP_H + +#include + +#warning TODO:This is an example implentation, you must implement it! + +/*! \name Enum for ntc devices. + * \{ + */ +typedef enum NtcDev +{ + NTC_TEST, + + /* Put here your thermo device */ + + NTC_CNT +} NtcDev; +/* \} */ + +#endif /* NTC_MAP_H */ diff --git a/boards/stm32VLDiscovery/hw/phase_map.h b/boards/stm32VLDiscovery/hw/phase_map.h new file mode 100644 index 00000000..185a36f4 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/phase_map.h @@ -0,0 +1,57 @@ +/** + * \file + * + * + * \brief Triac map definitions. + * + * + * \author Francesco Sacchi + */ + +#ifndef PHASE_MAP_H +#define PHASE_MAP_H + +#warning TODO:This is an example implentation, you must implement it! + +/*! \name Enum for triac devices. + * \{ + */ +typedef enum TriacDev +{ + TRIAC_TEST, + + /* Put here other triac device */ + + TRIAC_CNT +} TriacDev; +/* \} */ + +#endif /* PHASE_MAP_H */ diff --git a/boards/stm32VLDiscovery/hw/pwm_map.h b/boards/stm32VLDiscovery/hw/pwm_map.h new file mode 100644 index 00000000..634f3ec8 --- /dev/null +++ b/boards/stm32VLDiscovery/hw/pwm_map.h @@ -0,0 +1,60 @@ +/** + * \file + * + * + * + * \brief PWM map device. + * + * + * \author Daniele Basile + */ + +#ifndef HW_PWM_MAP_H +#define HW_PWM_MAP_H + +#warning TODO:This is an example implentation, you must implement it! + +typedef enum +{ + PWM_CH0 = 0, + PWM_CH1, + PWM_CH2, + PWM_CH3, + +/* + * add other PWM channel or + * change above. + */ + + PWM_CNT +} PwmDev; + +#endif /* HW_PWM_MAP_H */ diff --git a/boards/stm32VLDiscovery/hw/thermo_map.h b/boards/stm32VLDiscovery/hw/thermo_map.h new file mode 100644 index 00000000..7dbe27bc --- /dev/null +++ b/boards/stm32VLDiscovery/hw/thermo_map.h @@ -0,0 +1,56 @@ +/** + * \file + * + * + * \brief Thermo regulation control map definitions. + * + * \author Francesco Sacchi + */ + +#ifndef THERMO_MAP_H +#define THERMO_MAP_H + +#include +#include + + +#warning TODO:This is an example implentation, you must implement it! + +typedef enum ThermoDev +{ + THERMO_TEST, + + /* Put here your thermo device */ + + THERMO_CNT +} ThermoDev; + +#endif /* THERMO_MAP_H */ diff --git a/boards/stm32VLDiscovery/templates/.spec b/boards/stm32VLDiscovery/templates/.spec new file mode 100644 index 00000000..07fb8eed --- /dev/null +++ b/boards/stm32VLDiscovery/templates/.spec @@ -0,0 +1,3 @@ +name = "Templates" +ord = 0 +description = "Use these as a starting point for your BeRTOS project." diff --git a/boards/stm32VLDiscovery/templates/empty/.spec b/boards/stm32VLDiscovery/templates/empty/.spec new file mode 100644 index 00000000..f3edfbc2 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/.spec @@ -0,0 +1,8 @@ +name = 'empty preset' +advanced = True +description=""" +

+This is a minimalist project, it just initializes the hardware of the +supported board and proposes an empty main. +<\p> +""" diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_adc.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_adc.h new file mode 100644 index 00000000..df2587be --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_adc.h @@ -0,0 +1,112 @@ +/** + * \file + * + * + * \brief Configuration file for the ADC module. + * + * \author Daniele Basile + */ + +#ifndef CFG_ADC_H +#define CFG_ADC_H + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define ADC_LOG_LEVEL LOG_LVL_INFO + +/** + * Module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define ADC_LOG_FORMAT LOG_FMT_VERBOSE + +/** + * Clock Frequency for ADC conversion. + * This frequency will be rounded down to an integer + * submultiple of CPU_FREQ. + * + * $WIZ$ type = "int" + * $WIZ$ supports = "at91" + * $WIZ$ max = 5000000 + */ +#define CONFIG_ADC_CLOCK 4800000UL + +/** + * Minimum time for starting up a conversion [us]. + * + * $WIZ$ type = "int" + * $WIZ$ min = 20 + * $WIZ$ supports = "at91" + */ +#define CONFIG_ADC_STARTUP_TIME 20 + +/** + * Minimum time for sample and hold [ns]. + * + * $WIZ$ type = "int" + * $WIZ$ min = 600 + * $WIZ$ supports = "at91" + */ +#define CONFIG_ADC_SHTIME 834 + +/** + * ADC Voltage Reference. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "avr_adc_refs" + * $WIZ$ supports = "avr" + */ +#define CONFIG_ADC_AVR_REF ADC_AVR_AVCC + +/** + * ADC clock divisor from main crystal. + * + * $WIZ$ type = "int" + * $WIZ$ min = 2 + * $WIZ$ max = 128 + * $WIZ$ supports = "avr" + */ +#define CONFIG_ADC_AVR_DIVISOR 2 + +/** + * Enable ADC strobe for debugging ADC ISR. + * + * $WIZ$ type = "boolean" + */ +#define CONFIG_ADC_STROBE 0 + +#endif /* CFG_ADC_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_afsk.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_afsk.h new file mode 100644 index 00000000..cce47c1f --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_afsk.h @@ -0,0 +1,113 @@ +/** + * \file + * + * + * \brief Configuration file for AFSK1200 modem. + * + * \author Francesco Sacchi + */ + +#ifndef CFG_AFSK_H +#define CFG_AFSK_H + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define AFSK_LOG_LEVEL LOG_LVL_WARN + +/** + * Module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define AFSK_LOG_FORMAT LOG_FMT_TERSE + + +/** + * AFSK discriminator filter type. + * + * $WIZ$ type = "enum"; value_list = "afsk_filter_list" + */ +#define CONFIG_AFSK_FILTER AFSK_CHEBYSHEV + + +/** + * AFSK receiver buffer length. + * + * $WIZ$ type = "int" + * $WIZ$ min = 2 + */ +#define CONFIG_AFSK_RX_BUFLEN 32 + +/** + * AFSK transimtter buffer length. + * + * $WIZ$ type = "int" + * $WIZ$ min = 2 + */ +#define CONFIG_AFSK_TX_BUFLEN 32 + +/** + * AFSK DAC sample rate for modem outout. + * $WIZ$ type = "int" + * $WIZ$ min = 2400 + */ +#define CONFIG_AFSK_DAC_SAMPLERATE 9600 + +/** + * AFSK RX timeout in ms, set to -1 to disable. + * $WIZ$ type = "int" + * $WIZ$ min = -1 + */ +#define CONFIG_AFSK_RXTIMEOUT 0 + + +/** + * AFSK Preamble length in [ms], before starting transmissions. + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_AFSK_PREAMBLE_LEN 300UL + + + +/** + * AFSK Trailer length in [ms], before stopping transmissions. + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_AFSK_TRAILER_LEN 50UL + +#endif /* CFG_AFSK_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_ax25.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_ax25.h new file mode 100644 index 00000000..f561d212 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_ax25.h @@ -0,0 +1,75 @@ +/** + * \file + * + * + * \brief Configuration file for the AX25 protocol module. + * + * \author Francesco Sacchi + */ + +#ifndef CFG_AX25_H +#define CFG_AX25_H + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define AX25_LOG_LEVEL LOG_LVL_WARN + +/** + * Module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define AX25_LOG_FORMAT LOG_FMT_TERSE + +/** + * AX25 frame buffer lenght. + * + * $WIZ$ type = "int" + * $WIZ$ min = 18 + */ +#define CONFIG_AX25_FRAME_BUF_LEN 330 + + +/** + * Enable repeaters listing in AX25 frames. + * If enabled use 56 addtional bytes of RAM + * for each message received. + * + * $WIZ$ type = "boolean" + */ +#define CONFIG_AX25_RPT_LST 1 + +#endif /* CFG_AX25_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_battfs.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_battfs.h new file mode 100644 index 00000000..249dda76 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_battfs.h @@ -0,0 +1,67 @@ +/** + * \file + * + * + * \brief Configuration file for BattFS module. + * + * \author Daniele Basile + */ + +#ifndef CFG_BATTFS_H +#define CFG_BATTFS_H + + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define BATTFS_LOG_LEVEL LOG_LVL_INFO + +/** + * module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define BATTFS_LOG_FORMAT LOG_FMT_VERBOSE + +/** + * Set to 1 to enable free page shuffling. + * This increase memories life but makes debugging + * more difficult due to its unrepeteable state. + * $WIZ$ type = "boolean" + */ +#define CONFIG_BATTFS_SHUFFLE_FREE_PAGES 0 + + +#endif /* BATTFS */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_context_switch.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_context_switch.h new file mode 100644 index 00000000..fe0b4f87 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_context_switch.h @@ -0,0 +1,71 @@ +/** + * \file + * + * + * \brief Configuration file for the context switch benchmark. + * + * \author Daniele Basile + */ + +#ifndef CFG_CONTEXT_SWITCH_H +#define CFG_CONTEXT_SWITCH_H + +/** + * Use hp timer for the bechmark. + * + * $WIZ$ type = "boolean" + * $WIZ$ module= "boolean" + * $WIZ$ conditional_deps = "ser" + */ +#define CONFIG_USE_HP_TIMER 1 + + +/** + * Use board led for benchmark. + * + * $WIZ$ type = "boolean" + */ +#define CONFIG_USE_LED 1 + + +/** + * Debug console port. + * $WIZ$ type = "int"; min = 0 + */ +#define CONFIG_CTX_DEBUG_PORT 0 + +/** + * Baudrate for the debug console. + * $WIZ$ type = "int"; min = 300 + */ +#define CONFIG_CTX_DEBUG_BAUDRATE 115200UL + +#endif /* CFG_CONTEXT_SWITCH_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_dataflash.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_dataflash.h new file mode 100644 index 00000000..4e7dfbd9 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_dataflash.h @@ -0,0 +1,55 @@ +/** + * \file + * + * + * \brief Configuration file for data flash memory module. + * + * \author Daniele Basile + */ + +#ifndef CFG_DATAFLASH_H +#define CFG_DATAFLASH_H + +/** + * Module logging level. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define DATAFLASH_LOG_LEVEL LOG_LVL_INFO + +/** + * Module logging format. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define DATAFLASH_LOG_FORMAT LOG_FMT_TERSE + +#endif /* CFG_DATAFLASH_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_dc_motor.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_dc_motor.h new file mode 100644 index 00000000..fd9bac73 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_dc_motor.h @@ -0,0 +1,111 @@ +/** + * \file + * + * + * \brief Configuration file for DC motor module. + * + * + * \author Daniele Basile + */ + +#ifndef CFG_DC_MOTOR_H +#define CFG_DC_MOTOR_H + +/** + * Number of the DC motors to manage. + * + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_NUM_DC_MOTOR 4 + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define DC_MOTOR_LOG_LEVEL LOG_LVL_INFO + +/** + * Module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define DC_MOTOR_LOG_FORMAT LOG_FMT_VERBOSE + + +/** + * Min value of DC motor speed. + * \note Generally this value is the min value of the ADC conversion, + * if you use it. + * + * $WIZ$ type = "int" + */ +#define CONFIG_DC_MOTOR_MIN_SPEED 0 + + +/** + * Max value of DC motor speed. + * \note Generally this value is the max value of the ADC conversion, + * if you use it. + * + * $WIZ$ type = "int" + * $WIZ$ max = 65535 + */ +#define CONFIG_DC_MOTOR_MAX_SPEED 65535 + + +/** + * Sampling period in millisecond. + * $WIZ$ type = "int" + */ +#define CONFIG_DC_MOTOR_SAMPLE_PERIOD 40 + +/** + * Amount of millisecond before to read sample. + * $WIZ$ type = "int" + */ +#define CONFIG_DC_MOTOR_SAMPLE_DELAY 2 + +/** + * This control set which mode the driver use to lock share + * resources when we use the preempitive kernel. + * If we set to 1 we use the semaphore module otherwise the + * driver disable the switch context every time we need to access + * to shared sources. + * + * $WIZ$ type = "int" + */ +#define CONFIG_DC_MOTOR_USE_SEM 1 + +#endif /* CFG_DC_MOTOR_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_debug.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_debug.h new file mode 100644 index 00000000..3bb3b181 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_debug.h @@ -0,0 +1,54 @@ +/** + * \file + * + * + * \brief Configuration file for Debug module. + * + * + * \author Daniele Basile + */ + +#ifndef CFG_DEBUG_H +#define CFG_DEBUG_H + +/** + * Debug console port. + * $WIZ$ type = "int"; min = 0 + */ +#define CONFIG_KDEBUG_PORT 1 + +/** + * Baudrate for the debug console. + * $WIZ$ type = "int"; min = 300 + */ +#define CONFIG_KDEBUG_BAUDRATE 115200UL + +#endif /* CFG_DEBUG_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_emb_flash.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_emb_flash.h new file mode 100644 index 00000000..82d96e52 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_emb_flash.h @@ -0,0 +1,73 @@ +/** + * \file + * + * + * \author Daniele Basile + * + * \brief Configuration file for embedded flash module. + */ + +#ifndef CFG_EMB_FLASH_H +#define CFG_EMB_FLASH_H + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define CONFIG_FLASH_EMB_LOG_LEVEL LOG_LVL_INFO + +/** + * module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define CONFIG_FLASH_EMB_LOG_FORMAT LOG_FMT_TERSE + + +/** + * Write emb flash timeout. + * For how many milliseconds the cpu wait + * to complete write operation. + * + * $WIZ$ type = "int" + */ +#define CONFIG_FLASH_WR_TIMEOUT 100 + +/** + * Check this to disable embedded flash deprecated API support. + * + * $WIZ$ type = "boolean" + */ +#define CONFIG_FLASH_DISABLE_OLD_API 0 + +#endif /* CFG_FLASH_AT91_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_fat.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_fat.h new file mode 100644 index 00000000..fcd717af --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_fat.h @@ -0,0 +1,156 @@ +/** + * \file + * + * + * \brief Configuration file for Fat module. + * + * + * \author Luca Ottaviano + * \author Francesco Sacchi + */ + +#ifndef CFG_FAT_H +#define CFG_FAT_H + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define FAT_LOG_LEVEL LOG_LVL_ERR + +/** + * Module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define FAT_LOG_FORMAT LOG_FMT_VERBOSE + + +/** + * Use word alignment to access FAT structure. + * $WIZ$ type = "boolean" + */ +#define CONFIG_FAT_WORD_ACCESS 0 +#define _WORD_ACCESS CONFIG_FAT_WORD_ACCESS + +/** + * Enable read functions only. + * $WIZ$ type = "boolean" + */ +#define CONFIG_FAT_FS_READONLY 0 +#define _FS_READONLY CONFIG_FAT_FS_READONLY + +/** + * Minimization level to remove some functions. + * $WIZ$ type = "int"; min = 0; max = 3 + */ +#define CONFIG_FAT_FS_MINIMIZE 0 +#define _FS_MINIMIZE CONFIG_FAT_FS_MINIMIZE + +/** + * If enabled, this reduces memory consumption 512 bytes each file object by using a shared buffer. + * $WIZ$ type = "boolean" + */ +#define CONFIG_FAT_FS_TINY 1 +#define _FS_TINY CONFIG_FAT_FS_TINY + +/** + * To enable string functions, set _USE_STRFUNC to 1 or 2. + * $WIZ$ type = "int" + * $WIZ$ supports = "False" + */ +#define CONFIG_FAT_USE_STRFUNC 0 +#define _USE_STRFUNC CONFIG_FAT_USE_STRFUNC + +/** + * Enable f_mkfs function. Requires CONFIG_FAT_FS_READONLY = 0. + * $WIZ$ type = "boolean" + */ +#define CONFIG_FAT_USE_MKFS 0 +#define _USE_MKFS (CONFIG_FAT_USE_MKFS && !CONFIG_FAT_FS_READONLY) + +/** + * Enable f_forward function. Requires CONFIG_FAT_FS_TINY. + * $WIZ$ type = "boolean" + */ +#define CONFIG_FAT_USE_FORWARD 0 +#define _USE_FORWARD (CONFIG_FAT_USE_FORWARD && CONFIG_FAT_FS_TINY) + +/** + * Number of volumes (logical drives) to be used. + * $WIZ$ type = "int"; min = 1; max = 255 + */ +#define CONFIG_FAT_DRIVES 1 +#define _DRIVES CONFIG_FAT_DRIVES + +/** + * Maximum sector size to be handled. (512/1024/2048/4096). + * 512 for memory card and hard disk, 1024 for floppy disk, 2048 for MO disk + * $WIZ$ type = "int"; min = 512; max = 4096 + */ +#define CONFIG_FAT_MAX_SS 512 +#define _MAX_SS CONFIG_FAT_MAX_SS + +/** + * When _MULTI_PARTITION is set to 0, each volume is bound to the same physical + * drive number and can mount only first primaly partition. When it is set to 1, + * each volume is tied to the partitions listed in Drives[]. + * $WIZ$ type = "boolean" + * $WIZ$ supports = "False" + */ +#define CONFIG_FAT_MULTI_PARTITION 0 +#define _MULTI_PARTITION CONFIG_FAT_MULTI_PARTITION + +/** + * Specifies the OEM code page to be used on the target system. + * $WIZ$ type = "int" + */ +#define CONFIG_FAT_CODE_PAGE 850 +#define _CODE_PAGE CONFIG_FAT_CODE_PAGE + +/** + * Support for long filenames. Enable only if you have a valid Microsoft license. + * $WIZ$ type = "boolean" + */ +#define CONFIG_FAT_USE_LFN 0 +#define _USE_LFN CONFIG_FAT_USE_LFN + +/** + * Maximum Long File Name length to handle. + * $WIZ$ type = "int"; min = 8; max = 255 + */ +#define CONFIG_FAT_MAX_LFN 255 +#define _MAX_LFN CONFIG_FAT_MAX_LFN + +#endif /* CFG_FAT_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_flash25.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_flash25.h new file mode 100644 index 00000000..4b478b21 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_flash25.h @@ -0,0 +1,51 @@ +/** + * \file + * + * + * \brief Configuration file for flash25 module. + * + * + * \author Daniele Basile + */ + +#ifndef CFG_FLASH25_H +#define CFG_FLASH25_H + +/** + * Eeprom memory type. + * + *$WIZ$ type = "enum" + *$WIZ$ value_list = "flash25_list" + */ +#define CONFIG_FLASH25 FLASH25_AT25F2048 + +#endif /* CFG_FALSH25_H */ + diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_formatwr.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_formatwr.h new file mode 100644 index 00000000..bac8aca7 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_formatwr.h @@ -0,0 +1,65 @@ +/** + * \file + * + * + * \brief Configuration file for formatted write module. + * + * \author Daniele Basile + */ + +#ifndef CFG_FORMATWR_H +#define CFG_FORMATWR_H + +/** + * printf()-style formatter configuration. + * $WIZ$ type = "enum"; value_list = "printf_list" + * + * \sa PRINTF_DISABLED + * \sa PRINTF_NOMODIFIERS + * \sa PRINTF_REDUCED + * \sa PRINTF_NOFLOAT + * \sa PRINTF_FULL + */ +#define CONFIG_PRINTF PRINTF_FULL + +/** + * Size of buffer to format "%" sequences in printf. + * + * Warning: no check on buffer size is done when formatting, be careful especially + * with big numbers and %f formatting. + * + * $WIZ$ type = "int" + * $WIZ$ min = 4 + */ +#define CONFIG_FRMWRI_BUFSIZE 134 + +#endif /* CFG_FORMATWR_H */ + diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_gfx.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_gfx.h new file mode 100644 index 00000000..59dde04c --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_gfx.h @@ -0,0 +1,67 @@ +/** + * \file + * + * + * \brief Configuration file for GFX module. + * + * \author Daniele Basile + */ + +#ifndef CFG_GFX_H +#define CFG_GFX_H + +/** + * Enable line clipping algorithm. + * $WIZ$ type = "boolean" + */ +#define CONFIG_GFX_CLIPPING 1 + +/** + * Enable text rendering in bitmaps. + * $WIZ$ type = "boolean" + */ +#define CONFIG_GFX_TEXT 1 + +/** + * Enable virtual coordinate system. + * $WIZ$ type = "boolean" + */ +#define CONFIG_GFX_VCOORDS 1 + +/** + * Select bitmap pixel format. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "bitmap_format" + */ +#define CONFIG_BITMAP_FMT BITMAP_FMT_PLANAR_V_LSB + +#endif /* CFG_GFX_H */ + diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_hashtable.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_hashtable.h new file mode 100644 index 00000000..e4645f33 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_hashtable.h @@ -0,0 +1,51 @@ +/** + * \file + * + * + * \brief Configuration file for hashtable module. + * + * \author Daniele Basile + */ + +#ifndef CFG_HASHTABLE_H +#define CFG_HASHTABLE_H + +/** + * Enable/disable support to declare special hash tables which maintain a copy of the key internally instead of relying on the hook to extract it from the data. + * + * $WIZ$ type = "boolean" + */ +#define CONFIG_HT_OPTIONAL_INTERNAL_KEY 1 + +#endif /* CFG_HASHTABLE_H */ + + + diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_heap.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_heap.h new file mode 100644 index 00000000..e1a37b76 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_heap.h @@ -0,0 +1,50 @@ +/** + * \file + * + * + * \brief Configuration file for heap module. + * + * + * \author Daniele Basile + */ + +#ifndef CFG_HEAP_H +#define CFG_HEAP_H + +/** + * Enable malloc/free like API. + * $WIZ$ type = "boolean" + */ +#define CONFIG_HEAP_MALLOC 1 + +#endif /* CFG_HEAP_H */ + + diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_i2c.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_i2c.h new file mode 100644 index 00000000..ea599a81 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_i2c.h @@ -0,0 +1,83 @@ +/** + * \file + * + * + * \brief Configuration file for I2C module. + * + * \author Daniele Basile + */ + +#ifndef CFG_I2C_H +#define CFG_I2C_H + +/** +*Comunication frequency. +* +* $WIZ$ type = "int" +*/ +#define CONFIG_I2C_FREQ 100000UL + +/** + * I2C start timeout. + * For how many milliseconds the i2c_start + * should try to get an ACK before + * returning error. + * + * $WIZ$ type = "int" + */ +#define CONFIG_I2C_START_TIMEOUT 100 + +/** + * Check this to disable I2c deprecated API support. + * + * $WIZ$ type = "boolean" + */ +#define CONFIG_I2C_DISABLE_OLD_API 0 + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define I2C_LOG_LEVEL LOG_LVL_INFO + +/** + * module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define I2C_LOG_FORMAT LOG_FMT_TERSE + +#endif /* CFG_I2C_H */ + + diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_i2s.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_i2s.h new file mode 100644 index 00000000..6657157e --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_i2s.h @@ -0,0 +1,74 @@ +/** + * \file + * + * + * \brief Configuration file for I2S module. + * + * + * \author Luca Ottaviano + */ + +#ifndef CFG_I2S_H +#define CFG_I2S_H + +/** + * Length of each play buffer. + * + * $WIZ$ type = "int" + */ +#define CONFIG_PLAY_BUF_LEN 8192 + +/** + * Sampling frequency of the audio file. + * + * $WIZ$ type = "int" + * $WIZ$ min = 32000 + * $WIZ$ max = 192000 + */ +#define CONFIG_SAMPLE_FREQ 44100UL + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define I2S_LOG_LEVEL LOG_LVL_INFO + +/** + * Module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define I2S_LOG_FORMAT LOG_FMT_TERSE + +#endif /* CFG_I2S_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_ini_reader.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_ini_reader.h new file mode 100644 index 00000000..d0be4389 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_ini_reader.h @@ -0,0 +1,48 @@ +/** + * \file + * + * + * \brief Configuration file for ini reader module. + * + * + * \author Luca Ottaviano + */ + +#ifndef CFG_INI_READER_H +#define CFG_INI_READER_H + +/** + * Maximum ini file line length (chars). + * $WIZ$ type = "int"; min = 1 + */ +#define CONFIG_INI_MAX_LINE_LEN 64 + +#endif /* CFG_INI_READER_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_kbd.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_kbd.h new file mode 100644 index 00000000..92aa272d --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_kbd.h @@ -0,0 +1,58 @@ +/** + * \file + * + * + * \brief Configuration file for keyboard module. + * + * + * \author Daniele Basile + */ + +#ifndef CFG_KBD_H +#define CFG_KBD_H + +/// Keyboard polling method. $WIZ$ supports = "False" +#define CONFIG_KBD_POLL KBD_POLL_SOFTINT + +/// Enable keyboard event delivery to observers. $WIZ$ type = "boolean" +#define CONFIG_KBD_OBSERVER 0 + +/// Enable key beeps. $WIZ$ type = "boolean" +#define CONFIG_KBD_BEEP 0 + +/// Enable long pression handler for keys. $WIZ$ type = "boolean" +#define CONFIG_KBD_LONGPRESS 0 + +/// Enable calling poor man's scheduler to be called inside kbd_peek. $WIZ$ type = "boolean" +#define CONFIG_KBD_SCHED 0 + +#endif /* CFG_KBD_H */ + diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_keytag.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_keytag.h new file mode 100644 index 00000000..8bedadf6 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_keytag.h @@ -0,0 +1,61 @@ +/** + * \file + * + * + * \brief Configuration file for keytag module. + * + * \author Daniele Basile + */ + +#ifndef CFG_KEYTAG_H +#define CFG_KEYTAG_H + +/** + * Module logging level. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define CONFIG_KEYTAG_LOG_LEVEL LOG_LVL_ERR +/** + * Module logging format. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define CONFIG_KEYTAG_LOG_FORMAT LOG_FMT_TERSE + +/** + * Max buffer lenght + * $WIZ$ type = "int" + */ +#define CONFIG_TAG_MAX_LEN 14U + +#endif /* CFG_KEYTAG_H */ + diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_kfile.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_kfile.h new file mode 100644 index 00000000..0ebed7b1 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_kfile.h @@ -0,0 +1,61 @@ +/** + * \file + * + * + * \brief Configuration file for KFile interface module. + * + * \author Daniele Basile + */ + +#ifndef CFG_KFILE_H +#define CFG_KFILE_H + +/** + * Module logging level. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define KFILE_LOG_LEVEL LOG_LVL_INFO + +/** + * Module logging format. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define KFILE_LOG_FORMAT LOG_FMT_TERSE + +/** + * Enable the gets function with echo. + * $WIZ$ type = "boolean" + */ +#define CONFIG_KFILE_GETS 0 + +#endif /* CFG_KFILE_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_lcd_32122a.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_lcd_32122a.h new file mode 100644 index 00000000..5a9b3ca7 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_lcd_32122a.h @@ -0,0 +1,63 @@ +/** + * \file + * + * + * \brief Displaytech 32122A LCD driver configuration file. + * + * \author Bernie Innocenti + * \author Stefano Fedrigo + * + */ +#ifndef CFG_LCD_32122A_H +#define CFG_LCD_32122A_H + +/** + * Enable soft interrupt to refresh the LCD. + * $WIZ$ type = "boolean" + */ +#define CONFIG_LCD_SOFTINT_REFRESH 0 + +/** + * Enable wait macro when display is busy. + * $WIZ$ type = "boolean" + */ +#define CONFIG_LCD_WAIT 0 + +/** + * Display refresh time 32122a. + * $WIZ$ type = "int" + * $WIZ$ min = 0 + */ +#define CONFIG_LCD_REFRESH 100 + +#endif /* CFG_LCD_32122A_H */ + diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_lcd_hd44.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_lcd_hd44.h new file mode 100644 index 00000000..7bea4376 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_lcd_hd44.h @@ -0,0 +1,69 @@ +/** + * \file + * + * + * \brief Configuration file for lcd display module. + * + * \author Daniele Basile + */ + +#ifndef CFG_LCD_H +#define CFG_LCD_H + +/** + * Use 4 bit addressing mode. + * $WIZ$ type = "boolean" + */ +#define CONFIG_LCD_4BIT 0 + +/** + * Use a table to speed up LCD memory addressing. + * This will use about 100 bytes of RAM. + * $WIZ$ type = "boolean" + */ +#define CONFIG_LCD_ADDRESS_FAST 1 + +/** + * Number of columns in LCD display. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "lcd_hd44_cols" + */ +#define CONFIG_LCD_COLS LCD_HD44_COLS_16 + +/** + * Number of rows in LCD display. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "lcd_hd44_rows" + */ +#define CONFIG_LCD_ROWS LCD_HD44_ROWS_2 + +#endif /* CFG_LCD_H */ + diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_lm75.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_lm75.h new file mode 100644 index 00000000..91b347ad --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_lm75.h @@ -0,0 +1,57 @@ +/** + * \file + * + * + * \brief Configuration file for the LM75 sensor temperature. + * + * \author Daniele Basile + */ + +#ifndef CFG_LM75_H +#define CFG_LM75_H + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define LM75_LOG_LEVEL LOG_LVL_WARN + +/** + * Module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define LM75_LOG_FORMAT LOG_FMT_TERSE + +#endif /* CFG_AX25_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_md2.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_md2.h new file mode 100644 index 00000000..e937b900 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_md2.h @@ -0,0 +1,53 @@ +/** + * \file + * + * + * \brief Configuration file for MD2 module. + * + * + * \author Daniele Basile + */ + +#ifndef CFG_MD2_H +#define CFG_MD2_H + +/** + * Size of block for MD2 algorithm. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + */ +#define CONFIG_MD2_BLOCK_LEN 16 + +/// Use standard permutation in MD2 algorithm. $WIZ$ type = "boolean" +#define CONFIG_MD2_STD_PERM 0 + +#endif /* CFG_MD2_H */ + diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_monitor.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_monitor.h new file mode 100644 index 00000000..78f222bf --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_monitor.h @@ -0,0 +1,47 @@ +/** + * \file + * + * + * \brief Kernel monitor configuration parameters + * + * \author Bernie Innocenti + */ + +#ifndef CFG_MONITOR_H +#define CFG_MONITOR_H + +/** + * Process monitor. + * $WIZ$ type = "autoenabled" + */ +#define CONFIG_KERN_MONITOR 0 + +#endif /* CFG_MONITOR_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_nmea.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_nmea.h new file mode 100644 index 00000000..9249a9af --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_nmea.h @@ -0,0 +1,85 @@ +/** + * \file + * + * + * \brief Configuration file for NMEA module. + * + * \author Daniele Basile + */ + +#ifndef CFG_NMEA_H +#define CFG_NMEA_H + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define NMEA_LOG_LEVEL LOG_LVL_ERR + +/** + * Module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define NMEA_LOG_FORMAT LOG_FMT_TERSE + + +/** + * Maximum number of sentence parsers supported. + * + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_NMEAP_MAX_SENTENCES 8 + +/** + * Max length of a complete sentence. The standard says 82 bytes, but its probably + * better to go at least 128 since some units don't adhere to the 82 bytes + * especially for proprietary sentences. + * + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_NMEAP_MAX_SENTENCE_LENGTH 255 + +/** + * Max tokens in one sentence. 24 is enough for any standard sentence. + * + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_NMEAP_MAX_TOKENS 24 + +#endif /* CFG_NMEA_H */ + diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_parser.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_parser.h new file mode 100644 index 00000000..572b4a24 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_parser.h @@ -0,0 +1,46 @@ +/** + * \file + * + * + * \brief Configuration file for parser module. + * + * \author Daniele Basile + */ + +#ifndef CFG_PARSER_H +#define CFG_PARSER_H + + + +#endif /* CFG_PARSER_H */ + + + diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_phase.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_phase.h new file mode 100644 index 00000000..1ed51076 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_phase.h @@ -0,0 +1,55 @@ +/** + * \file + * + * + * \brief Configuration file for phase module. + * + * \author Daniele Basile + */ + +#ifndef CFG_PHASE_H +#define CFG_PHASE_H + +/** + * Max value of the duty cycle on triac. + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_TRIAC_MAX_DUTY 100 + +/** + * Max value of the triac power. + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_TRIAC_MAX_POWER 100 + +#endif /* CFG_PHASE_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_pocketbus.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_pocketbus.h new file mode 100644 index 00000000..aa0b090b --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_pocketbus.h @@ -0,0 +1,71 @@ +/** + * \file + * + * + * \brief Configuration file for pocketbus module. + * + * \author Daniele Basile + */ + +#ifndef CFG_POCKETBUS_H +#define CFG_POCKETBUS_H + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define POCKETBUS_LOG_LEVEL LOG_LVL_ERR + +/** + * Module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define POCKETBUS_LOG_FORMAT LOG_FMT_TERSE + + +/** + *Buffer len for pockebus protocol. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + */ +#define CONFIG_POCKETBUS_BUFLEN 128 + +/** + * Command replay timeout in milliseconds. + * $WIZ$ type = "int" + */ +#define CONFIG_POCKETBUS_CMD_REPLY_TIMEOUT 50 + +#endif /* CFG_POCKETBUS_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_proc.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_proc.h new file mode 100644 index 00000000..3c9439fb --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_proc.h @@ -0,0 +1,107 @@ +/** + * \file + * + * + * \brief Kernel configuration parameters + * + * \author Bernie Innocenti + */ + +#ifndef CFG_PROC_H +#define CFG_PROC_H + +/** + * Enable the multithreading kernel. + * + * $WIZ$ type = "autoenabled" + */ +#define CONFIG_KERN 0 + +/** + * Kernel interrupt supervisor. WARNING: Experimental, still incomplete! + * $WIZ$ type = "boolean" + * $WIZ$ supports = "False" + */ +#define CONFIG_KERN_IRQ 0 + +/** + * Preemptive process scheduling. + * + * $WIZ$ type = "boolean" + * $WIZ$ conditional_deps = "timer" + */ +#define CONFIG_KERN_PREEMPT 0 + +/** + * Time sharing quantum (a prime number prevents interference effects) [ms]. + * + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_KERN_QUANTUM 11 + +/** + * Priority-based scheduling policy. + * $WIZ$ type = "boolean" + */ +#define CONFIG_KERN_PRI 0 + +/** + * Dynamic memory allocation for processes. + * $WIZ$ type = "boolean" + * $WIZ$ conditional_deps = "heap" + */ +#define CONFIG_KERN_HEAP 0 + +/** + * Size of the dynamic memory pool used by processes. + * $WIZ$ type = "int" + * $WIZ$ min = 0 + */ +#define CONFIG_KERN_HEAP_SIZE 2048L + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define KERN_LOG_LEVEL LOG_LVL_ERR + +/** + * Module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define KERN_LOG_FORMAT LOG_FMT_VERBOSE + +#endif /* CFG_PROC_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_pwm.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_pwm.h new file mode 100644 index 00000000..595189e6 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_pwm.h @@ -0,0 +1,56 @@ +/** + * \file + * + * + * \brief Configuration file for PWM module. + * + * \author Daniele Basile + */ + +#ifndef CFG_PWM_H +#define CFG_PWM_H + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define PWM_LOG_LEVEL LOG_LVL_INFO + +/** + * Module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define PWM_LOG_FORMAT LOG_FMT_VERBOSE + +#endif /* CFG_PWM_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_ramp.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_ramp.h new file mode 100644 index 00000000..162d2db2 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_ramp.h @@ -0,0 +1,115 @@ + /** + * \file + * + * + * \brief Configuration file Ramp algorithm module. + * + * \author Daniele Basile + */ + +#ifndef CFG_RAMP_H +#define CFG_RAMP_H + +/** + * Define whether the ramp will use floating point calculation within ramp_evaluate(). + * Otherwise, a less precise fixed point version will be used, which is faster on + * platforms which do no support floating point operations. + * + * \note Floating point operations will be always done within ramp_compute() to + * precalculate values, so there has to be at least a floating point emulation support. + * + * $WIZ$ type = "boolean" + */ +#define RAMP_USE_FLOATING_POINT 0 + + +#if !RAMP_USE_FLOATING_POINT + + /** + * Number of least-significant bits which are stripped away during ramp evaluation. + * This setting allows to specify larger ramps at the price of less precision. + * + * The maximum ramp size allowed is 2^(24 + RAMP_CLOCK_SHIFT_PRECISION), in clocks. + * For instance, using RAMP_CLOCK_SHIFT_PRECISION 1, and a 8x prescaler, the maximum + * length of a ramp is about 6.7 secs. Raising RAMP_CLOCK_SHIFT_PRECISION to 2 + * brings the maximum length to 13.4 secs, at the price of less precision. + * + * ramp_compute() will check that the length is below the maximum allowed through + * a runtime assertion. + * + * \note This macro is used only for the fixed-point version of the ramp. + * $WIZ$ type = "int" + * $WIZ$ min = 0 + * $WIZ$ max = 32 + */ + #define RAMP_CLOCK_SHIFT_PRECISION 2 +#endif + + +/** +* Negative pulse width for ramp. +* $WIZ$ type = "int" +* $WIZ$ min = 1 +*/ +#define RAMP_PULSE_WIDTH 50 + +/** + * Default ramp time (microsecs). + * $WIZ$ type = "int" + * $WIZ$ min = 1000 + */ +#define RAMP_DEF_TIME 6000000UL +/** + * Default ramp maxfreq (Hz). + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define RAMP_DEF_MAXFREQ 5000 +/** + * Default ramp minfreq (Hz). + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define RAMP_DEF_MINFREQ 200 +/** + * Default ramp powerrun (deciampere). + * $WIZ$ type = "int" + * $WIZ$ min = 0 + */ +#define RAMP_DEF_POWERRUN 10 +/** + * Default ramp poweridle (Hz). + * $WIZ$ type = "int" + * $WIZ$ min = 0 + */ +#define RAMP_DEF_POWERIDLE 1 + +#endif /* CFG_RAMP_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_randpool.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_randpool.h new file mode 100644 index 00000000..3038363e --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_randpool.h @@ -0,0 +1,55 @@ +/** + * \file + * + * + * \brief Configuration file for randpool module. + * + * + * \author Daniele Basile + */ + +#ifndef CFG_RANDPOOL_H +#define CFG_RANDPOOL_H + + +/** + * Define a size, in byte, of entropy pool. + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_SIZE_ENTROPY_POOL 64 + +/// Enable timer in randpool algo. $WIZ$ type = "boolean" +#define CONFIG_RANDPOOL_TIMER 1 + +#endif /* CFG_RANDPOOL_H */ + + diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_sd.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_sd.h new file mode 100644 index 00000000..8c40f827 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_sd.h @@ -0,0 +1,75 @@ +/** + * \file + * + * + * \brief Configuration file Secure Digital module. + * + * + * \author Francesco Sacchi + */ + +#ifndef CFG_SD_H +#define CFG_SD_H + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define SD_LOG_LEVEL LOG_LVL_ERR + +/** + * Module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define SD_LOG_FORMAT LOG_FMT_VERBOSE + + +/** + * Enable autoassignment of SD driver to disk drive number 0 of FatFs module. + * $WIZ$ type = "boolean" + * $WIZ$ conditional_deps = "fat" + */ +#define CONFIG_SD_AUTOASSIGN_FAT 1 + +/** + * Enable backward compatibility for sd_init(). + * If enabled, sd_init() will allocate internally an Sd context, + * otherwise sd_init() will need the context to be passed explicitly. + * + * $WIZ$ type = "boolean" + */ +#define CONFIG_SD_OLD_INIT 1 + +#endif /* CFG_SD_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_sem.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_sem.h new file mode 100644 index 00000000..51811da4 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_sem.h @@ -0,0 +1,47 @@ +/** + * \file + * + * + * \brief Kernel semaphores configuration parameters. + * + * \author Bernie Innocenti + */ + +#ifndef CFG_SEM_H +#define CFG_SEM_H + +/** + * Re-entrant mutual exclusion primitives. + * $WIZ$ type = "autoenabled" + */ +#define CONFIG_KERN_SEMAPHORES 0 + +#endif /* CFG_SEM_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_ser.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_ser.h new file mode 100644 index 00000000..91a10e0b --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_ser.h @@ -0,0 +1,222 @@ +/** + * \file + * + * + * \brief Configuration file for serial module. + * + * \author Daniele Basile + */ + +#ifndef CFG_SER_H +#define CFG_SER_H + +/** + * Example of setting for serial port and + * spi port. + * Edit these define for your project. + */ + +/** + * Size of the outbound FIFO buffer for port 0 [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + */ +#define CONFIG_UART0_TXBUFSIZE 32 + +/** + * Size of the inbound FIFO buffer for port 0 [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + */ +#define CONFIG_UART0_RXBUFSIZE 32 + +/** + * Size of the outbound FIFO buffer for port 1 [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + * $WIZ$ supports = "lm3s or lpc2 or (at91 and not atmega8 and not atmega168 and not atmega32)" + */ +#define CONFIG_UART1_TXBUFSIZE 32 + +/** + * Size of the inbound FIFO buffer for port 1 [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + * $WIZ$ supports = "lm3s or lpc2 or (at91 and not atmega8 and not atmega168 and not atmega32)" + */ +#define CONFIG_UART1_RXBUFSIZE 32 + +/** + * Size of the outbound FIFO buffer for port 2 [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + * $WIZ$ supports = "lm3s or lpc2" + */ +#define CONFIG_UART2_TXBUFSIZE 32 + +/** + * Size of the inbound FIFO buffer for port 2 [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + * $WIZ$ supports = "lm3s or lpc2" + */ +#define CONFIG_UART2_RXBUFSIZE 32 + +/** + * Size of the outbound FIFO buffer for port 3 [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + * $WIZ$ supports = "lpc2" + */ +#define CONFIG_UART3_TXBUFSIZE 32 + +/** + * Size of the inbound FIFO buffer for port 3 [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + * $WIZ$ supports = "lpc2" + */ +#define CONFIG_UART3_RXBUFSIZE 32 + + +/** + * Size of the outbound FIFO buffer for SPI port [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + * $WIZ$ supports = "avr" + */ +#define CONFIG_SPI_TXBUFSIZE 32 + +/** + * Size of the inbound FIFO buffer for SPI port [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + * $WIZ$ supports = "avr" + */ +#define CONFIG_SPI_RXBUFSIZE 32 + +/** + * Size of the outbound FIFO buffer for SPI port 0 [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + * $WIZ$ supports = "at91" + */ +#define CONFIG_SPI0_TXBUFSIZE 32 + +/** + * Size of the inbound FIFO buffer for SPI port 0 [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + * $WIZ$ supports = "at91" + */ +#define CONFIG_SPI0_RXBUFSIZE 32 + +/** + * Size of the outbound FIFO buffer for SPI port 1 [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + * $WIZ$ supports = "at91" + */ +#define CONFIG_SPI1_TXBUFSIZE 32 + +/** + * Size of the inbound FIFO buffer for SPI port 1 [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + * $WIZ$ supports = "at91" + */ +#define CONFIG_SPI1_RXBUFSIZE 32 + +/** + * SPI data order. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "ser_order_bit" + * $WIZ$ supports = "avr" + */ +#define CONFIG_SPI_DATA_ORDER SER_MSB_FIRST + +/** + * SPI clock division factor. + * $WIZ$ type = "int" + * $WIZ$ supports = "avr" + */ +#define CONFIG_SPI_CLOCK_DIV 16 + +/** + * SPI clock polarity: normal low or normal high. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "ser_spi_pol" + * $WIZ$ supports = "avr" + */ +#define CONFIG_SPI_CLOCK_POL SPI_NORMAL_LOW + +/** + * SPI clock phase you can choose sample on first edge or + * sample on second clock edge. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "ser_spi_phase" + * $WIZ$ supports = "avr" + */ +#define CONFIG_SPI_CLOCK_PHASE SPI_SAMPLE_ON_FIRST_EDGE + +/** + * Default transmit timeout (ms). Set to -1 to disable timeout support. + * $WIZ$ type = "int" + * $WIZ$ min = -1 + */ +#define CONFIG_SER_TXTIMEOUT -1 + +/** + * Default receive timeout (ms). Set to -1 to disable timeout support. + * $WIZ$ type = "int" + * $WIZ$ min = -1 + */ +#define CONFIG_SER_RXTIMEOUT -1 + +/** + * Use RTS/CTS handshake. + * $WIZ$ type = "boolean" + * $WIZ$ supports = "False" + */ +#define CONFIG_SER_HWHANDSHAKE 0 + +/** + * Default baudrate for all serial ports (set to 0 to disable). + * $WIZ$ type = "int" + * $WIZ$ min = 0 + */ +#define CONFIG_SER_DEFBAUDRATE 0UL + +/// Enable strobe pin for debugging serial interrupt. $WIZ$ type = "boolean" +#define CONFIG_SER_STROBE 0 + +#endif /* CFG_SER_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_signal.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_signal.h new file mode 100644 index 00000000..e48d86a6 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_signal.h @@ -0,0 +1,47 @@ +/** + * \file + * + * + * \brief Kernel signals configuration parameters + * + * \author Bernie Innocenti + */ + +#ifndef CFG_SIGNAL_H +#define CFG_SIGNAL_H + +/** + * Inter-process signals. + * $WIZ$ type = "autoenabled" + */ +#define CONFIG_KERN_SIGNALS 0 + +#endif /* CFG_SIGNAL_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_spi_bitbang.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_spi_bitbang.h new file mode 100644 index 00000000..1a3a8a92 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_spi_bitbang.h @@ -0,0 +1,51 @@ +/** + * \file + * + * + * \brief Configuration file for SPI bitbang module. + * + * + * \author Daniele Basile + */ + +#ifndef CFG_SPI_BITBANG_H +#define CFG_SPI_BITBANG_H + +/** + * Set data order for emulated SPI. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "ordet_bit_list" + */ +#define CONFIG_SPI_DATAORDER SPI_LSB_FIRST + +#endif /* CFG_SPI_BITBANG_H */ + diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_stepper.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_stepper.h new file mode 100644 index 00000000..2925fb66 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_stepper.h @@ -0,0 +1,69 @@ +/** + * \file + * + * + * \brief Configuration file for stepper motor module. + * + * \author Daniele Basile + */ + +#ifndef CFG_STEPPER_H +#define CFG_STEPPER_H + +/** + * Module logging level. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define STEPPER_LOG_LEVEL LOG_LVL_INFO + +/** + * Module logging format. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define STEPPER_LOG_FORMAT LOG_FMT_TERSE + +/** + * Max number of the stepper motor. + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_NUM_STEPPER_MOTORS 6 + +/** + * Max number of the timer usable on target to drive stepper motor. + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_TC_STEPPER_MAX_NUM 6 + +#endif /* CFG_STEPPER_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_tas5706a.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_tas5706a.h new file mode 100644 index 00000000..32b3598f --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_tas5706a.h @@ -0,0 +1,50 @@ +/** + * \file + * + * + * \brief Configuration file for the TAS5706A module. + * + * \author Luca Ottaviano + */ + +#ifndef CFG_TAS5706A_H +#define CFG_TAS5706A_H + +/** + * Maximum output volume for TAS chip [dB]. + * + * $WIZ$ type = "int" + * $WIZ$ min = -100 + * $WIZ$ max = 24 + */ +#define CONFIG_TAS_MAX_VOL -39 + +#endif /* CFG_TAS5706A_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_thermo.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_thermo.h new file mode 100644 index 00000000..2734f899 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_thermo.h @@ -0,0 +1,71 @@ +/** + * \file + * + * + * \brief Configuration file for thermo module. + * + * \author Daniele Basile + */ + +#ifndef CFG_THERMO_H +#define CFG_THERMO_H + +/** + * Module logging level. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define CONFIG_THERMO_LOG_LEVEL LOG_LVL_ERR +/** + * Module logging format. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define CONFIG_THERMO_LOG_FORMAT LOG_FMT_TERSE + + +/** + * Interval at which thermo control is performed [ms]. + * + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_THERMO_INTERVAL_MS 100 + +/** + * Number of different samples we interpolate over to get the hifi temperature. + * + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_THERMO_HIFI_NUM_SAMPLES 10 + +#endif /* CFG_THERMO_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_timer.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_timer.h new file mode 100644 index 00000000..b6d43b38 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_timer.h @@ -0,0 +1,67 @@ +/** + * \file + * + * + * \brief Configuration file for timer module. + * + * + * \author Daniele Basile + */ + +#ifndef CFG_TIMER_H +#define CFG_TIMER_H + +/** + * Hardware timer selection for drv/timer.c. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "timer_select" + */ +#define CONFIG_TIMER TIMER_DEFAULT + +/** + * Debug timer interrupt using a strobe pin. + * $WIZ$ type = "boolean" + */ +#define CONFIG_TIMER_STROBE 0 + +/** + * Enable asynchronous timers. + * $WIZ$ type = "boolean" + */ +#define CONFIG_TIMER_EVENTS 1 + +/** + * Support hi-res timer_usleep(). + * $WIZ$ type = "boolean" + */ +#define CONFIG_TIMER_UDELAY 1 + +#endif /* CFG_TIMER_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_usb.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_usb.h new file mode 100644 index 00000000..e5a282b1 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_usb.h @@ -0,0 +1,64 @@ +/** + * \file + * + * + * \author Andrea Righi + * + * \brief Configuration file for the USB driver module + */ + +#ifndef CFG_USB_H +#define CFG_USB_H + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define USB_LOG_LEVEL LOG_LVL_INFO + +/** + * module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define USB_LOG_FORMAT LOG_FMT_TERSE + +/** + * Size of the USB buffer used for endpoint transfers [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + */ +#define CONFIG_USB_BUFSIZE 64 + +#endif /* CFG_USB_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_usbkbd.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_usbkbd.h new file mode 100644 index 00000000..5b6fb65a --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_usbkbd.h @@ -0,0 +1,78 @@ +/** + * \file + * + * + * \author Andrea Righi + * + * \brief Configuration file for the usbkbd driver module + */ + +#ifndef CFG_USBKBD_H +#define CFG_USBKBD_H + +/** + * Enable the usbkbd module. + * + * $WIZ$ type = "autoenabled" + */ +#define CONFIG_USBKBD 0 + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define USB_KEYBOARD_LOG_LEVEL LOG_LVL_INFO + +/** + * module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define USB_KEYBOARD_LOG_FORMAT LOG_FMT_TERSE + +/** + * USB vendor ID (please change this in your project, using a valid ID number!). + * + * $WIZ$ type = "hex" + */ +#define USB_KEYBOARD_VENDOR_ID 0x046d + +/** + * USB product ID (please change this in your project, using a valid ID number!). + * + * $WIZ$ type = "hex" + */ +#define USB_KEYBOARD_PRODUCT_ID 0xffff + +#endif /* CFG_USB_KEYBOARD_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_usbmouse.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_usbmouse.h new file mode 100644 index 00000000..73143284 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_usbmouse.h @@ -0,0 +1,78 @@ +/** + * \file + * + * + * \author Andrea Righi + * + * \brief Configuration file for the usbmouse driver module + */ + +#ifndef CFG_USBMOUSE_H +#define CFG_USBMOUSE_H + +/** + * Enable the usbmouse module. + * + * $WIZ$ type = "autoenabled" + */ +#define CONFIG_USBMOUSE 0 + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define USB_MOUSE_LOG_LEVEL LOG_LVL_INFO + +/** + * module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define USB_MOUSE_LOG_FORMAT LOG_FMT_TERSE + +/** + * USB vendor ID (please change this in your project, using a valid ID number!). + * + * $WIZ$ type = "hex" + */ +#define USB_MOUSE_VENDOR_ID 0xffff + +/** + * USB product ID (please change this in your project, using a valid ID number!). + * + * $WIZ$ type = "hex" + */ +#define USB_MOUSE_PRODUCT_ID 0x0000 + +#endif /* CFG_USBMOUSE_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_usbser.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_usbser.h new file mode 100644 index 00000000..1fa44e73 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_usbser.h @@ -0,0 +1,78 @@ +/** + * \file + * + * + * \author Andrea Righi + * + * \brief Configuration file for the USB serial driver module + */ + +#ifndef CFG_USBSER_H +#define CFG_USBSER_H + +/** + * Enable the usb-serial module. + * + * $WIZ$ type = "autoenabled" + */ +#define CONFIG_USBSER 0 + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define USB_SERIAL_LOG_LEVEL LOG_LVL_INFO + +/** + * module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define USB_SERIAL_LOG_FORMAT LOG_FMT_TERSE + +/** + * USB vendor ID (please change this in your project, using a valid ID number!). + * + * $WIZ$ type = "hex" + */ +#define USB_SERIAL_VENDOR_ID 0x05f9 + +/** + * USB product ID (please change this in your project, using a valid ID number!). + * + * $WIZ$ type = "hex" + */ +#define USB_SERIAL_PRODUCT_ID 0xffff + +#endif /* CFG_USBSER_H */ diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_wdt.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_wdt.h new file mode 100644 index 00000000..b53b327e --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_wdt.h @@ -0,0 +1,47 @@ +/** + * \file + * + * + * \brief Configuration file for watchdog module. + * + * + * \author Daniele Basile + */ + +#ifndef CFG_WDT_H +#define CFG_WDT_H + +/// Enable watchdog timer. $WIZ$ type = "autoenabled" +#define CONFIG_WATCHDOG 0 + +#endif /* CFG_WDT_H */ + + diff --git a/boards/stm32VLDiscovery/templates/empty/cfg/cfg_xmodem.h b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_xmodem.h new file mode 100644 index 00000000..38db7359 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/cfg/cfg_xmodem.h @@ -0,0 +1,79 @@ +/** + * \file + * + * + * \brief Configuration file for xmodem module. + * + * \author Daniele Basile + */ + +#ifndef CFG_XMODEM_H +#define CFG_XMODEM_H + +/** + * Module logging level. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define CONFIG_XMODEM_LOG_LEVEL LOG_LVL_ERR +/** + * Module logging format. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define CONFIG_XMODEM_LOG_FORMAT LOG_FMT_TERSE + + +/// Enable Rx. $WIZ$ type = "boolean" +#define CONFIG_XMODEM_RECV 1 + +/// Enable TX. $WIZ$ type = "boolean" +#define CONFIG_XMODEM_SEND 1 + +/// Allow a Rx/Tx of 1Kbyte block. $WIZ$ type = "boolean" +#define CONFIG_XMODEM_1KCRC 1 + +/** + * Max retries before giving up. + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_XMODEM_MAXRETRIES 15 + +/** + * Max retries before switching to BCC. + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_XMODEM_MAXCRCRETRIES 7 + +#endif /* CFG_XMODEM_H */ + diff --git a/boards/stm32VLDiscovery/templates/empty/empty.mk b/boards/stm32VLDiscovery/templates/empty/empty.mk new file mode 100644 index 00000000..5c1eb17c --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/empty.mk @@ -0,0 +1,92 @@ +# +# Wizard autogenerated makefile. +# DO NOT EDIT, use the empty_user.mk file instead. +# + +# Constants automatically defined by the selected modules +empty_DEBUG = 1 + +# Our target application +TRG += empty + +empty_PREFIX = "arm-none-eabi-" + +empty_SUFFIX = "" + +empty_SRC_PATH = boards/stm32VLDiscovery/templates/empty + +empty_HW_PATH = boards/stm32VLDiscovery + +# Files automatically generated by the wizard. DO NOT EDIT, USE empty_USER_CSRC INSTEAD! +empty_WIZARD_CSRC = \ + bertos/cpu/cortex-m3/hw/switch_ctx_cm3.c \ + bertos/mware/event.c \ + bertos/kern/sem.c \ + bertos/cpu/cortex-m3/drv/timer_cm3.c \ + bertos/struct/heap.c \ + bertos/mware/formatwr.c \ + bertos/drv/timer.c \ + bertos/kern/kfile.c \ + bertos/kern/proc.c \ + bertos/mware/hex.c \ + bertos/kern/signal.c \ + # + +# Files automatically generated by the wizard. DO NOT EDIT, USE empty_USER_PCSRC INSTEAD! +empty_WIZARD_PCSRC = \ + \ + # + +# Files automatically generated by the wizard. DO NOT EDIT, USE empty_USER_CPPASRC INSTEAD! +empty_WIZARD_CPPASRC = \ + \ + # + +# Files automatically generated by the wizard. DO NOT EDIT, USE empty_USER_CXXSRC INSTEAD! +empty_WIZARD_CXXSRC = \ + \ + # + +# Files automatically generated by the wizard. DO NOT EDIT, USE empty_USER_ASRC INSTEAD! +empty_WIZARD_ASRC = \ + \ + # + +empty_CPPFLAGS = -D'CPU_FREQ=(24000000UL)' -D'ARCH=(ARCH_DEFAULT)' -D'WIZ_AUTOGEN' -I$(empty_HW_PATH) -I$(empty_SRC_PATH) $(empty_CPU_CPPFLAGS) $(empty_USER_CPPFLAGS) + +# Automatically generated by the wizard. PLEASE DO NOT EDIT! +empty_LDFLAGS = $(empty_CPU_LDFLAGS) $(empty_WIZARD_LDFLAGS) $(empty_USER_LDFLAGS) + +# Automatically generated by the wizard. PLEASE DO NOT EDIT! +empty_CPPAFLAGS = $(empty_CPU_CPPAFLAGS) $(empty_WIZARD_CPPAFLAGS) $(empty_USER_CPPAFLAGS) + +# Automatically generated by the wizard. PLEASE DO NOT EDIT! +empty_CSRC = $(empty_CPU_CSRC) $(empty_WIZARD_CSRC) $(empty_USER_CSRC) + +# Automatically generated by the wizard. PLEASE DO NOT EDIT! +empty_PCSRC = $(empty_CPU_PCSRC) $(empty_WIZARD_PCSRC) $(empty_USER_PCSRC) + +# Automatically generated by the wizard. PLEASE DO NOT EDIT! +empty_CPPASRC = $(empty_CPU_CPPASRC) $(empty_WIZARD_CPPASRC) $(empty_USER_CPPASRC) + +# Automatically generated by the wizard. PLEASE DO NOT EDIT! +empty_CXXSRC = $(empty_CPU_CXXSRC) $(empty_WIZARD_CXXSRC) $(empty_USER_CXXSRC) + +# Automatically generated by the wizard. PLEASE DO NOT EDIT! +empty_ASRC = $(empty_CPU_ASRC) $(empty_WIZARD_ASRC) $(empty_USER_ASRC) + +# CPU specific flags and options, defined in the CPU definition files. +# Automatically generated by the wizard. PLEASE DO NOT EDIT! +empty_CPU_CPPASRC = bertos/cpu/cortex-m3/hw/crt_cm3.S bertos/cpu/cortex-m3/hw/vectors_cm3.S +empty_CPU_CPPAFLAGS = -g -gdwarf-2 -mthumb -mno-thumb-interwork +empty_CPU_CPPFLAGS = -O0 -g3 -gdwarf-2 -mthumb -mno-thumb-interwork -fno-strict-aliasing -fwrapv -fverbose-asm -Ibertos/cpu/cortex-m3/ -D__ARM_STM32F100RB__ +empty_CPU_CSRC = bertos/cpu/cortex-m3/hw/init_cm3.c bertos/cpu/cortex-m3/drv/irq_cm3.c bertos/cpu/cortex-m3/drv/gpio_stm32.c bertos/cpu/cortex-m3/drv/clock_stm32.c +empty_PROGRAMMER_CPU = stm32 +empty_STOPFLASH_SCRIPT = bertos/prg_scripts/arm/stopopenocd.sh +empty_CPU = cortex-m3 +empty_STOPDEBUG_SCRIPT = bertos/prg_scripts/arm/stopopenocd.sh +empty_DEBUG_SCRIPT = bertos/prg_scripts/arm/debug.sh +empty_CPU_LDFLAGS = -mthumb -mno-thumb-interwork -nostartfiles -Wl,--no-warn-mismatch -T bertos/cpu/cortex-m3/scripts/stm32f100rb_rom.ld +empty_FLASH_SCRIPT = bertos/prg_scripts/arm/flash-stm32.sh + +include $(empty_SRC_PATH)/empty_user.mk diff --git a/boards/stm32VLDiscovery/templates/empty/empty_user.mk b/boards/stm32VLDiscovery/templates/empty/empty_user.mk new file mode 100644 index 00000000..4c8ed7ef --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/empty_user.mk @@ -0,0 +1,43 @@ +# +# User makefile. +# Edit this file to change compiler options and related stuff. +# + +# Programmer interface configuration, see http://dev.bertos.org/wiki/ProgrammerInterface for help +empty_PROGRAMMER_TYPE = none +empty_PROGRAMMER_PORT = none + +# Files included by the user. +empty_USER_CSRC = \ + $(empty_SRC_PATH)/main.c \ + # + +# Files included by the user. +empty_USER_PCSRC = \ + # + +# Files included by the user. +empty_USER_CPPASRC = \ + # + +# Files included by the user. +empty_USER_CXXSRC = \ + # + +# Files included by the user. +empty_USER_ASRC = \ + # + +# Flags included by the user. +empty_USER_LDFLAGS = \ + # + +# Flags included by the user. +empty_USER_CPPAFLAGS = \ + # + +# Flags included by the user. +empty_USER_CPPFLAGS = \ + -fno-strict-aliasing \ + -fwrapv \ + # diff --git a/boards/stm32VLDiscovery/templates/empty/main.c b/boards/stm32VLDiscovery/templates/empty/main.c new file mode 100644 index 00000000..c21b9a0f --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/main.c @@ -0,0 +1,40 @@ +/* \brief Empty project. + * + * This is a minimalist project, it just initializes the hardware of the + * supported board and proposes an empty main. + */ + +#include "hw/hw_led.h" + +#include + +#include + +#include + +static void init(void) +{ + /* Enable all the interrupts */ + IRQ_ENABLE; + + /* Initialize debugging module (allow kprintf(), etc.) */ + kdbg_init(); + /* Initialize system timer */ + timer_init(); + /* Initialize LED driver */ + LED_INIT(); +} + + +int main(void) +{ + init(); + + while (1) + { + // your code goes here + } + + return 0; +} + diff --git a/boards/stm32VLDiscovery/templates/empty/project.bertos b/boards/stm32VLDiscovery/templates/empty/project.bertos new file mode 100644 index 00000000..6e499430 --- /dev/null +++ b/boards/stm32VLDiscovery/templates/empty/project.bertos @@ -0,0 +1,74 @@ +(dp0 +S'BERTOS_PATH' +p1 +S'../../../..' +p2 +sS'SELECTED_FREQ' +p3 +V24000000 +p4 +sS'WIZARD_VERSION' +p5 +I3 +sS'PROJECT_NAME' +p6 +Vempty +p7 +sS'TOOLCHAIN' +p8 +(dp9 +Vtarget +p10 +Varm-none-eabi +p11 +sVthread +p12 +Vsingle +p13 +sVconfigured +p14 +V/scratch/julian/2010q3-release-eabi-lite/src/gcc-4.5-2010.09/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-eabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --enable-extra-sgxxlite-multilibs --with-gnu-as --with-gnu-ld --with-specs='%{save-temps: -fverbose-asm} -D__CS_SOURCERYGXX_MAJ__=2010 -D__CS_SOURCERYGXX_MIN__=9 -D__CS_SOURCERYGXX_REV__=51 %{O2:%{!fno-remove-local-statics: -fremove-local-statics}} %{O*:%{O|O0|O1|O2|Os:;:%{!fno-remove-local-statics: -fremove-local-statics}}}' --enable-languages=c,c++ --disable-shared --enable-lto --with-newlib --with-pkgversion='Sourcery G++ Lite 2010.09-51' --with-bugurl=https://support.codesourcery.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-headers=yes --with-sysroot=/opt/codesourcery/arm-none-eabi --with-build-sysroot=/scratch/julian/2010q3-release-eabi-lite/install/arm-none-eabi --with-gmp=/scratch/julian/2010q3-release-eabi-lite/obj/host-libs-2010.09-51-arm-none-eabi-i686-pc-linux-gnu/usr --with-mpfr=/scratch/julian/2010q3-release-eabi-lite/obj/host-libs-2010.09-51-arm-none-eabi-i686-pc-linux-gnu/usr --with-mpc=/scratch/julian/2010q3-release-eabi-lite/obj/host-libs-2010.09-51-arm-none-eabi-i686-pc-linux-gnu/usr --with-ppl=/scratch/julian/2010q3-release-eabi-lite/obj/host-libs-2010.09-51-arm-none-eabi-i686-pc-linux-gnu/usr --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --with-cloog=/scratch/julian/2010q3-release-eabi-lite/obj/host-libs-2010.09-51-arm-none-eabi-i686-pc-linux-gnu/usr --with-libelf=/scratch/julian/2010q3-release-eabi-lite/obj/host-libs-2010.09-51-arm-none-eabi-i686-pc-linux-gnu/usr --disable-libgomp --enable-poison-system-directories --with-build-time-tools=/scratch/julian/2010q3-release-eabi-lite/install/arm-none-eabi/bin --with-build-time-tools=/scratch/julian/2010q3-release-eabi-lite/install/arm-none-eabi/bin +p15 +sVversion +p16 +V4.5.1 +p17 +sVbuild +p18 +VSourcery G++ Lite 2010.09-51 +p19 +sVpath +p20 +V/opt/CodeSourcery/arm-2010.09/bin/arm-none-eabi-gcc +p21 +ssS'ENABLED_MODULES' +p22 +(lp23 +S'formatwr' +p24 +aS'kfile' +p25 +aS'heap' +p26 +aS'timer' +p27 +aS'debug' +p28 +asS'CPU_NAME' +p29 +VSTM32F100RB +p30 +sS'PROJECT_HW_PATH' +p31 +S'../..' +p32 +sS'PROJECT_SRC_PATH' +p33 +S'.' +p34 +sS'PRESET' +p35 +NsS'OUTPUT' +p36 +(lp37 +s. -- 2.25.1