initial, ported from constantly failed C++ variant

This commit is contained in:
Wolfgang Hottgenroth 2016-08-29 19:24:24 +02:00
commit 35bef18ec0
16 changed files with 635 additions and 0 deletions

100
.cproject Normal file
View File

@ -0,0 +1,100 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
<storageModule moduleId="org.eclipse.cdt.core.settings">
<cconfiguration id="dk.xpg.msp430eclipse.configuration.app.debug.1048602252">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="dk.xpg.msp430eclipse.configuration.app.debug.1048602252" moduleId="org.eclipse.cdt.core.settings" name="Debug">
<externalSettings/>
<extensions>
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="dk.xpg.msp430eclipse.buildArtefactType.app" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=dk.xpg.msp430eclipse.buildArtefactType.app,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.VCErrorParser" id="dk.xpg.msp430eclipse.configuration.app.debug.1048602252" name="Debug" parent="dk.xpg.msp430eclipse.configuration.app.debug">
<folderInfo id="dk.xpg.msp430eclipse.configuration.app.debug.1048602252." name="/" resourcePath="">
<toolChain id="dk.xpg.msp430eclipse.toolchain.gcc.app.debug.1295560935" name="MSP430 GCC Toolchain" superClass="dk.xpg.msp430eclipse.toolchain.gcc.app.debug">
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="dk.xpg.msp430eclipse.targetplatform.msp430.1997442023" isAbstract="false" name="MSP430 Cross-Target" osList="all" superClass="dk.xpg.msp430eclipse.targetplatform.msp430"/>
<builder buildPath="${workspace_loc:/TeaThermoTimer}/Debug" id="dk.xpg.msp430eclipse.target.gnu.builder.1911415240" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="MSP430 GNU Make Builder" superClass="dk.xpg.msp430eclipse.target.gnu.builder"/>
<tool id="dk.xpg.msp430eclipse.tool.compiler.gcc.1489133124" name="MSP430 C Compiler" superClass="dk.xpg.msp430eclipse.tool.compiler.gcc">
<option defaultValue="dk.xpg.msp430eclipse.compiler.option.optimization.level.none" id="dk.xpg.msp430eclipse.compiler.option.optimization.level.925149145" name="Optimization Level" superClass="dk.xpg.msp430eclipse.compiler.option.optimization.level" valueType="enumerated"/>
<option defaultValue="dk.xpg.msp430eclipse.compiler.option.debugging.level.default" id="dk.xpg.msp430eclipse.compiler.option.debugging.level.154569899" name="Debugging Level" superClass="dk.xpg.msp430eclipse.compiler.option.debugging.level" valueType="enumerated"/>
<option id="dk.xpg.msp430eclipse.compiler.option.language.standard.1380069728" superClass="dk.xpg.msp430eclipse.compiler.option.language.standard" value="dk.xpg.msp430eclipse.compiler.option.language.standard.gnu99" valueType="enumerated"/>
<inputType id="dk.xpg.msp430eclipse.tool.compiler.gcc.input.1393043846" name="C Source File" superClass="dk.xpg.msp430eclipse.tool.compiler.gcc.input"/>
<inputType id="dk.xpg.msp430eclipse.tool.compiler.gcc.input.cc.1115664253" name="C++ Source File" superClass="dk.xpg.msp430eclipse.tool.compiler.gcc.input.cc"/>
</tool>
<tool id="dk.xpg.msp430eclipse.tool.assembler.gcc.423309473" name="MSP430 Assembler" superClass="dk.xpg.msp430eclipse.tool.assembler.gcc">
<inputType id="dk.xpg.msp430eclipse.tool.assembler.input.1627828012" name="Assembler Files" superClass="dk.xpg.msp430eclipse.tool.assembler.input"/>
</tool>
<tool id="dk.xpg.msp430eclipse.tool.linker.gcc.1414250393" name="MSP430 Linker" superClass="dk.xpg.msp430eclipse.tool.linker.gcc">
<inputType id="dk.xpg.msp430eclipse.tool.linker.input.1373967257" name="Object Files" superClass="dk.xpg.msp430eclipse.tool.linker.input"/>
</tool>
<tool id="dk.xpg.msp430eclipse.tool.archiver.gcc.2115199058" name="MSP430 Archiver" superClass="dk.xpg.msp430eclipse.tool.archiver.gcc"/>
</toolChain>
</folderInfo>
<sourceEntries>
<entry excluding="src" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
</sourceEntries>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
<cconfiguration id="dk.xpg.msp430eclipse.configuration.app.release.1716607718">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="dk.xpg.msp430eclipse.configuration.app.release.1716607718" moduleId="org.eclipse.cdt.core.settings" name="Release">
<externalSettings/>
<extensions>
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="dk.xpg.msp430eclipse.buildArtefactType.app" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=dk.xpg.msp430eclipse.buildArtefactType.app,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.VCErrorParser" id="dk.xpg.msp430eclipse.configuration.app.release.1716607718" name="Release" parent="dk.xpg.msp430eclipse.configuration.app.release">
<folderInfo id="dk.xpg.msp430eclipse.configuration.app.release.1716607718." name="/" resourcePath="">
<toolChain id="dk.xpg.msp430eclipse.toolchain.gcc.app.release.2120639002" name="MSP430 GCC Toolchain" superClass="dk.xpg.msp430eclipse.toolchain.gcc.app.release">
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="dk.xpg.msp430eclipse.targetplatform.msp430.1070938188" isAbstract="false" name="MSP430 Cross-Target" osList="all" superClass="dk.xpg.msp430eclipse.targetplatform.msp430"/>
<builder buildPath="${workspace_loc:/TeaThermoTimer}/Release" id="dk.xpg.msp430eclipse.target.gnu.builder.1912281183" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="MSP430 GNU Make Builder" superClass="dk.xpg.msp430eclipse.target.gnu.builder"/>
<tool id="dk.xpg.msp430eclipse.tool.compiler.gcc.1604096089" name="MSP430 C Compiler" superClass="dk.xpg.msp430eclipse.tool.compiler.gcc">
<option defaultValue="dk.xpg.msp430eclipse.compiler.option.optimization.level.most" id="dk.xpg.msp430eclipse.compiler.option.optimization.level.957179260" name="Optimization Level" superClass="dk.xpg.msp430eclipse.compiler.option.optimization.level" valueType="enumerated"/>
<option defaultValue="dk.xpg.msp430eclipse.compiler.option.debugging.level.none" id="dk.xpg.msp430eclipse.compiler.option.debugging.level.1445781415" name="Debugging Level" superClass="dk.xpg.msp430eclipse.compiler.option.debugging.level" valueType="enumerated"/>
<inputType id="dk.xpg.msp430eclipse.tool.compiler.gcc.input.2129325944" name="C Source File" superClass="dk.xpg.msp430eclipse.tool.compiler.gcc.input"/>
<inputType id="dk.xpg.msp430eclipse.tool.compiler.gcc.input.cc.2128986642" name="C++ Source File" superClass="dk.xpg.msp430eclipse.tool.compiler.gcc.input.cc"/>
</tool>
<tool id="dk.xpg.msp430eclipse.tool.assembler.gcc.1072807233" name="MSP430 Assembler" superClass="dk.xpg.msp430eclipse.tool.assembler.gcc">
<inputType id="dk.xpg.msp430eclipse.tool.assembler.input.20110081" name="Assembler Files" superClass="dk.xpg.msp430eclipse.tool.assembler.input"/>
</tool>
<tool id="dk.xpg.msp430eclipse.tool.linker.gcc.2090938199" name="MSP430 Linker" superClass="dk.xpg.msp430eclipse.tool.linker.gcc">
<inputType id="dk.xpg.msp430eclipse.tool.linker.input.570466072" name="Object Files" superClass="dk.xpg.msp430eclipse.tool.linker.input"/>
</tool>
<tool id="dk.xpg.msp430eclipse.tool.archiver.gcc.1047873146" name="MSP430 Archiver" superClass="dk.xpg.msp430eclipse.tool.archiver.gcc"/>
</toolChain>
</folderInfo>
<sourceEntries>
<entry excluding="src" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
</sourceEntries>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<project id="TeaThermoTimer.dk.xpg.msp430eclipse.project.gcc.elf.2012413821" name="MSP430 Cross Target Application" projectType="dk.xpg.msp430eclipse.project.gcc.elf"/>
</storageModule>
<storageModule moduleId="scannerConfiguration">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
<storageModule moduleId="refreshScope"/>
</cproject>

