Skip to content

Commit ccd7302

Browse files
committed
timer4-Handling ergänzt, aber noch ungetestet
1 parent 7bfe1ff commit ccd7302

9 files changed

Lines changed: 253 additions & 99 deletions

File tree

README.md

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,14 @@ STM8-Support erst ab Version 3.4 in Ubuntu 14.10. Für 14.4:
2323
apt-get update
2424
apt-get install sdcc
2525

26+
Besser einen aktuellen snapshot-build direkt von http://sdcc.sourceforge.net/
27+
besorgen. Das braucht aber eine neue Version der libstdc++6. Deshalb:
28+
29+
add-apt-repository ppa:ubuntu-toolchain-r/test
30+
apt-get update
31+
apt-get install libstdc++6
32+
33+
2634
git clone https://github.com/vdudouyt/stm8flash.git
2735
cd stm8flash
2836
make
@@ -53,6 +61,17 @@ https://sourceforge.net/p/oggstreamer/oggs-stm8-firmware-001/ci/master/tree/rx_r
5361
Befehl '_ _ critical{..}' sollte eigentlich den vorherigen Interrupt-Zustand
5462
wiederherstellen, es wird aber einfach ein festes Paar sim/rim produziert.
5563

64+
Für jeden benutzten Interrupt __muss__ ein Prototyp in der Datei stehen, in
65+
der auch main() definiert ist. Aber für jeden Prototypen, für den es keine
66+
Funktion gibt, ergibt einen Linkerfehler. Das erklärt den Sinn von stm8s_it.h
67+
im Projektverzeichniss. Eine Arduino-ähnliche Umgebung muss diese Datei also
68+
nach Analyse aller Sourcen selber erzeugen.
69+
70+
sstm8: does not account for different cpu models.
71+
base address for UART1 is 0x5240, not 0x5230
72+
TX and RX interrupt vectors 0x804C and 0x8050.
73+
74+
5675
Compilieren: braucht libboost-graph:
5776
libboost-graph1.54-dev - generic graph components and algorithms in C++
5877
libboost-graph1.54.0 - generic graph components and algorithms in C++
@@ -64,7 +83,11 @@ aufeinander folgende addw x,# und subw x,# werden nicht zusammengefasst
6483
Multiplikation mit zwei wird nicht durch bitshift ersetzt (besonders beim
6584
Arrayzugriff absurd)
6685

67-
86+
Fehlende Features:
87+
- _ _attribute_ _((weak))
88+
- _ _critical{} erzeugt sim/rim statt push cc,sim/pop cc
89+
- dead code elemination: Verbietet es, const-Tabellen anzulegen und fordert
90+
"#define" für alles.
6891

6992

7093

examples/blink-spl/Makefile

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
1-
SDCC=sdcc
2-
SDLD=sdld
1+
SDCCBASE=/opt/sdcc
2+
BINDIR=$(SDCCBASE)/bin
3+
SDCC=$(BINDIR)/sdcc
4+
SDLD=$(BINDIR)/sdld
5+
36
OBJECT=blink
47
OBJECTS=blink_spl.rel
58

69
LIBDIR=../../STM8S_StdPeriph_Driver/src
710
#LIBFILES=$(LIBDIR)/stm8s_gpio.rel
811
LIBFILES=$(LIBDIR)/stm8s.lib
912

10-
CFLAGS=-DSTM8S103 -I. -I../../STM8S_StdPeriph_Driver/inc
13+
CFLAGS=-DSTM8S103 -I. -I../../STM8S_StdPeriph_Driver/inc --debug
1114

1215

1316
.PHONY: all clean flash

examples/uart-int/Makefile

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
1-
SDCC=sdcc
2-
SDLD=sdld
1+
SDCCBASE=/opt/sdcc
2+
BINDIR=$(SDCCBASE)/bin
3+
SDCC=$(BINDIR)/sdcc
4+
SDLD=$(BINDIR)/sdld
5+
36
OBJECT=uart
47
OBJECTS=uart-int.rel
58