27
.project Normal file
View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>TeaThermoTimer</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
<triggers>clean,full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
<triggers>full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.cdt.core.cnature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
<nature>dk.xpg.msp430eclipse.msp430nature</nature>
</natures>
</projectDescription>

View File

@ -0,0 +1,6 @@
eclipse.preferences.version=1
msp430/DeviceSerialNumber=
msp430/MSP430TARGETMCU=msp430g2553
msp430/MSPDebugConnection=
msp430/MSPDebugProtocol=SBW
msp430/MSPDebugTTYDevice=

12
docs/tea.txt Normal file
View File

@ -0,0 +1,12 @@
P1.7 A
P1.6 B
P2.5 F
P2.4 E
P2.3 D
P2.2 G
P2.1 C
P2.0 1
P1.5 2
P1.0 T

60
src/PontCoopScheduler.c Normal file
View File

@ -0,0 +1,60 @@
/*
* PontCoopScheduler.c
*
* Created on: 29.08.2016
* Author: wn
*/
#include <stdlib.h>
#include "PontCoopScheduler.h"
tTask tasks[MAX_NUM_OF_TASKS];
void schInit() {
for (uint8_t i = 0; i < MAX_NUM_OF_TASKS; i++) {
tasks[i].delay = 0;
tasks[i].period = 0;
tasks[i].run = 0;
tasks[i].exec = NULL;
}
}
void schAdd(void (*exec)(void), uint32_t delay, uint32_t period) {
for (uint8_t i = 0; i < MAX_NUM_OF_TASKS; i++) {
if (tasks[i].exec == NULL) {
tasks[i].delay = delay;
tasks[i].period = period;
tasks[i].run = 0;
tasks[i].exec = exec;
break;
}
}
}
void schExec() {
for (uint8_t i = 0; i < MAX_NUM_OF_TASKS; i++) {
if (tasks[i].exec != NULL && tasks[i].run > 0) {
tasks[i].run--;
tasks[i].exec();
if (tasks[i].period == 0) {
tasks[i].exec = NULL;
}
}
}
}
void schUpdate() {
for (uint8_t i = 0; i < MAX_NUM_OF_TASKS; i++) {
if (tasks[i].exec != NULL) {
if (tasks[i].delay == 0) {
tasks[i].delay = tasks[i].period;
tasks[i].run++;
} else {
tasks[i].delay--;
}
}
}
}

33
src/PontCoopScheduler.h Normal file
View File

@ -0,0 +1,33 @@
/*
* PontCoopScheduler.h
*
* Created on: 29.08.2016
* Author: wn
*/
#ifndef PONTCOOPSCHEDULER_H_
#define PONTCOOPSCHEDULER_H_
#include <stdint.h>
#define MAX_NUM_OF_TASKS 3
typedef struct {
uint32_t delay;
uint32_t period;
uint8_t run;
void (*exec)(void);
} tTask;
void schInit();
void schAdd(void (*exec)(void), uint32_t delay, uint32_t period);
void schExec();
void schUpdate();
#endif /* PONTCOOPSCHEDULER_H_ */

107
src/display.c Normal file
View File

@ -0,0 +1,107 @@
/*
* display.c
*
* Created on: 29.08.2016
* Author: wn
*/
#include <msp430g2553.h>
#include <stdint.h>
#include <intrinsics.h>
#include "display.h"
#include "gpio.h"
#include "time.h"
const uint16_t INIT_CYCLE_DELAY = 200;
typedef enum {
ALL_ID = 10,
H_ID,
I_ID,
EMPTY_ID,
} tPatternId;
const tPin ALL_PATTERN[] = { SEG_A, SEG_B, SEG_C, SEG_D, SEG_E, SEG_F, SEG_G, PINS_END };
const tPin H_PATTERN[] = { SEG_B, SEG_C, SEG_E, SEG_F, SEG_G, PINS_END };
const tPin I_PATTERN[] = { SEG_B, SEG_C, PINS_END };
const tPin EMPTY_PATTERN[] = { PINS_END };
const tPin NUMBER0[] = { SEG_A, SEG_B, SEG_C, SEG_D, SEG_E, SEG_F, PINS_END };
const tPin NUMBER1[] = { SEG_B, SEG_C, PINS_END };
const tPin NUMBER2[] = { SEG_A, SEG_B, SEG_G, SEG_E, SEG_D, PINS_END };
const tPin NUMBER3[] = { SEG_A, SEG_B, SEG_G, SEG_C, SEG_D, PINS_END };
const tPin NUMBER4[] = { SEG_F, SEG_G, SEG_B, SEG_C, PINS_END };
const tPin NUMBER5[] = { SEG_A, SEG_F, SEG_G, SEG_C, SEG_D, PINS_END };
const tPin NUMBER6[] = { SEG_A, SEG_C, SEG_D, SEG_E, SEG_F, SEG_G, PINS_END };
const tPin NUMBER7[] = { SEG_A, SEG_B, SEG_C, PINS_END };
const tPin NUMBER8[] = { SEG_A, SEG_B, SEG_C, SEG_D, SEG_E, SEG_F, SEG_G, PINS_END };
const tPin NUMBER9[] = { SEG_A, SEG_B, SEG_C, SEG_D, SEG_F, SEG_G, PINS_END };
const tPin *NUMBERS[] = { NUMBER0, NUMBER1, NUMBER2, NUMBER3, NUMBER4,
NUMBER5, NUMBER6, NUMBER7, NUMBER8, NUMBER9, ALL_PATTERN, H_PATTERN,
I_PATTERN, EMPTY_PATTERN };
const tPin DIGITS[] = { DIGIT_0, DIGIT_1, PINS_END };
uint8_t digitValues[2] = { EMPTY_ID, EMPTY_ID };
void displayInit() {
for (tPin d = DIGIT_0; d <= DIGIT_1; d++) {
gpioSetPin(d, LOW);
for (tPin s = SEG_A; s <= SEG_G; s++) {
gpioSetPin(s, HIGH);
ms_active_delay(INIT_CYCLE_DELAY);
gpioSetPin(s, LOW);
}
gpioSetPin(d, HIGH);
}
}
static void showNumber(uint8_t n) {
const tPin *pattern = NUMBERS[10];
do {
gpioSetPin(*pattern, LOW);
pattern++;
} while (*pattern != PINS_END);
pattern = NUMBERS[n];
do {
gpioSetPin(*pattern, HIGH);
pattern++;
} while (*pattern != PINS_END);
}
void displaySetValue(uint8_t v) {
if (v >= 100) {
digitValues[1] = H_ID;
digitValues[0] = I_ID;
} else {
digitValues[1] = v / 10;
digitValues[0] = v - digitValues[1];
}
}
void displayExec() {
static uint8_t activeDigit = 0;
activeDigit++;
if (activeDigit == 2) {
activeDigit = 0;
}
const tPin *digit = DIGITS;
do {
gpioSetPin(*digit, HIGH);
digit++;
} while (*digit != PINS_END);
digit = DIGITS + activeDigit;
gpioSetPin(*digit, LOW);
showNumber(digitValues[activeDigit]);
}