69
LIBDIR=../../STM8S_StdPeriph_Driver/src
710
#LIBFILES=$(LIBDIR)/stm8s_gpio.rel
811
LIBFILES=$(LIBDIR)/stm8s.lib
912

10-
CFLAGS=-DSTM8S103 -I. -I../../STM8S_StdPeriph_Driver/inc
13+
CFLAGS=-DSTM8S103 -I. -I../../STM8S_StdPeriph_Driver/inc --debug
1114

1215

1316
.PHONY: all clean flash

examples/uart-spl/Makefile

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
1-
SDCC=sdcc
2-
SDLD=sdld
1+
SDCCBASE=/opt/sdcc
2+
BINDIR=$(SDCCBASE)/bin
3+
SDCC=$(BINDIR)/sdcc
4+
SDLD=$(BINDIR)/sdld
5+
36
OBJECT=uart
47
OBJECTS=uart_spl.rel
58

69
LIBDIR=../../STM8S_StdPeriph_Driver/src
710
#LIBFILES=$(LIBDIR)/stm8s_gpio.rel
811
LIBFILES=$(LIBDIR)/stm8s.lib
912

10-
CFLAGS=-DSTM8S103 -I. -I../../STM8S_StdPeriph_Driver/inc
13+
CFLAGS=-DSTM8S103 -I. -I../../STM8S_StdPeriph_Driver/inc --debug
1114

1215

1316
.PHONY: all clean flash

sdunio/Makefile

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
EXECUTABLE=alles.ihx
22

3-
CC=/usr/bin/sdcc
4-
CFLAGS= -mstm8 -DF_CPU=16000000L -DSTM8S103 --no-peep \
3+
#SDCCBASE=/usr/local
4+
SDCCBASE=/opt/sdcc
5+
BINDIR=$(SDCCBASE)/bin
6+
CC=$(BINDIR)/sdcc
7+
LD=$(BINDIR)/sdld
8+
9+
CFLAGS= --debug -mstm8 -DF_CPU=16000000L -DSTM8S103 \
510
-I/usr/share/sdcc/include/ -I$(LIBBASE)/inc -I.
611

712
LIBBASE=../STM8S_StdPeriph_Driver
8-
LIBFILES=$(LIBBASE)/src/stm8s.lib
9-
LDFLAGS=-L../STM8S_StdPeriph_Driver/src -lstm8s
13+
LDFLAGS=-L$(LIBBASE)/src -L/opt/sdcc/share/sdcc/lib/stm8 -lstm8s
1014

11-
OBJECTS=wiring.rel wiring_digital.rel test.rel
15+
OBJECTS=main.rel wiring.rel wiring_digital.rel
1216

1317
.PHONY: all clean
1418

@@ -28,6 +32,6 @@ $(OBJECTS) : %.rel : %.c
2832
$(CC) -c $(CFLAGS) $^
2933

3034
clean:
31-
rm -f *.lib *.rst *.rel *.lst *.ihx *.sym *.asm *.lk *.map *.cdb \
32-
*~ *.bak
35+
rm -f *.lib *.rst *.rel *.lst *.ihx *.sym *.asm *.lk *.map \
36+
*.cdb *.adb *~ *.bak
3337
rm -f $(EXECUTABLE)

sdunio/main.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919

2020
#include <Arduino.h>
2121

22+
// make sure to define prototypes for all used interrupts
23+
//#include "stm8s_it.h"
24+
2225
// Declared weak in Arduino.h to allow user redefinitions.
2326
int atexit(void (*func)()) { return 0; }
2427

@@ -33,13 +36,13 @@ int main(void)
3336

3437
initVariant();
3538

36-
setup();
39+
// setup();
3740

3841
for (;;) {
39-
loop();
40-
if (serialEventRun) serialEventRun();
42+
// loop();
43+
//FIXME if (serialEventRun) serialEventRun();
4144
}
4245

43-
return 0;
46+
// return 0;
4447
}
4548