17
src/display.h Normal file
View File

@ -0,0 +1,17 @@
/*
* display.h
*
* Created on: 29.08.2016
* Author: wn
*/
#ifndef DISPLAY_H_
#define DISPLAY_H_
void displayInit();
void displayExec();
void displaySetValue(uint8_t v);
#endif /* DISPLAY_H_ */

49
src/gpio.c Normal file
View File

@ -0,0 +1,49 @@
/*
* gpio.c
*
* Created on: 29.08.2016
* Author: wn
*/
#include <msp430g2553.h>
#include <stdint.h>
#define GPIO_C
#include "gpio.h"
#undef GPIO_C
extern tPinCfg pinCfg[];
void gpioInitPins() {
for (tPin p = PINS_FIRST; p < PINS_END; p += 1) {
tPinCfg pin = pinCfg[p];
if (pin.portId == PORT1) {
P1DIR |= pin.bit;
} else if (pin.portId == PORT2) {
P2DIR |= pin.bit;
}
gpioSetPin(p, pin.defaultOut);
}
}
void gpioSetPin(tPin p, tPinState v) {
tPinCfg pin = pinCfg[p];
if (v == HIGH) {
if (pin.portId == PORT1) {
P1OUT |= pin.bit;
} else if (pin.portId == PORT2) {
P2OUT |= pin.bit;
}
} else {
if (pin.portId == PORT1) {
P1OUT &= ~pin.bit;
} else if (pin.portId == PORT2) {
P2OUT &= ~pin.bit;
}
}
}

56
src/gpio.h Normal file
View File

@ -0,0 +1,56 @@
/*
* gpio.h
*
* Created on: 29.08.2016
* Author: wn
*/
#ifndef GPIO_H_
#define GPIO_H_
#include <msp430g2553.h>
#include <stdint.h>
typedef enum {
PORT1,
PORT2
} tPort;
typedef enum {
LOW,
HIGH,
} tPinState;
typedef struct {
tPort portId;
uint16_t bit;
tPinState defaultOut;
} tPinCfg;
typedef enum {
PINS_FIRST,
SEG_A = PINS_FIRST,
SEG_B,
SEG_C,
SEG_D,
SEG_E,
SEG_F,
SEG_G,
DIGIT_0,
DIGIT_1,
TESTPIN,
PINS_END
} tPin;
void gpioInitPins();
void gpioSetPin(tPin p, tPinState v);
#endif /* GPIO_H_ */

21
src/gpioCfg.c Normal file
View File

@ -0,0 +1,21 @@
/*
* gpioCfg.c
*
* Created on: 29.08.2016
* Author: wn
*/
#include "gpio.h"
tPinCfg pinCfg[PINS_END] = {
{PORT1, BIT7, LOW}, //A
{PORT1, BIT6, LOW}, //B
{PORT2, BIT1, LOW}, //C
{PORT2, BIT3, LOW}, //D
{PORT2, BIT4, LOW}, //E
{PORT2, BIT5, LOW}, //F
{PORT2, BIT2, LOW}, //G
{PORT2, BIT0, HIGH}, //0
{PORT1, BIT5, HIGH}, //1
{PORT1, BIT7, LOW}, // TESTPIN
};

49
src/main.c Normal file
View File

@ -0,0 +1,49 @@
/*
* main.c
*
* Created on: 29.08.2016
* Author: wn
*/
#include <msp430g2553.h>
#include <stdint.h>
#include <intrinsics.h>
#include "gpio.h"
#include "time.h"
#include "display.h"
#include "PontCoopScheduler.h"
#include "testTask.h"
int main() {
WDTCTL = WDTPW | WDTHOLD;
// highest possible system clock
DCOCTL = DCO0 | DCO1 | DCO2;
BCSCTL1 = XT2OFF | RSEL0 | RSEL1 | RSEL2 | RSEL3;
BCSCTL2 = 0;
BCSCTL3 = 0;
gpioInitPins();
timeInit();
schInit();
// interrupts are required for delay function in displayInit();
__enable_interrupt();
displayInit();
__disable_interrupt();
testTaskInit();
// schAdd(displayExec, 0, 100);
schAdd(testTaskExec, 0, 100);
while (1) {
schExec();
}
}

26
src/testTask.c Normal file
View File

@ -0,0 +1,26 @@
/*
* testTask.c
*
* Created on: 29.08.2016
* Author: wn
*/
#include "gpio.h"
void testTaskInit() {
}
void testTaskExec() {
static uint8_t toggle = 0;
if (toggle == 0) {
toggle = 1;
gpioSetPin(TESTPIN, HIGH);
} else {
toggle = 0;
gpioSetPin(TESTPIN, LOW);
}
}

15
src/testTask.h Normal file
View File

@ -0,0 +1,15 @@
/*
* testTask.h
*
* Created on: 29.08.2016
* Author: wn
*/
#ifndef TESTTASK_H_
#define TESTTASK_H_
void testTaskInit();
void testTaskExec();
#endif /* TESTTASK_H_ */

38
src/time.c Normal file
View File

@ -0,0 +1,38 @@
/*
* time.c
*
* Created on: 20.05.2014
* Author: wn
*/
#include <msp430g2553.h>
#include <isr_compat.h>
#include <stdint.h>
#include "time.h"
#include "PontCoopScheduler.h"
volatile uint32_t timestamp;
ISR(TIMER0_A0, TA0_ISR) {
timestamp++;
schUpdate();
}
void timeInit() {
timestamp = 0;
TACCR0 = 32;
TACCTL0 = CCIE;
TACTL = MC_1 | ID_0 | TASSEL_1 | TACLR;
}
uint32_t getMillis() {
return timestamp;
}
void ms_active_delay(uint16_t delay) {
uint32_t start = timestamp;
while (start + delay > timestamp);
}

19
src/time.h Normal file
View File

@ -0,0 +1,19 @@
/*
* time.h
*
* Created on: 20.05.2014
* Author: wn
*/
#ifndef TIME_H_
#define TIME_H_
#include <stdint.h>
void timeInit();
uint32_t getMillis();
void ms_active_delay(uint16_t delay);
#endif /* TIME_H_ */