sdunio/stm8s_it.h

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,81 @@
116116
INTERRUPT void EEPROM_EEC_IRQHandler(void); /* EEPROM ECC CORRECTION */
117117
#endif /* _RAISONANCE_ */
118118

119+
#if defined(_SDCC_) // SDCC patch: interrupt keyword required after function
120+
//FIXME void TRAP_IRQHandler(void) __interrupt(); /* TRAP */
121+
// void TLI_IRQHandler(void) __interrupt(ITC_IRQ_TLI); /* TLI */
122+
// void AWU_IRQHandler(void) __interrupt(ITC_IRQ_AWU); /* AWU */
123+
// void CLK_IRQHandler(void) __interrupt(ITC_IRQ_CLK); /* CLOCK */
124+
// void EXTI_PORTA_IRQHandler(void) __interrupt(ITC_IRQ_PORTA); /* EXTI PORTA */
125+
// void EXTI_PORTB_IRQHandler(void) __interrupt(ITC_IRQ_PORTB); /* EXTI PORTB */
126+
// void EXTI_PORTC_IRQHandler(void) __interrupt(ITC_IRQ_PORTC); /* EXTI PORTC */
127+
// void EXTI_PORTD_IRQHandler(void) __interrupt(ITC_IRQ_PORTD); /* EXTI PORTD */
128+
// void EXTI_PORTE_IRQHandler(void) __interrupt(ITC_IRQ_PORTE); /* EXTI PORTE */
129+
130+
#if defined(STM8S903) || defined(STM8AF622x)
131+
// void EXTI_PORTF_IRQHandler(void) __interrupt(ITC_IRQ_PORTF); /* EXTI PORTF */
132+
#endif /* (STM8S903) || (STM8AF622x) */
133+
134+
#if defined (STM8S208) || defined (STM8AF52Ax)
135+
// void CAN_RX_IRQHandler(void) __interrupt(ITC_IRQ_CAN_RX); /* CAN RX */
136+
// void CAN_TX_IRQHandler(void) __interrupt(ITC_IRQ_CAN_TX); /* CAN TX/ER/SC */
137+
#endif /* (STM8S208) || (STM8AF52Ax) */
138+
139+
// void SPI_IRQHandler(void) __interrupt(ITC_IRQ_SPI); /* SPI */
140+
// void TIM1_CAP_COM_IRQHandler(void) __interrupt(ITC_IRQ_TIM1_CAPCOM); /* TIM1 CAP/COM */
141+
// void TIM1_UPD_OVF_TRG_BRK_IRQHandler(void) __interrupt(ITC_IRQ_TIM1_OVF); /* TIM1 UPD/OVF/TRG/BRK */
142+
143+
#if defined(STM8S903) || defined(STM8AF622x)
144+
// void TIM5_UPD_OVF_BRK_TRG_IRQHandler(void) __interrupt(ITC_IRQ_TIM5_OVFTRI); /* TIM5 UPD/OVF/BRK/TRG */
145+
// void TIM5_CAP_COM_IRQHandler(void) __interrupt(ITC_IRQ_TIM5_CAPCOM); /* TIM5 CAP/COM */
146+
#else /* (STM8S208) || (STM8S207) || (STM8S105) || (STM8S103) || (STM8AF52Ax) || (STM8AF62Ax) || (STM8A626x) */
147+
// void TIM2_UPD_OVF_BRK_IRQHandler(void) __interrupt(ITC_IRQ_TIM2_OVF); /* TIM2 UPD/OVF/BRK */
148+
// void TIM2_CAP_COM_IRQHandler(void) __interrupt(ITC_IRQ_TIM2_CAPCOM); /* TIM2 CAP/COM */
149+
#endif /* (STM8S903) || (STM8AF622x) */
150+
151+
#if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S105) || \
152+
defined(STM8S005) || defined (STM8AF52Ax) || defined (STM8AF62Ax) || defined (STM8AF626x)
153+
// void TIM3_UPD_OVF_BRK_IRQHandler(void) __interrupt(ITC_IRQ_TIM3_OVF); /* TIM3 UPD/OVF/BRK */
154+
// void TIM3_CAP_COM_IRQHandler(void) __interrupt(ITC_IRQ_TIM3_CAPCOM); /* TIM3 CAP/COM */
155+
#endif /* (STM8S208) || (STM8S207) || (STM8S105) || (STM8AF52Ax) || (STM8AF62Ax) || (STM8A626x) */
156+
157+
#if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S103) || \
158+
defined(STM8S003) || defined (STM8AF52Ax) || defined (STM8AF62Ax) || defined (STM8S903)
159+
// void UART1_TX_IRQHandler(void) __interrupt(ITC_IRQ_UART1_TX); /* UART1 TX */
160+
// void UART1_RX_IRQHandler(void) __interrupt(ITC_IRQ_UART1_RX); /* UART1 RX */
161+
#endif /* (STM8S208) || (STM8S207) || (STM8S903) || (STM8S103) || (STM8AF52Ax) || (STM8AF62Ax) */
162+
163+
#if defined (STM8AF622x)
164+
// void UART4_TX_IRQHandler(void) __interrupt(ITC_IRQ_UART4_TX); /* UART4 TX */
165+
// void UART4_RX_IRQHandler(void) __interrupt(ITC_IRQ_UART4_RX); /* UART4 RX */
166+
#endif /* (STM8AF622x) */
167+
168+
// void I2C_IRQHandler(void) __interrupt(ITC_IRQ_I2C); /* I2C */
169+
170+
#if defined(STM8S105) || defined(STM8S005) || defined (STM8AF626x)
171+
// void UART2_RX_IRQHandler(void) __interrupt(ITC_IRQ_UART2_RX); /* UART2 RX */
172+
// void UART2_TX_IRQHandler(void) __interrupt(ITC_IRQ_UART2_TX); /* UART2 TX */
173+
#endif /* (STM8S105) || (STM8AF626x) */
174+
175+
#if defined(STM8S207) || defined(STM8S007) || defined(STM8S208) || defined (STM8AF52Ax) || defined (STM8AF62Ax)
176+
// void UART3_RX_IRQHandler(void) __interrupt(ITC_IRQ_UART3_RX); /* UART3 RX */
177+
// void UART3_TX_IRQHandler(void) __interrupt(ITC_IRQ_UART3_TX); /* UART3 TX */
178+
#endif /* (STM8S207) || (STM8S208) || (STM8AF62Ax) || (STM8AF52Ax) */
179+
180+
#if defined(STM8S207) || defined(STM8S007) || defined(STM8S208) || defined (STM8AF52Ax) || defined (STM8AF62Ax)
181+
// void ADC2_IRQHandler(void) __interrupt(ITC_IRQ_ADC2); /* ADC2 */
182+
#else /* (STM8S105) || (STM8S103) || (STM8S903) || (STM8AF622x) */
183+
// void ADC1_IRQHandler(void) __interrupt(ITC_IRQ_ADC1); /* ADC1 */
184+
#endif /* (STM8S207) || (STM8S208) || (STM8AF62Ax) || (STM8AF52Ax) */
185+
186+
#if defined(STM8S903) || defined(STM8AF622x)
187+
// void TIM6_UPD_OVF_TRG_IRQHandler(void) __interrupt(ITC_IRQ_TIM6_OVFTRI); /* TIM6 UPD/OVF/TRG */
188+
#else /* (STM8S208) || (STM8S207) || (STM8S105) || (STM8S103) || (STM8AF62Ax) || (STM8AF52Ax) || (STM8AF626x) */
189+
void TIM4_UPD_OVF_IRQHandler(void) __interrupt(ITC_IRQ_TIM4_OVF); /* TIM4 UPD/OVF */
190+
#endif /* (STM8S903) || (STM8AF622x) */
191+
// void EEPROM_EEC_IRQHandler(void) __interrupt(ITC_IRQ_EEPROM_EEC); /* EEPROM ECC CORRECTION */
192+
#endif /* _SDCC_ */
193+
119194
#endif /* __STM8S_IT_H */
120195

121196

0 commit comments

Comments
 (0)