├── LICENSE
├── Makefile
├── README.md
├── device
    └── usb
    │   ├── usb.c
    │   ├── usb.h
    │   ├── usb_rx.S
    │   └── usb_tx.S
├── main.c
├── main.h
├── mcu
    ├── peripherals
    │   └── mcu_gpio.h
    ├── std_lib
    │   ├── Release_Notes.html
    │   ├── inc
    │   │   ├── stm8s.h
    │   │   ├── stm8s_adc1.h
    │   │   ├── stm8s_adc2.h
    │   │   ├── stm8s_awu.h
    │   │   ├── stm8s_beep.h
    │   │   ├── stm8s_can.h
    │   │   ├── stm8s_clk.h
    │   │   ├── stm8s_exti.h
    │   │   ├── stm8s_flash.h
    │   │   ├── stm8s_gpio.h
    │   │   ├── stm8s_i2c.h
    │   │   ├── stm8s_itc.h
    │   │   ├── stm8s_iwdg.h
    │   │   ├── stm8s_rst.h
    │   │   ├── stm8s_spi.h
    │   │   ├── stm8s_tim1.h
    │   │   ├── stm8s_tim2.h
    │   │   ├── stm8s_tim3.h
    │   │   ├── stm8s_tim4.h
    │   │   ├── stm8s_tim5.h
    │   │   ├── stm8s_tim6.h
    │   │   ├── stm8s_uart1.h
    │   │   ├── stm8s_uart2.h
    │   │   ├── stm8s_uart3.h
    │   │   └── stm8s_wwdg.h
    │   └── src
    │   │   ├── stm8s_adc1.c
    │   │   ├── stm8s_adc2.c
    │   │   ├── stm8s_awu.c
    │   │   ├── stm8s_beep.c
    │   │   ├── stm8s_can.c
    │   │   ├── stm8s_clk.c
    │   │   ├── stm8s_exti.c
    │   │   ├── stm8s_flash.c
    │   │   ├── stm8s_gpio.c
    │   │   ├── stm8s_i2c.c
    │   │   ├── stm8s_itc.c
    │   │   ├── stm8s_iwdg.c
    │   │   ├── stm8s_rst.c
    │   │   ├── stm8s_spi.c
    │   │   ├── stm8s_tim1.c
    │   │   ├── stm8s_tim2.c
    │   │   ├── stm8s_tim3.c
    │   │   ├── stm8s_tim4.c
    │   │   ├── stm8s_tim5.c
    │   │   ├── stm8s_tim6.c
    │   │   ├── stm8s_uart1.c
    │   │   ├── stm8s_uart2.c
    │   │   ├── stm8s_uart3.c
    │   │   └── stm8s_wwdg.c
    ├── stm8_interrupt_vector.c
    ├── stm8s003f3.ini
    ├── stm8s003f3.lsf
    ├── stm8s_conf.h
    ├── stm8s_it.c
    └── stm8s_it.h
├── target
    └── target.s19
└── utility
    ├── macros.c
    └── macros.h
/Makefile:
--------------------------------------------------------------------------------
 1 | #==========================================================
 2 | #   Makefile for STM8
 3 | #	Denis Zheleznyakov aka ZiB @ http://ziblog.ru
 4 | #==========================================================
 5 | 
 6 | SRC_C  = usb.c
 7 | SRC_C += main.c
 8 | SRC_C += macros.c
 9 | SRC_C += stm8_interrupt_vector.c
10 | SRC_C += stm8s_it.c
11 | SRC_C += stm8s_clk.c
12 | SRC_C += stm8s_tim1.c
13 | SRC_C += stm8s_tim2.c
14 | SRC_C += stm8s_tim4.c
15 | SRC_C += stm8s_uart1.c
16 | 
17 | SRC_S += usb_rx.S
18 | SRC_S += usb_tx.S
19 | 
20 | CROSS_PATH = D:/Tools/Cosmic/
21 | CROSS = $(CROSS_PATH)/4.3.7/
22 | 
23 | INCLUDES += -imcu
24 | INCLUDES += -imcu/peripherals
25 | INCLUDES += -imcu/startup
26 | INCLUDES += -imcu/std_lib/inc
27 | INCLUDES += -imcu/std_lib/src
28 | INCLUDES += -idevice
29 | INCLUDES += -idevice/usb
30 | INCLUDES += -iutility
31 | 
32 | VPATH += mcu
33 | VPATH += mcu/peripherals
34 | VPATH += mcu/startup
35 | VPATH += mcu/std_lib/inc
36 | VPATH += mcu/std_lib/src
37 | VPATH += device
38 | VPATH += device/usb
39 | VPATH += utility
40 | 
41 | FLAGS_C  = +debug +warn +modsl0 -pxp -pp +fast +split -l -gge -pge
42 | 
43 | all: clean
44 | 	@make -s -j job
45 | 	@echo '-----------------------------------------------------------'
46 | 	@$(CROSS)cobj -n target/target.sm8 | $(CROSS_PATH)cosmic_format 'mcu/stm8s003f3.lsf'
47 | 	@make -s mcu_program
48 | 
49 | job: target.elf
50 | 
51 | git:
52 | 	@C:/Tools/git/extensions/gitex browse .
53 | 
54 | git_commit:
55 | 	@C:/Tools/git/extensions/gitex commit .
56 | 
57 | mcu_all: all
58 | 	@make -s mcu_program
59 | 
60 | %.elf: $(SRC_C:%.c=target/%.o) $(SRC_S:%.S=target/%.o)
61 | 	@echo '-----------------------------------------------------------'
62 | 	@echo linking: $@
63 | 	@$(CROSS)clnk -l'$(CROSS)/Lib' -o'target/target.sm8' -m'target/target.map' -sa 'mcu/*.lsf'
64 | 	@$(CROSS)cvdwarf target/target.sm8
65 | 	@$(CROSS)chex -o target/target.s19 target/target.sm8
66 | 	@rm -f target/*.o
67 | 	
68 | $(SRC_C:%.c=target/%.o): target/%.o: %.c
69 | 	@$(CROSS)cxstm8 $(FLAGS_C) $(INCLUDES) -i. -i$(CROSS)/Hstm8 -cl'target' -co'target' $<
70 | 	
71 | $(SRC_S:%.S=target/%.o): target/%.o: %.S
72 | 	@$(CROSS)cxstm8 +debug +warn -l -no $(INCLUDES) -i. -i$(CROSS)/Hstm8 -cl'target' -co'target' $<
73 | 
74 | size:
75 | 	@echo '-----------------------------------------------------------'
76 | 	@$(CROSS)cobj -n target/target.sm8 | $(CROSS_PATH)cosmic_format 'mcu/stm8s003f3.lsf'
77 | 	
78 | clean:
79 | 	@echo '-----------------------------------------------------------'
80 | 	@mkdir -p target
81 | 	@rm -f target/*.*
82 | 
83 | mcu_program:
84 | 	@D:/Tools/STMicroelectronics/toolset/stvp/STVP_CmdLine.exe -BoardName=ST-LINK -Device=STM8S003F3 -Port=USB -ProgMode=SWIM -no_loop -no_log -FileProg=target/target.s19
85 | 
86 | mcu_restart:
87 | 	@D:/Tools/STMicroelectronics/toolset/stvd/gdb7.exe --quiet --command=mcu/stm8s003f3.ini
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 2014-02-STM8S-USB
2 | =================
3 | 
4 | Sowftware USB on STM8S
5 | 
--------------------------------------------------------------------------------
/device/usb/usb.c:
--------------------------------------------------------------------------------
  1 | /*
  2 |  * File: usb.c
  3 |  * Date: 07.02.2014
  4 |  * Denis Zheleznyakov aka ZiB @ http://ziblog.ru
  5 |  */
  6 | 
  7 | #include "main.h"
  8 | 
  9 | extern void usb_tx(void);
 10 | 
 11 | uint8_t usb_rx_buffer[16];
 12 | 
 13 | uint8_t * usb_tx_buffer_pointer;
 14 | 
 15 | uint8_t usb_tx_count;
 16 | uint8_t usb_rx_count;
 17 | 
 18 | enum usb_settings
 19 | {
 20 | 	USB_VENDOR_ID_LOW = 0x11, //
 21 | 	USB_VENDOR_ID_HIGH = 0x22,
 22 | 	USB_DEVICE_ID_LOW = 0x33, //
 23 | 	USB_DEVICE_ID_HIGH = 0x44,
 24 | 	USB_DEVICE_VERSION_LOW = 0x55, //
 25 | 	USB_DEVICE_VERSION_HIGH = 0x66
 26 | };
 27 | 
 28 | const uint8_t usb_device_descriptor[] = { 18, // размер дескриптора (байт)
 29 | 		1, // тип дескриптора - устройство = 1
 30 | 		0x00, 0x01, // номер спецификации USB (USB 1.1 как 0x0110 и USB 1.0 как 0x0100)
 31 | 		0xFF, // код класса назначен вендором !
 32 | 		0x00, // код подкласса
 33 | 		0, // код протокола
 34 | 		8, // максимальный размер пакета, для LS 8 байт
 35 | 		USB_VENDOR_ID_LOW, USB_VENDOR_ID_HIGH, // VID
 36 | 		USB_DEVICE_ID_LOW, USB_DEVICE_ID_HIGH,// PID
 37 | 		USB_DEVICE_VERSION_LOW, USB_DEVICE_VERSION_HIGH, // версия устройства
 38 | 		0, // индекс строки описания производителя
 39 | 		0, // индекс строки описания продукта
 40 | 		0, // индекс строки серийного номера
 41 | 		1, // кол-во конфигураций
 42 | 		};
 43 | 
 44 | const uint8_t usb_configuration_descriptor[] = { 9, // размер дескриптора (байт)
 45 | 		2, // тип дескриптора - конфигурация = 2
 46 | 		18, 0, // полная длина возвращаемых данных в байтах
 47 | 		1, // количество интерфейсов
 48 | 		1, // номер конфигурации
 49 | 		0, // индекс строки описания конфигурации
 50 | 		0x80, // аттрибуты (D7 всегда 1, D6 - питание не от USB, D5 - пробуждение)
 51 | 		50, // максимальный ток потребления в мА деленный на 2
 52 | 		};
 53 | 
 54 | const uint8_t usb_interface_descriptor[] = { 9, // размер дескриптора (байт)
 55 | 		4, // тип дескриптора - интерфейс = 4
 56 | 		1, // количество интерфейсов
 57 | 		0, // альтернативная установка (не понял для чего)
 58 | 		1, // кол-во точек используемых интерфейсом
 59 | 		0, // код класса
 60 | 		0, // код подкласса
 61 | 		0, // код протокола
 62 | 		0, // индекс строки описания интерфейса
 63 | 		};
 64 | 
 65 | const uint8_t usb_endpoint_descriptor[] = { 7, // размер дескриптора (байт)
 66 | 		5, // тип дескриптора - конечная точка = 5
 67 | 		0x81, // адрес и направление конечной точки (IN 0x81)
 68 | 		0x03, // аттрибут - тип передач прерывание
 69 | 		8, 0, // максимальный размер пакета, для LS 8 байт
 70 | 		10 // интервал опроса конечной точки в фреймах (для LS - 1 мс)
 71 | 		};
 72 | 
 73 | enum usb_events_list
 74 | {
 75 | 	USB_EVENT_NO = 0, //
 76 | 	USB_EVENT_RECEIVE_SETUP_DATA = 1, // приняты данные токена SETUP
 77 | 	USB_EVENT_READY_DATA_IN = 2, // готовы данные для передачи в ПК
 78 | 	USB_EVENT_WAIT_DATA_IN = 3, // ожидание готовности данных для передачи в ПК
 79 | 	USB_EVENT
 80 | };
 81 | 
 82 | enum usb_states_list
 83 | {
 84 | 	USB_STATE_IDLE = 0, //
 85 | 	USB_STATE_SETUP = 1,
 86 | 	USB_STATE_IN = 2,
 87 | 	USB_STATE_OUT = 3,
 88 | 	USB_STATE_DATA = 4,
 89 | 	USB_STATE_ADDRESS_CHANGE = 5
 90 | };
 91 | 
 92 | enum usb_packets_id_list
 93 | {
 94 | 	USB_PID_SETUP = 0x2D, //
 95 | 	USB_PID_DATA0 = 0xC3,
 96 | 	USB_PID_DATA1 = 0x4B,
 97 | 	USB_PID_IN = 0x69, // данные для ПК
 98 | 	USB_PID_OUT = 0xE1, // данные от ПК
 99 | 	USB_PID_ACK = 0xD2,
100 | 	USB_PID_NACK = 0x5A,
101 | 	USB_PID_STALL = 0x1E
102 | };
103 | 
104 | enum usb_request_standart_type_list
105 | {
106 | 	USB_REQUEST_TYPE_TO_DEVICE = 0x00, //
107 | 	USB_REQUEST_TYPE_TO_INTERFACE = 0x01, //
108 | 	USB_REQUEST_TYPE_TO_ENDPOINT = 0x02, //
109 | 	USB_REQUEST_TYPE_FROM_DEVICE = 0x80, //
110 | 	USB_REQUEST_TYPE_FROM_INTERFACE = 0x81, //
111 | 	USB_REQUEST_TYPE_FROM_ENDPOINT = 0x82
112 | };
113 | 
114 | enum usb_request_list
115 | {
116 | 	USB_REQUEST_GET_STATUS = 0x00, //
117 | 	USB_REQUEST_SET_ADDRESS = 0x05,
118 | 	USB_REQUEST_GET_DESCRIPTOR = 0x06,
119 | 	USB_REQUEST_SET_DESCRIPTOR = 0x07,
120 | 	USB_REQUEST_GET_CONFIGURATION = 0x08,
121 | 	USB_REQUEST_SET_CONFIGURATION = 0x09
122 | };
123 | 
124 | struct usb_type
125 | {
126 | 	volatile uint8_t state;
127 | 	volatile uint8_t event;
128 | 	volatile uint8_t device_address;
129 | 
130 | 	uint8_t endpoint_number;
131 | 	uint8_t setup_address;
132 | 	uint8_t setup_endpoint;
133 | 
134 | 	uint8_t rx_buffer[16];
135 | 	uint8_t rx_lenght;
136 | 
137 | 	uint8_t tx_buffer[16];
138 | 	uint8_t tx_lenght;
139 | 	uint8_t tx_is_all;
140 | } usb;
141 | 
142 | void usb_init(void)
143 | {
144 | 	usb.state = USB_STATE_IDLE;
145 | 	usb.event = USB_EVENT_NO;
146 | 	usb.device_address = 0;
147 | 	usb.tx_is_all = TRUE;
148 | }
149 | 
150 | void usb_send_nack(void)
151 | {
152 | 	uint8_t data[2];
153 | 
154 | 	GPIOC->ODR = 0x40;
155 | 	GPIOC->CR1 = 0xFF;
156 | 	GPIOC->CR2 = 0xFF;
157 | 	GPIOC->DDR = 0xFF;
158 | 
159 | 	data[0] = 0x80;
160 | 	data[1] = USB_PID_NACK;
161 | 
162 | 	usb_tx_count = 2;
163 | 	usb_tx_buffer_pointer = &data[0];
164 | 
165 | 	usb_tx();
166 | 
167 | 	nop();
168 | 	nop();
169 | 	nop();
170 | 	nop();
171 | 	nop();
172 | 	nop();
173 | 
174 | 	GPIOC->CR2 = 0x00;
175 | 	GPIOC->CR1 = 0x00;
176 | 	GPIOC->DDR = 0x3F;
177 | }
178 | 
179 | void usb_send_ack(void)
180 | {
181 | 	uint8_t data[2];
182 | 
183 | 	GPIOC->ODR = 0x40;
184 | 	GPIOC->CR1 = 0xFF;
185 | 	GPIOC->CR2 = 0xFF;
186 | 	GPIOC->DDR = 0xFF;
187 | 
188 | 	data[0] = 0x80;
189 | 	data[1] = USB_PID_ACK;
190 | 
191 | 	usb_tx_count = 2;
192 | 	usb_tx_buffer_pointer = &data[0];
193 | 
194 | 	usb_tx();
195 | 
196 | 	nop();
197 | 	nop();
198 | 	nop();
199 | 	nop();
200 | 	nop();
201 | 	nop();
202 | 
203 | 	GPIOC->CR2 = 0x00;
204 | 	GPIOC->CR1 = 0x00;
205 | 	GPIOC->DDR = 0x3F;
206 | }
207 | 
208 | uint8_t count = 0;
209 | 
210 | @inline void usb_send_answer(void)
211 | {
212 | 	GPIOC->ODR = 0x40;
213 | 	GPIOC->CR1 = 0xFF;
214 | 	GPIOC->CR2 = 0xFF;
215 | 	GPIOC->DDR = 0xFF;
216 | 
217 | 	usb_tx_count = usb.tx_lenght;
218 | 	usb_tx_buffer_pointer = &usb.tx_buffer[0];
219 | 
220 | 	usb_tx();
221 | 
222 | 	nop();
223 | 	nop();
224 | 	nop();
225 | 	nop();
226 | 	nop();
227 | 	nop();
228 | 
229 | 	GPIOC->CR2 = 0x00;
230 | 	GPIOC->CR1 = 0x00;
231 | 	GPIOC->DDR = 0x3F;
232 | }
233 | 
234 | void usb_rx_ok(void)
235 | {
236 | 	switch (usb_rx_buffer[1])
237 | 	{
238 | 		case (USB_PID_SETUP):
239 | 		{
240 | 			usb.state = USB_STATE_SETUP;
241 | 
242 | 			break;
243 | 		}
244 | 		case (USB_PID_OUT):
245 | 		{
246 | 			usb.state = USB_STATE_OUT;
247 | 
248 | 			break;
249 | 		}
250 | 		case (USB_PID_IN):
251 | 		{
252 | 			if (usb.event == USB_EVENT_READY_DATA_IN)
253 | 			{
254 | 				usb_send_answer();
255 | 
256 | 				usb.event = USB_EVENT_WAIT_DATA_IN;
257 | 			}
258 | 			else
259 | 			{
260 | 				usb_send_nack();
261 | 			}
262 | 
263 | 			usb.state = USB_STATE_IN;
264 | 
265 | 			break;
266 | 		}
267 | 		case (USB_PID_DATA0):
268 | 		{
269 | 			if (usb.state == USB_STATE_SETUP)
270 | 			{
271 | 				usb.rx_buffer[0] = usb_rx_buffer[0];
272 | 				usb.rx_buffer[1] = usb_rx_buffer[1];
273 | 				usb.rx_buffer[2] = usb_rx_buffer[2];
274 | 				usb.rx_buffer[3] = usb_rx_buffer[3];
275 | 				usb.rx_buffer[4] = usb_rx_buffer[4];
276 | 				usb.rx_buffer[5] = usb_rx_buffer[5];
277 | 				usb.rx_buffer[6] = usb_rx_buffer[6];
278 | 				usb.rx_buffer[7] = usb_rx_buffer[7];
279 | 				usb.rx_buffer[8] = usb_rx_buffer[8];
280 | 				usb.rx_buffer[9] = usb_rx_buffer[9];
281 | 				usb.rx_buffer[10] = usb_rx_buffer[10];
282 | 				usb.rx_buffer[11] = usb_rx_buffer[11];
283 | 				usb.rx_buffer[12] = usb_rx_buffer[12];
284 | 				usb.rx_buffer[13] = usb_rx_buffer[13];
285 | 				usb.rx_buffer[14] = usb_rx_buffer[14];
286 | 				usb.rx_buffer[15] = usb_rx_buffer[15];
287 | 				
288 | 				usb_send_ack();
289 | 
290 | 				usb.event = USB_EVENT_RECEIVE_SETUP_DATA;
291 | 			}
292 | 			else if (usb.state == USB_STATE_OUT)
293 | 			{
294 | 				usb_send_ack();
295 | 
296 | 				usb.event == USB_EVENT_NO;
297 | 			}
298 | 
299 | 			break;
300 | 		}
301 | 		case (USB_PID_DATA1):
302 | 		{
303 | 			if (usb.state == USB_STATE_OUT)
304 | 			{
305 | 				usb_send_ack();
306 | 
307 | 				usb.event == USB_EVENT_NO;
308 | 			}
309 | 
310 | 			break;
311 | 		}
312 | 		case (USB_PID_ACK):
313 | 		{
314 | 			break;
315 | 		}
316 | 		case (USB_PID_NACK):
317 | 		{
318 | 			break;
319 | 		}
320 | 		default:
321 | 		{
322 | 			usb.state = USB_STATE_IDLE;
323 | 
324 | 			break;
325 | 		}
326 | 	}
327 | }
328 | 
329 | void usb_calc_crc16(uint8_t * buffer, uint8_t lenght)
330 | {
331 | 	uint16_t crc = 0xFFFF;
332 | 	uint8_t index;
333 | 	uint8_t i;
334 | 
335 | 	for (index = 0; index < lenght; index++)
336 | 	{
337 | 		crc ^= *buffer++;
338 | 
339 | 		for (i = 8; i--;)
340 | 		{
341 | 			if ((crc & BIT(0)) != 0)
342 | 			{
343 | 				crc >>= 1;
344 | 				crc ^= 0xA001;
345 | 			}
346 | 			else
347 | 			{
348 | 				crc >>= 1;
349 | 			}
350 | 		}
351 | 	}
352 | 
353 | 	crc = ~crc;
354 | 
355 | 	*buffer++ = (uint8_t) crc;
356 | 	*buffer = (uint8_t) (crc >> 8);
357 | }
358 | 
359 | void usb_send_data(uint8_t * buffer, uint8_t lenght)
360 | {
361 | 	uint8_t data_sync = USB_PID_DATA1;
362 | 	uint8_t index;
363 | 
364 | 	while (lenght > 0)
365 | 	{
366 | 		if (lenght >= 8)
367 | 		{
368 | 			usb.tx_lenght = 12;
369 | 
370 | 			usb.tx_buffer[0] = 0x80;
371 | 			usb.tx_buffer[1] = data_sync;
372 | 
373 | 			for (index = 2; index < 10; index++)
374 | 				usb.tx_buffer[index] = *buffer++;
375 | 
376 | 			lenght -= 8;
377 | 		}
378 | 		else
379 | 		{
380 | 			usb.tx_lenght = (uint8_t) (4 + lenght);
381 | 
382 | 			usb.tx_buffer[0] = 0x80;
383 | 			usb.tx_buffer[1] = data_sync;
384 | 
385 | 			for (index = 2; index < 2 + lenght; index++)
386 | 				usb.tx_buffer[index] = *buffer++;
387 | 
388 | 			lenght = 0;
389 | 		}
390 | 
391 | 		// расчитываем контрольную сумму пакета
392 | 		usb_calc_crc16(&usb.tx_buffer[2], (uint8_t) (usb.tx_lenght - 4));
393 | 
394 | 		// обновляем пакет синхронизации
395 | 		if (data_sync == USB_PID_DATA1)
396 | 			data_sync = USB_PID_DATA0;
397 | 		else
398 | 			data_sync = USB_PID_DATA1;
399 | 
400 | 		// сообщаем о готовности данных
401 | 		usb.event = USB_EVENT_READY_DATA_IN;
402 | 
403 | 		while (usb.event == USB_EVENT_READY_DATA_IN)
404 | 		{
405 | 			if (usb.state != USB_STATE_IN)
406 | 				return;
407 | 		}
408 | 	}
409 | }
410 | 
411 | uint8_t counter_a = 0;
412 | uint8_t counter_b = 0;
413 | uint8_t counter_all = 0;
414 | 
415 | uint8_t tx_counter = 0;
416 | 
417 | void usb_process(void)
418 | {
419 | 	if (usb.event == USB_EVENT_RECEIVE_SETUP_DATA)
420 | 	{
421 | 		switch (usb.rx_buffer[2])
422 | 		{
423 | 			case (USB_REQUEST_TYPE_FROM_DEVICE):
424 | 			{
425 | 				switch (usb.rx_buffer[3])
426 | 				{
427 | 					case (USB_REQUEST_GET_DESCRIPTOR):
428 | 					{
429 | 						if (usb.rx_buffer[5] == 1)
430 | 							usb_send_data(&usb_device_descriptor[0], ARRAY_LENGHT(usb_device_descriptor));
431 | 						else if (usb.rx_buffer[5] == 2)
432 | 							usb_send_data(&usb_configuration_descriptor[0], ARRAY_LENGHT(usb_configuration_descriptor));
433 | 
434 | 						//if (usb.rx_buffer[5] == 0)
435 | 						//		usb_send_data(&usb_device_descriptor[0], ARRAY_LENGHT(usb_device_descriptor));
436 | 
437 | 						//						else if (usb.rx_buffer[5] == 2)
438 | 						//							usb_send_data(&usb_interface_descriptor[0], ARRAY_LENGHT(usb_interface_descriptor));
439 | 
440 | 						break;
441 | 					}
442 | 				}
443 | 
444 | 				break;
445 | 			}
446 | 			case (USB_REQUEST_TYPE_TO_DEVICE):
447 | 			{
448 | 				switch (usb.rx_buffer[3])
449 | 				{
450 | 					case (USB_REQUEST_SET_ADDRESS):
451 | 					{
452 | 						usb.device_address = usb.rx_buffer[4];
453 | 
454 | 						usb.tx_lenght = 4;
455 | 						usb.tx_buffer[0] = 0x80;
456 | 						usb.tx_buffer[1] = USB_PID_DATA1;
457 | 						usb.tx_buffer[2] = 0;
458 | 						usb.tx_buffer[3] = 0;
459 | 
460 | 						usb.event = USB_EVENT_READY_DATA_IN;
461 | 
462 | 						break;
463 | 					}
464 | 				}
465 | 
466 | 				break;
467 | 			}
468 | 		}
469 | 	}
470 | }
471 | 
--------------------------------------------------------------------------------
/device/usb/usb.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * File: usb.h
 3 |  * Date: 07.02.2014
 4 |  * Denis Zheleznyakov aka ZiB @ http://ziblog.ru
 5 |  */
 6 | 
 7 | #ifndef USB_H_
 8 | #define USB_H_
 9 | 
10 | extern uint8_t usb_tx_count;
11 | 
12 | extern uint8_t usb_tx_buffer[16];
13 | 
14 | void usb_init(void);
15 | void usb_process(void);
16 | 
17 | #endif /* USB_H_ */
18 | 
--------------------------------------------------------------------------------
/device/usb/usb_rx.S:
--------------------------------------------------------------------------------
  1 | 	xref	_usb_rx_count, _usb_rx_buffer, _usb_rx_ok
  2 | 
  3 | 	xdef	_usb_rx
  4 | 
  5 | L_Bit0_Begin:
  6 | 	cpl		($14,y)					; сигнал синхронизации
  7 | 	srl		($01, SP)
  8 | 	ld		a,(y)
  9 | 	jreq	L_End_Rx				; выход, если input = 0 (конец пакета)
 10 | 	xor		a, ($01, SP)
 11 | 	ld		($01, SP),a
 12 | 	nop
 13 | 
 14 | L_Bit1_Begin:
 15 | 	cpl		($14,y)					; сигнал синхронизации
 16 | 	srl		($01, SP)
 17 | 	ld		a,(y)
 18 | 	jreq	L_End_Rx				; выход, если input = 0 (конец пакета)
 19 | 	xor		a, ($01, SP)
 20 | 	ld		($01, SP),a
 21 | 	incw	x
 22 | 	nop
 23 | 
 24 | L_Bit2_Begin:
 25 | 	cpl		($14,y)					; сигнал синхронизации
 26 | 	srl		($01, SP)
 27 | 	ld		a,(y)
 28 | 	jreq	L_End_Rx				; выход, если input = 0 (конец пакета)
 29 | 	xor		a, ($01, SP)
 30 | 	ld		($01, SP),a
 31 | 	nop
 32 | 	nop
 33 | 
 34 | L_Bit3_Begin:
 35 | 	cpl		($14,y)					; сигнал синхронизации
 36 | 	srl		($01, SP)
 37 | 	ld		a,(y)
 38 | 	jreq	L_End_Rx				; выход, если input = 0 (конец пакета)
 39 | 	xor		a, ($01, SP)
 40 | 	ld		($01, SP),a
 41 | 	nop
 42 | 
 43 | L_Bit4_Begin:
 44 | 	cpl		($14,y)					; сигнал синхронизации
 45 | 	srl		($01, SP)
 46 | 	ld		a,(y)
 47 | 	jreq	L_End_Rx				; выход, если input = 0 (конец пакета)
 48 | 	xor		a, ($01, SP)
 49 | 	ld		($01, SP),a
 50 | 	nop
 51 | 
 52 | L_Bit5_Begin:
 53 | 	cpl		($14,y)					; сигнал синхронизации
 54 | 	srl		($01, SP)
 55 | 	ld		a,(y)
 56 | 	jreq	L_End_Rx				; выход, если input = 0 (конец пакета)
 57 | 	xor		a, ($01, SP)
 58 | 	ld		($01, SP),a
 59 | 	dec		($02,SP)
 60 | 	jreq	L_End_Rx
 61 | 
 62 | L_Bit6_Begin:
 63 | 	cpl		($14,y)					; сигнал синхронизации
 64 | 	srl		($01, SP)
 65 | 	ld		a,(y)
 66 | 	jreq	L_End_Rx				; выход, если input = 0 (конец пакета)
 67 | 	xor		a, ($01, SP)
 68 | 	ld		($01, SP),a
 69 | 	nop
 70 | 
 71 | L_Bit7_Begin:
 72 | 	cpl		($14,y)					; сигнал синхронизации
 73 | 	srl		($01, SP)
 74 | 	ld		a,(y)
 75 | 	jreq	L_End_Rx				; выход, если input = 0 (конец пакета)
 76 | 	xor		a, ($01, SP)
 77 | 	ld		($01, SP),a
 78 | 
 79 | 	ld		(x),a					; сохраняем принятый байт
 80 | 	rlc   	(x)
 81 | 
 82 | 	cpl		($14,y)					; сигнал синхронизации
 83 | 	srl		($01, SP)
 84 | 	ld		a,(y)
 85 | 	jreq	L_End_Rx				; выход, если input = 0 (конец пакета)
 86 | 	xor		a, ($01, SP)
 87 | 	ld		($01, SP),a
 88 | 
 89 | 	jra		L_Bit1_Begin
 90 | 
 91 | 	nop
 92 | 	nop
 93 | 	nop
 94 | 
 95 | L_End_Rx:
 96 | 
 97 | 	pop		a
 98 | 	pop		a
 99 | 	ld		_usb_rx_count,a
100 | 
101 | 	call	_usb_rx_ok
102 | 
103 | 	clr		20495
104 | 
105 | 	mov		21077,#251 				; сброс флага прерывания таймера
106 | 
107 | 	bres	21072,#0				; стоп таймер
108 | 	clr		21086					; сброс счетного регистра
109 | 	clr		21087					;
110 | 
111 | 	iret
112 | 
113 | ;
114 | ;
115 | ;
116 | 
117 | _usb_rx:
118 | 
119 | 	ldw		x, #L_Delay_Begin	; адрес начала таблицы задержек
120 | 	addw	x, 21086			; + смещение (значение таймера)
121 | 	cpw		x, #L_Delay_End		; проверка выхода за границу таблицы (защита!)
122 | 	jruge	L_Error
123 | 	jp		(x)					; переход по таблице задержек
124 | 
125 | L_Error:
126 | 
127 | 	iret ; аврийный выход
128 | 
129 | L_Delay_Begin:
130 | 	nop
131 | 	nop
132 | 	nop
133 | 	nop
134 | 	nop
135 | 	nop
136 | 	nop
137 | 	nop
138 | 	nop
139 | 	nop
140 | 	nop
141 | 	nop
142 | 	nop
143 | 	nop
144 | 	nop
145 | 	nop
146 | 	nop
147 | 	nop
148 | 	nop
149 | 	nop
150 | 	nop
151 | 	nop
152 | 	nop
153 | 	nop
154 | 	nop
155 | 	nop
156 | 	nop
157 | 	nop
158 | 	nop
159 | 	nop
160 | 	nop
161 | 	nop
162 | 	nop
163 | 	nop
164 | 
165 | L_Delay_End:
166 | 
167 | 	ldw		x, #_usb_rx_buffer		; адрес начала буфера
168 | 	ldw		y, #20491 				; адрес входного сигнала
169 | 	ld		a, #$0E					; максимальное кол-во принимаемых байт (защита!)
170 | 	push	a
171 | 	ld		a, #$80
172 | 	push	a
173 | 
174 | 	jra		L_Bit0_Begin
175 | 
--------------------------------------------------------------------------------
/device/usb/usb_tx.S:
--------------------------------------------------------------------------------
  1 | 	xref	_usb_tx_count, _usb_tx_buffer_pointer
  2 | 
  3 | 	xdef	_usb_tx
  4 | 
  5 | L_Bit0_Idle:
  6 | 	nop
  7 | 	nop
  8 | 	dec		a
  9 | 	jrne	L_Bit1_Begin
 10 | 	nop
 11 | 	nop
 12 | 	nop
 13 | 	cpl		20490
 14 | 	nop
 15 | 	nop
 16 | 	ld		a, #$06
 17 | 	jra		L_Bit1_Begin
 18 | 	nop
 19 | 	nop
 20 | 
 21 | L_Bit1_Idle:
 22 | 	nop
 23 | 	nop
 24 | 	dec		a
 25 | 	jrne	L_Bit2_Begin
 26 | 	nop
 27 | 	nop
 28 | 	nop
 29 | 	cpl		20490
 30 | 	nop
 31 | 	nop
 32 | 	ld		a, #$06
 33 | 	jra		L_Bit2_Begin
 34 | 	nop
 35 | 	nop
 36 | 
 37 | L_Bit2_Idle:
 38 | 	nop
 39 | 	dec		a
 40 | 	jrne	L_Bit3_Begin
 41 | 	nop
 42 | 	nop
 43 | 	nop
 44 | 	nop
 45 | 	cpl		20490
 46 | 	nop
 47 | 	ld		a, #$06
 48 | 	jra		L_Bit3_Begin
 49 | 	nop
 50 | 	nop
 51 | 
 52 | L_Bit3_Idle:
 53 | 	nop
 54 | 	nop
 55 | 	nop
 56 | 	dec		a
 57 | 	jrne	L_Bit4_Begin
 58 | 	nop;
 59 | 	nop
 60 | 	nop
 61 | 	cpl		20490
 62 | 	nop
 63 | 	nop
 64 | 	ld		a, #$06
 65 | 	jra		L_Bit4_Begin
 66 | 	nop
 67 | 	nop
 68 | 	;nop
 69 | 
 70 | 
 71 | L_Bit0_Begin:
 72 | 	rrc		(x)						// бит 0 -> СC.C
 73 | 	jrc		L_Bit0_Idle				// перейти, если равен CС.C = 1
 74 | 	cpl		20490					// инверсия выходных сигналов [N,Z,C=1]
 75 | 	ld		a, #$06					// если была инверсия, сбрасываем
 76 | 	nop
 77 | 	nop
 78 | 	nop
 79 | 	nop
 80 | 
 81 | L_Bit1_Begin:
 82 | 	rrc		(x)						// бит 0 -> СC.C
 83 | 	jrc		L_Bit1_Idle				// перейти, если равен CС.C = 1
 84 | 	cpl		20490					// инверсия выходных сигналов [N,Z,C=1]
 85 | 	ld		a, #$06
 86 | 	nop
 87 | 	nop
 88 | 	nop
 89 | 	nop
 90 | 
 91 | L_Bit2_Begin:
 92 | 	rrc		(x)						// бит 0 -> СC.C
 93 | 	jrc		L_Bit2_Idle				// перейти, если равен CС.C = 1
 94 | 	cpl		20490					// инверсия выходных сигналов [N,Z,C=1]
 95 | 	ld		a, #$06
 96 | 	nop
 97 | 	nop
 98 | 	nop
 99 | 	;nop
100 | 
101 | L_Bit3_Begin:
102 | 	rrc		(x)						// бит 0 -> СC.C
103 | 	jrc		L_Bit3_Idle				// перейти, если равен CС.C = 1
104 | 	nop;
105 | 	cpl		20490					// инверсия выходных сигналов [N,Z,C=1]
106 | 	ld		a, #$06
107 | 	nop
108 | 	nop
109 | 	nop
110 | 	nop
111 | 
112 | L_Bit4_Begin:
113 | 	rrc		(x)						// бит 0 -> СC.C
114 | 	jrc		L_Bit4_Idle				// перейти, если равен CС.C = 1
115 | 	cpl		20490					// инверсия выходных сигналов [N,Z,C=1]
116 | 	ld		a, #$06
117 | 	nop
118 | 	nop
119 | 	nop
120 | 	nop
121 | 
122 | L_Bit5_Begin:
123 | 	rrc		(x)						// бит 0 -> СC.C
124 | 	jrc		L_Bit5_Idle				// перейти, если равен CС.C = 1
125 | 	cpl		20490					// инверсия выходных сигналов [N,Z,C=1]
126 | 	ld		a, #$06
127 | 	nop
128 | 	nop
129 | 	nop
130 | 	nop
131 | 
132 | L_Bit6_Begin:
133 | 	rrc		(x)						// бит 0 -> СC.C
134 | 	jrc		L_Bit6_Idle				// перейти, если равен CС.C = 1
135 | 	cpl		20490					// инверсия выходных сигналов [N,Z,C=1]
136 | 	ld		a, #$06
137 | 	nop
138 | 	nop
139 | 
140 | L_Bit7_Begin:
141 | 	rrc		(x)						// бит 0 -> СC.C
142 | 	jrc		L_Bit7_Idle				// перейти, если равен CС.C = 1
143 | 	nop
144 | 	nop
145 | 	cpl		20490					// инверсия выходных сигналов [N,Z,C=1]
146 | 	ld		a, #$06
147 | 
148 | L_Check_End:
149 | 
150 | 	incw	x
151 | 	dec		_usb_tx_count
152 | 	jrne	L_Bit0_Begin
153 | 
154 | 	nop
155 | L_Tx_End:
156 | 	nop
157 | 	nop
158 | 
159 | 	clr		20490
160 | 
161 | 	ret
162 | 
163 | 	nop
164 | 	nop
165 | 	nop
166 | 	nop
167 | 
168 | ;
169 | ;
170 | ;
171 | 	nop
172 | 
173 | L_Bit4_Idle:
174 | 	nop
175 | 	nop
176 | 	dec		a
177 | 	jrne	L_Bit5_Begin
178 | 	nop
179 | 	nop
180 | 	nop
181 | 	cpl		20490
182 | 	nop
183 | 	nop
184 | 	ld		a, #$06
185 | 	jra		L_Bit5_Begin
186 | 	nop
187 | 
188 | 	nop
189 | L_Bit5_Idle:
190 | 	nop
191 | 	nop
192 | 	dec		a
193 | 	jrne	L_Bit6_Begin
194 | 	nop
195 | 	nop
196 | 	nop
197 | 	cpl		20490
198 | 	nop
199 | 	nop
200 | 	ld		a, #$06
201 | 	jra		L_Bit6_Begin
202 | 	nop
203 | 	nop
204 | 
205 | L_Bit6_Idle:
206 | 
207 | 	dec		a
208 | 	jrne	L_Bit7_Begin
209 | 	nop
210 | 	nop
211 | 	nop
212 | 	nop
213 | 	nop
214 | 	cpl		20490
215 | 	ld		a, #$06
216 | 	jra		L_Bit7_Begin
217 | 	nop
218 | 	nop
219 | 	nop
220 | 
221 | L_Bit7_Idle:
222 | 	dec		a
223 | 	jrne	L_Check_End
224 | 	dec		_usb_tx_count
225 | 	nop
226 | 	incw	x
227 | 	nop
228 | 	ld		a, #$06
229 | 	nop
230 | 	cpl		20490
231 | 	nop
232 | 	tnz		_usb_tx_count
233 | 	jrne	L_Bit0_Begin
234 | 	jra		L_Tx_End
235 | 
236 | ;
237 | ;	Точка входа
238 | ;
239 | _usb_tx:
240 | 
241 | 	ldw		x, _usb_tx_buffer_pointer
242 | 
243 | 	ld		a,#$40
244 | 	ld		20490,a
245 | 
246 | 	ld		a, #$06						; счет
247 | 
248 | 	jra		L_Bit0_Begin
249 | 
--------------------------------------------------------------------------------
/main.c:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * File: main.c
 3 |  * Date: 02.01.2013
 4 |  * Denis Zheleznyakov aka ZiB @ http://ziblog.ru
 5 |  */
 6 | 
 7 | #include "main.h"
 8 | 
 9 | volatile uint32_t timer;
10 | 
11 | @inline static void gpio_init(void)
12 | {
13 | 	// перевод всех линий на вход с подтяжкой к плюсу
14 | 	GPIOA->CR1 = 0xFF;
15 | 	GPIOB->CR1 = 0xFF;
16 | 	GPIOC->CR1 = 0xFF;
17 | 	GPIOD->CR1 = 0xFF;
18 | 	GPIOE->CR1 = 0xFF;
19 | 	GPIOF->CR1 = 0xFF;
20 | 
21 | 	// Входные линии USB
22 | 	GPIOC->CR1 = 0;
23 | 	GPIOC->CR2 = 0;
24 | 	GPIOC->DDR = 0x3F;
25 | 	GPIOC->ODR = 0;
26 | 	
27 | 	// 1,5 kOm
28 | 	GPIOA->DDR = 0x00;
29 | 	GPIOA->ODR = 0x00;
30 | 	GPIOA->CR1 = 0x00;
31 | 	GPIOA->CR2 = 0x00;
32 | }
33 | 
34 | @inline static void clock_init(void)
35 | {
36 | 	// после сброса микроконтроллер работает от встроенного HSI-генератора
37 | 	// с делителем по умолчанию 8, меняем его на 1
38 | 	CLK->CKDIVR = 0;
39 | 
40 | 	// переключаемся на внешний кварцевый резонатор
41 | 	CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
42 | }
43 | 
44 | @inline static void timers_init(void)
45 | {
46 | 	CLK->PCKENR1 |= CLK_PCKENR1_TIM1;
47 | 
48 | 	// таймер 1 - "захват" первого импульса USB посылки
49 | 	TIM1_TimeBaseInit(0, TIM1_PSCRELOADMODE_UPDATE, 1000, 0);
50 | 	// захват сигнала по линии USB D-
51 | 	TIM1_ICInit(TIM1_CHANNEL_2, TIM1_ICPOLARITY_FALLING, TIM1_ICSELECTION_DIRECTTI, TIM1_ICPSC_DIV1, 0x02);
52 | 	TIM1_SelectInputTrigger(TIM1_TS_TI2FP2);
53 | 	TIM1_SelectSlaveMode(TIM1_SLAVEMODE_TRIGGER);
54 | 	TIM1_ClearFlag(TIM1_FLAG_CC2);
55 | 	TIM1_ITConfig(TIM1_IT_CC2, ENABLE);
56 | }
57 | 
58 | void main(void)
59 | {
60 | 	disableInterrupts();
61 | 
62 | 	gpio_init();
63 | 
64 | 	clock_init();
65 | 
66 | 	timers_init();
67 | 
68 | 	enableInterrupts();
69 | 	
70 | 	// delay
71 | 	timer = 500000;
72 | 	while(timer-- > 0)
73 | 	{
74 | 	}
75 | 	
76 | 	// 1,5 kOm
77 | 	GPIOA->DDR = 0xff;
78 | 	GPIOA->ODR = 0xff;
79 | 	GPIOA->CR1 = 0xff;
80 | 	GPIOA->CR2 = 0xff;
81 | 
82 | 	while(1)
83 | 	{
84 | 		usb_process();
85 | 	}
86 | }
87 | 
--------------------------------------------------------------------------------
/main.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * File: main.h
 3 |  * Date: 02.01.2013
 4 |  * Denis Zheleznyakov aka ZiB @ http://ziblog.ru
 5 |  */
 6 | 
 7 | #ifndef MAIN_H_
 8 | #define MAIN_H_
 9 | 
10 | #include "stm8s.h"
11 | 
12 | #include "macros.h"
13 | 
14 | #include "mcu_gpio.h"
15 | 
16 | #include "usb.h"
17 | 
18 | #endif /* MAIN_H_ */
19 | 
--------------------------------------------------------------------------------
/mcu/peripherals/mcu_gpio.h:
--------------------------------------------------------------------------------
  1 | /*
  2 |  *  File:   mcu_gpio.h
  3 |  *  Date:   23.01.2011
  4 |  *  Denis Zheleznjakov @ ZiBlog.ru
  5 |  */
  6 | 
  7 | #ifndef MCU_GPIO_H_
  8 | #define MCU_GPIO_H_
  9 | 
 10 | // PIN_TEST    A, 3, HIGH, INPUT_FLOATING_WITHOUT_ITERRUPT
 11 | 
 12 | #define INPUT_FLOATING_WITHOUT_ITERRUPT     INPUT_FLOATING_WITHOUT_ITERRUPT
 13 | #define INPUT_FLOATING_WITH_ITERRUPT        INPUT_FLOATING_WITH_ITERRUPT
 14 | #define INPUT_PULL_UP_WITHOUT_ITERRUPT      INPUT_PULL_UP_WITHOUT_ITERRUPT
 15 | #define INPUT_PULL_UP_WITH_ITERRUPT         INPUT_PULL_UP_WITH_ITERRUPT
 16 | #define OUTPUT_OPEN_DRAIN_NOSPEED_LIMIT     OUTPUT_OPEN_DRAIN_NOSPEED_LIMIT
 17 | #define OUTPUT_OPEN_DRAIN_SPEED_LIMIT_10MHZ OUTPUT_OPEN_DRAIN_SPEED_LIMIT_10MHZ
 18 | #define OUTPUT_PUSH_PULL_NOSPEED_LIMIT      OUTPUT_PUSH_PULL_NOSPEED_LIMIT
 19 | #define OUTPUT_PUSH_PULL_SPEED_LIMIT_10MHZ  OUTPUT_PUSH_PULL_SPEED_LIMIT_10MHZ
 20 | 
 21 | //------------------------------------------------------------------------------
 22 | #define GPIO_PIN_CONFIGURATION_OUTPUT_PUSH_PULL_SPEED_LIMIT_10MHZ(PORT, PIN, LEVEL, MODE) \
 23 | 		{ \
 24 | 			GPIO##PORT->DDR |= (1 << PIN); \
 25 | 			GPIO##PORT->CR1 |= (1 << PIN); \
 26 | 			GPIO##PORT->CR2 |= (1 << PIN); \
 27 | 		}
 28 | 
 29 | #define GPIO_PIN_CONFIGURATION_OUTPUT_PUSH_PULL_NOSPEED_LIMIT(PORT, PIN, LEVEL, MODE) \
 30 | 		{ \
 31 | 			GPIO##PORT->DDR |= (1 << PIN); \
 32 | 			GPIO##PORT->CR1 |= (1 << PIN); \
 33 | 			GPIO##PORT->CR2 &= (uint8_t)(~(1 << PIN)); \
 34 | 		}
 35 | 
 36 | #define GPIO_PIN_CONFIGURATION_OUTPUT_OPEN_DRAIN_SPEED_LIMIT_10MHZ(PORT, PIN, LEVEL, MODE) \
 37 | 		{ \
 38 | 			GPIO##PORT->DDR |= (1 << PIN); \
 39 | 			GPIO##PORT->CR1 &= (uint8_t)(~(1 << PIN)); \
 40 | 			GPIO##PORT->CR2 |= (1 << PIN); \
 41 | 		}
 42 | 
 43 | #define GPIO_PIN_CONFIGURATION_OUTPUT_OPEN_DRAIN_NOSPEED_LIMIT(PORT, PIN, LEVEL, MODE) \
 44 | 		{ \
 45 | 			GPIO##PORT->DDR |= (1 << PIN); \
 46 | 			GPIO##PORT->CR1 &= (uint8_t)(~(1 << PIN)); \
 47 | 			GPIO##PORT->CR2 &= (uint8_t)(~(1 << PIN)); \
 48 | 		}
 49 | 
 50 | #define GPIO_PIN_CONFIGURATION_INPUT_PULL_UP_WITH_ITERRUPT(PORT, PIN, LEVEL, MODE) \
 51 | 		{ \
 52 | 			GPIO##PORT->DDR &= (uint8_t)(~(1 << PIN)); \
 53 | 			GPIO##PORT->CR1 |= (1 << PIN); \
 54 | 			GPIO##PORT->CR2 |= (1 << PIN); \
 55 | 		}
 56 | 
 57 | #define GPIO_PIN_CONFIGURATION_INPUT_PULL_UP_WITHOUT_ITERRUPT(PORT, PIN, LEVEL, MODE) \
 58 | 		{ \
 59 | 			GPIO##PORT->DDR &= (uint8_t)(~(1 << PIN)); \
 60 | 			GPIO##PORT->CR1 |= (1 << PIN); \
 61 | 			GPIO##PORT->CR2 &= (uint8_t)(~(1 << PIN)); \
 62 | 		}
 63 | 
 64 | #define GPIO_PIN_CONFIGURATION_INPUT_FLOATING_WITH_ITERRUPT(PORT, PIN, LEVEL, MODE) \
 65 | 		{ \
 66 | 			GPIO##PORT->DDR &= (uint8_t)(~(1 << PIN)); \
 67 | 			GPIO##PORT->CR1 &= (uint8_t)(~(1 << PIN)); \
 68 | 			GPIO##PORT->CR2 |= (1 << PIN); \
 69 | 		}
 70 | 
 71 | #define GPIO_PIN_CONFIGURATION_INPUT_FLOATING_WITHOUT_ITERRUPT(PORT, PIN, LEVEL, MODE) \
 72 | 		{ \
 73 | 			GPIO##PORT->DDR &= (uint8_t)(~(1 << PIN)); \
 74 | 			GPIO##PORT->CR1 &= (uint8_t)(~(1 << PIN)); \
 75 | 			GPIO##PORT->CR2 &= (uint8_t)(~(1 << PIN)); \
 76 | 		}
 77 | 
 78 | //------------------------------------------------------------------------------
 79 | #define GPIO_PIN_CONFIGURATION(PORT, PIN, LEVEL, MODE) \
 80 | 		{ \
 81 | 			GPIO_PIN_CONFIGURATION_##MODE(PORT, PIN, LEVEL, MODE); \
 82 | 		}
 83 | 
 84 | //------------------------------------------------------------------------------
 85 | #define GPIO_PIN_OFF_HIGH(PORT, PIN, LEVEL, MODE) \
 86 | 		{ GPIO##PORT->ODR &= (uint8_t)((uint8_t)(~(1 << PIN))); }
 87 | 
 88 | #define GPIO_PIN_OFF_LOW(PORT, PIN, LEVEL, MODE) \
 89 | 		{ GPIO##PORT->ODR |= (1 << PIN); }
 90 | 
 91 | #define GPIO_PIN_OFF(PORT, PIN, LEVEL, MODE) \
 92 | 		{ GPIO_PIN_OFF_##LEVEL(PORT, PIN, LEVEL, MODE) }
 93 | 
 94 | //------------------------------------------------------------------------------
 95 | #define GPIO_PIN_ON_HIGH(PORT, PIN, LEVEL, MODE) \
 96 | 		{ GPIO##PORT->ODR |= (1 << PIN); }
 97 | 
 98 | #define GPIO_PIN_ON_LOW(PORT, PIN, LEVEL, MODE) \
 99 | 		{ GPIO##PORT->ODR &= (uint8_t)(~(1 << PIN)); }
100 | 
101 | #define GPIO_PIN_ON(PORT, PIN, LEVEL, MODE) \
102 | 		{ GPIO_PIN_ON_##LEVEL(PORT, PIN, LEVEL, MODE) }
103 | 
104 | //------------------------------------------------------------------------------
105 | #define GPIO_PIN_TOGGLE(PORT, PIN, LEVEL, MODE) \
106 | 		{ GPIO##PORT->ODR ^= (uint8_t)(1 << PIN); }
107 | 
108 | //------------------------------------------------------------------------------
109 | #define GPIO_PIN_SIGNAL_HIGH(PORT, PIN, LEVEL, MODE) \
110 | 		( (GPIO##PORT->IDR & (1 << PIN)) == (1 << PIN) )
111 | 
112 | #define GPIO_PIN_SIGNAL_LOW(PORT, PIN, LEVEL, MODE) \
113 | 	( (GPIO##PORT->IDR & (1 << PIN)) != (1 << PIN) )
114 | 
115 | #define GPIO_PIN_SIGNAL(PORT, PIN, LEVEL, MODE) \
116 | 	( GPIO_PIN_SIGNAL_##LEVEL(PORT, PIN, LEVEL, MODE) )
117 | 
118 | //------------------------------------------------------------------------------
119 | #define PIN_CONFIGURATION(PIN_DESCRIPTION) GPIO_PIN_CONFIGURATION(PIN_DESCRIPTION)
120 | #define PIN_ON(PIN_DESCRIPTION) GPIO_PIN_ON(PIN_DESCRIPTION)
121 | #define PIN_OFF(PIN_DESCRIPTION) GPIO_PIN_OFF(PIN_DESCRIPTION)
122 | #define PIN_TOGGLE(PIN_DESCRIPTION) GPIO_PIN_TOGGLE(PIN_DESCRIPTION)
123 | #define PIN_SIGNAL(PIN_DESCRIPTION) GPIO_PIN_SIGNAL(PIN_DESCRIPTION)
124 | 
125 | #endif /* MCU_GPIO_H_ */
126 | 
--------------------------------------------------------------------------------
/mcu/std_lib/Release_Notes.html:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZiB/STM8S-USB/1844b1bc4d40433e264c68cd51c8f76a3d349eb6/mcu/std_lib/Release_Notes.html
--------------------------------------------------------------------------------
/mcu/std_lib/inc/stm8s_adc2.h:
--------------------------------------------------------------------------------
  1 | /**
  2 |   ******************************************************************************
  3 |   * @file    stm8s_adc2.h
  4 |   * @author  MCD Application Team
  5 |   * @version V2.1.0
  6 |   * @date    18-November-2011
  7 |   * @brief   This file contains all the prototypes/macros for the ADC2 peripheral.
  8 |   ******************************************************************************
  9 |   * @attention
 10 |   *
 11 |   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 12 |   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 13 |   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 14 |   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 15 |   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 16 |   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 17 |   *
 18 |   * 
© COPYRIGHT 2011 STMicroelectronics
 19 |   ******************************************************************************
 20 |   */
 21 | 
 22 | 
 23 | /* Define to prevent recursive inclusion -------------------------------------*/
 24 | #ifndef __STM8S_ADC2_H
 25 | #define __STM8S_ADC2_H
 26 | 
 27 | /* Includes ------------------------------------------------------------------*/
 28 | #include "stm8s.h"
 29 | 
 30 | /* Exported types ------------------------------------------------------------*/
 31 | 
 32 | /** @addtogroup ADC2_Exported_Types
 33 |   * @{
 34 |   */
 35 | 
 36 | /**
 37 |   * @brief  ADC2 clock prescaler selection
 38 |   */
 39 | 
 40 | typedef enum {
 41 |   ADC2_PRESSEL_FCPU_D2  = (uint8_t)0x00, /**< Prescaler selection fADC2 = fcpu/2 */
 42 |   ADC2_PRESSEL_FCPU_D3  = (uint8_t)0x10, /**< Prescaler selection fADC2 = fcpu/3 */
 43 |   ADC2_PRESSEL_FCPU_D4  = (uint8_t)0x20, /**< Prescaler selection fADC2 = fcpu/4 */
 44 |   ADC2_PRESSEL_FCPU_D6  = (uint8_t)0x30, /**< Prescaler selection fADC2 = fcpu/6 */
 45 |   ADC2_PRESSEL_FCPU_D8  = (uint8_t)0x40, /**< Prescaler selection fADC2 = fcpu/8 */
 46 |   ADC2_PRESSEL_FCPU_D10 = (uint8_t)0x50, /**< Prescaler selection fADC2 = fcpu/10 */
 47 |   ADC2_PRESSEL_FCPU_D12 = (uint8_t)0x60, /**< Prescaler selection fADC2 = fcpu/12 */
 48 |   ADC2_PRESSEL_FCPU_D18 = (uint8_t)0x70  /**< Prescaler selection fADC2 = fcpu/18 */
 49 | } ADC2_PresSel_TypeDef;
 50 | 
 51 | /**
 52 |   * @brief   ADC2 External conversion trigger event selection
 53 |   */
 54 | typedef enum {
 55 |   ADC2_EXTTRIG_TIM   = (uint8_t)0x00, /**< Conversion from Internal TIM TRGO event */
 56 |   ADC2_EXTTRIG_GPIO  = (uint8_t)0x01  /**< Conversion from External interrupt on ADC_ETR pin*/
 57 | } ADC2_ExtTrig_TypeDef;
 58 | 
 59 | /**
 60 |   * @brief  ADC2 data alignment
 61 |   */
 62 | typedef enum {
 63 |   ADC2_ALIGN_LEFT  = (uint8_t)0x00, /**< Data alignment left */
 64 |   ADC2_ALIGN_RIGHT = (uint8_t)0x08  /**< Data alignment right */
 65 | } ADC2_Align_TypeDef;
 66 | 
 67 | /**
 68 |   * @brief  ADC2 schmitt Trigger
 69 |   */
 70 | typedef enum {
 71 |   ADC2_SCHMITTTRIG_CHANNEL0  = (uint8_t)0x00, /**< Schmitt trigger disable on AIN0 */
 72 |   ADC2_SCHMITTTRIG_CHANNEL1  = (uint8_t)0x01, /**< Schmitt trigger disable on AIN1 */
 73 |   ADC2_SCHMITTTRIG_CHANNEL2  = (uint8_t)0x02, /**< Schmitt trigger disable on AIN2 */
 74 |   ADC2_SCHMITTTRIG_CHANNEL3  = (uint8_t)0x03, /**< Schmitt trigger disable on AIN3 */
 75 |   ADC2_SCHMITTTRIG_CHANNEL4  = (uint8_t)0x04, /**< Schmitt trigger disable on AIN4 */
 76 |   ADC2_SCHMITTTRIG_CHANNEL5  = (uint8_t)0x05, /**< Schmitt trigger disable on AIN5 */
 77 |   ADC2_SCHMITTTRIG_CHANNEL6  = (uint8_t)0x06, /**< Schmitt trigger disable on AIN6 */
 78 |   ADC2_SCHMITTTRIG_CHANNEL7  = (uint8_t)0x07, /**< Schmitt trigger disable on AIN7 */
 79 |   ADC2_SCHMITTTRIG_CHANNEL8  = (uint8_t)0x08, /**< Schmitt trigger disable on AIN8 */
 80 |   ADC2_SCHMITTTRIG_CHANNEL9  = (uint8_t)0x09, /**< Schmitt trigger disable on AIN9 */
 81 |   ADC2_SCHMITTTRIG_CHANNEL10 = (uint8_t)0x0A, /**< Schmitt trigger disable on AIN10 */
 82 |   ADC2_SCHMITTTRIG_CHANNEL11 = (uint8_t)0x0B, /**< Schmitt trigger disable on AIN11 */
 83 |   ADC2_SCHMITTTRIG_CHANNEL12 = (uint8_t)0x0C, /**< Schmitt trigger disable on AIN12 */
 84 |   ADC2_SCHMITTTRIG_CHANNEL13 = (uint8_t)0x0D, /**< Schmitt trigger disable on AIN13 */
 85 |   ADC2_SCHMITTTRIG_CHANNEL14 = (uint8_t)0x0E, /**< Schmitt trigger disable on AIN14 */
 86 |   ADC2_SCHMITTTRIG_CHANNEL15 = (uint8_t)0x0F, /**< Schmitt trigger disable on AIN15 */
 87 |   ADC2_SCHMITTTRIG_ALL       = (uint8_t)0x1F /**< Schmitt trigger disable on all channels */
 88 | 
 89 | } ADC2_SchmittTrigg_TypeDef;
 90 | 
 91 | /**
 92 |   * @brief  ADC2 conversion mode selection
 93 |   */
 94 | 
 95 | typedef enum {
 96 |   ADC2_CONVERSIONMODE_SINGLE     = (uint8_t)0x00, /**< Single conversion mode */
 97 |   ADC2_CONVERSIONMODE_CONTINUOUS = (uint8_t)0x01  /**< Continuous conversion mode */
 98 | } ADC2_ConvMode_TypeDef;
 99 | 
100 | /**
101 |   * @brief  ADC2 analog channel selection
102 |   */
103 | 
104 | typedef enum {
105 |   ADC2_CHANNEL_0  = (uint8_t)0x00, /**< Analog channel 0 */
106 |   ADC2_CHANNEL_1  = (uint8_t)0x01, /**< Analog channel 1 */
107 |   ADC2_CHANNEL_2  = (uint8_t)0x02, /**< Analog channel 2 */
108 |   ADC2_CHANNEL_3  = (uint8_t)0x03, /**< Analog channel 3 */
109 |   ADC2_CHANNEL_4  = (uint8_t)0x04, /**< Analog channel 4 */
110 |   ADC2_CHANNEL_5  = (uint8_t)0x05, /**< Analog channel 5 */
111 |   ADC2_CHANNEL_6  = (uint8_t)0x06, /**< Analog channel 6 */
112 |   ADC2_CHANNEL_7  = (uint8_t)0x07, /**< Analog channel 7 */
113 |   ADC2_CHANNEL_8  = (uint8_t)0x08, /**< Analog channel 8 */
114 |   ADC2_CHANNEL_9  = (uint8_t)0x09, /**< Analog channel 9 */
115 |   ADC2_CHANNEL_10 = (uint8_t)0x0A, /**< Analog channel 10 */
116 |   ADC2_CHANNEL_11 = (uint8_t)0x0B, /**< Analog channel 11 */
117 |   ADC2_CHANNEL_12 = (uint8_t)0x0C, /**< Analog channel 12 */
118 |   ADC2_CHANNEL_13 = (uint8_t)0x0D, /**< Analog channel 13 */
119 |   ADC2_CHANNEL_14 = (uint8_t)0x0E, /**< Analog channel 14 */
120 |   ADC2_CHANNEL_15 = (uint8_t)0x0F  /**< Analog channel 15 */
121 | } ADC2_Channel_TypeDef;
122 | 
123 | /**
124 |   * @}
125 |   */
126 | 
127 | /* Exported constants --------------------------------------------------------*/
128 | 
129 | /* Exported macros ------------------------------------------------------------*/
130 | 
131 | /* Private macros ------------------------------------------------------------*/
132 | 
133 | /** @addtogroup ADC2_Private_Macros
134 |   * @brief  Macros used by the assert function to check the different functions parameters.
135 |   * @{
136 |   */
137 | 
138 | /**
139 |   * @brief  Macro used by the assert function to check the different prescaler's values.
140 |   */
141 | #define IS_ADC2_PRESSEL_OK(PRESCALER) (((PRESCALER) == ADC2_PRESSEL_FCPU_D2) || \
142 |                                       ((PRESCALER) == ADC2_PRESSEL_FCPU_D3) || \
143 |                                       ((PRESCALER) == ADC2_PRESSEL_FCPU_D4) || \
144 |                                       ((PRESCALER) == ADC2_PRESSEL_FCPU_D6) || \
145 |                                       ((PRESCALER) == ADC2_PRESSEL_FCPU_D8) || \
146 |                                       ((PRESCALER) == ADC2_PRESSEL_FCPU_D10) || \
147 |                                       ((PRESCALER) == ADC2_PRESSEL_FCPU_D12) || \
148 |                                       ((PRESCALER) == ADC2_PRESSEL_FCPU_D18))
149 | 
150 | /**
151 |   * @brief  Macro used by the assert function to check the different external trigger values.
152 |   */
153 | #define IS_ADC2_EXTTRIG_OK(EXTRIG) (((EXTRIG) == ADC2_EXTTRIG_TIM) || \
154 | 								   ((EXTRIG) == ADC2_EXTTRIG_GPIO))
155 | 
156 | /**
157 |   * @brief  Macro used by the assert function to check the different alignement modes.
158 |   */
159 | #define IS_ADC2_ALIGN_OK(ALIGN) (((ALIGN) == ADC2_ALIGN_LEFT) || \
160 |                                 ((ALIGN) == ADC2_ALIGN_RIGHT))
161 | 
162 | 
163 | /**
164 |   * @brief  Macro used by the assert function to check the different schmitt trigger values.
165 |   */
166 | #define IS_ADC2_SCHMITTTRIG_OK(SCHMITTTRIG) (((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL0) || \
167 |     ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL1) || \
168 |     ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL2) || \
169 |     ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL3) || \
170 |     ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL4) || \
171 |     ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL5) || \
172 |     ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL6) || \
173 |     ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL7) || \
174 |     ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL8) || \
175 |     ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL9) || \
176 |     ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL10) || \
177 |     ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL11) || \
178 |     ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL12) || \
179 |     ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL13) || \
180 |     ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL14) || \
181 |     ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL15) || \
182 |     ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_ALL))
183 | 
184 | /**
185 |   * @brief  Macro used by the assert function to check the different conversion modes.
186 |   */
187 | #define IS_ADC2_CONVERSIONMODE_OK(MODE) (((MODE) == ADC2_CONVERSIONMODE_SINGLE) || \
188 |                                         ((MODE) == ADC2_CONVERSIONMODE_CONTINUOUS))
189 | 
190 | /**
191 |   * @brief  Macro used by the assert function to check the different channels values.
192 |   */
193 | #define IS_ADC2_CHANNEL_OK(CHANNEL) (((CHANNEL) == ADC2_CHANNEL_0) || \
194 |                                     ((CHANNEL) == ADC2_CHANNEL_1) || \
195 |                                     ((CHANNEL) == ADC2_CHANNEL_2) || \
196 |                                     ((CHANNEL) == ADC2_CHANNEL_3) || \
197 |                                     ((CHANNEL) == ADC2_CHANNEL_4) || \
198 |                                     ((CHANNEL) == ADC2_CHANNEL_5) || \
199 |                                     ((CHANNEL) == ADC2_CHANNEL_6) || \
200 |                                     ((CHANNEL) == ADC2_CHANNEL_7) || \
201 |                                     ((CHANNEL) == ADC2_CHANNEL_8) || \
202 |                                     ((CHANNEL) == ADC2_CHANNEL_9) || \
203 |                                     ((CHANNEL) == ADC2_CHANNEL_10) || \
204 |                                     ((CHANNEL) == ADC2_CHANNEL_11) || \
205 |                                     ((CHANNEL) == ADC2_CHANNEL_12) || \
206 |                                     ((CHANNEL) == ADC2_CHANNEL_13) || \
207 |                                     ((CHANNEL) == ADC2_CHANNEL_14) || \
208 |                                     ((CHANNEL) == ADC2_CHANNEL_15))
209 | 
210 | /**
211 |   * @}
212 |   */
213 | 
214 | /* Exported functions ------------------------------------------------------- */
215 | 
216 | /** @addtogroup ADC2_Exported_Functions
217 |   * @{
218 |   */
219 | void ADC2_DeInit(void);
220 | void ADC2_Init(ADC2_ConvMode_TypeDef ADC2_ConversionMode, 
221 |                ADC2_Channel_TypeDef ADC2_Channel, 
222 |                ADC2_PresSel_TypeDef ADC2_PrescalerSelection, 
223 |                ADC2_ExtTrig_TypeDef ADC2_ExtTrigger, 
224 |                FunctionalState ADC2_ExtTriggerState, 
225 |                ADC2_Align_TypeDef ADC2_Align, 
226 |                ADC2_SchmittTrigg_TypeDef ADC2_SchmittTriggerChannel, 
227 |                FunctionalState ADC2_SchmittTriggerState);
228 | void ADC2_Cmd(FunctionalState NewState);
229 | void ADC2_ITConfig(FunctionalState NewState);
230 | void ADC2_PrescalerConfig(ADC2_PresSel_TypeDef ADC2_Prescaler);
231 | void ADC2_SchmittTriggerConfig(ADC2_SchmittTrigg_TypeDef ADC2_SchmittTriggerChannel, 
232 |                               FunctionalState NewState);
233 | void ADC2_ConversionConfig(ADC2_ConvMode_TypeDef ADC2_ConversionMode, 
234 |                            ADC2_Channel_TypeDef ADC2_Channel, 
235 |                            ADC2_Align_TypeDef ADC2_Align);
236 | void ADC2_ExternalTriggerConfig(ADC2_ExtTrig_TypeDef ADC2_ExtTrigger, FunctionalState NewState);
237 | void ADC2_StartConversion(void);
238 | uint16_t ADC2_GetConversionValue(void);
239 | FlagStatus ADC2_GetFlagStatus(void);
240 | void ADC2_ClearFlag(void);
241 | ITStatus ADC2_GetITStatus(void);
242 | void ADC2_ClearITPendingBit(void);
243 | /**
244 |   * @}
245 |   */
246 | 
247 | #endif /* __STM8S_ADC2_H */
248 | 
249 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
250 | 
--------------------------------------------------------------------------------
/mcu/std_lib/inc/stm8s_awu.h:
--------------------------------------------------------------------------------
  1 | /**
  2 |   ******************************************************************************
  3 |   * @file    stm8s_awu.h
  4 |   * @author  MCD Application Team
  5 |   * @version V2.1.0
  6 |   * @date    18-November-2011
  7 |   * @brief   This file contains all functions prototype and macros for the AWU peripheral.
  8 |   ******************************************************************************
  9 |   * @attention
 10 |   *
 11 |   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 12 |   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 13 |   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 14 |   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 15 |   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 16 |   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 17 |   *
 18 |   * © COPYRIGHT 2011 STMicroelectronics
 19 |   ******************************************************************************
 20 |   */
 21 | 
 22 | /* Define to prevent recursive inclusion -------------------------------------*/
 23 | #ifndef __STM8S_AWU_H
 24 | #define __STM8S_AWU_H
 25 | 
 26 | /* Includes ------------------------------------------------------------------*/
 27 | #include "stm8s.h"
 28 | 
 29 | /* Exported types ------------------------------------------------------------*/
 30 | 
 31 | /** @addtogroup AWU_Exported_Types
 32 |   * @{
 33 |   */
 34 | 
 35 | /**
 36 |   * @brief  AWU TimeBase selection
 37 |   */
 38 | 
 39 | typedef enum
 40 | {
 41 |   AWU_TIMEBASE_NO_IT  = (uint8_t)0,    /*!< No AWU interrupt selected */
 42 |   AWU_TIMEBASE_250US  = (uint8_t)1,    /*!< AWU Timebase equals 0.25 ms */
 43 |   AWU_TIMEBASE_500US  = (uint8_t)2,    /*!< AWU Timebase equals 0.5 ms */
 44 |   AWU_TIMEBASE_1MS    = (uint8_t)3,    /*!< AWU Timebase equals 1 ms */
 45 |   AWU_TIMEBASE_2MS    = (uint8_t)4,    /*!< AWU Timebase equals 2 ms */
 46 |   AWU_TIMEBASE_4MS    = (uint8_t)5,    /*!< AWU Timebase equals 4 ms */
 47 |   AWU_TIMEBASE_8MS    = (uint8_t)6,    /*!< AWU Timebase equals 8 ms */
 48 |   AWU_TIMEBASE_16MS   = (uint8_t)7,    /*!< AWU Timebase equals 16 ms */
 49 |   AWU_TIMEBASE_32MS   = (uint8_t)8,    /*!< AWU Timebase equals 32 ms */
 50 |   AWU_TIMEBASE_64MS   = (uint8_t)9,    /*!< AWU Timebase equals 64 ms */
 51 |   AWU_TIMEBASE_128MS  = (uint8_t)10,   /*!< AWU Timebase equals 128 ms */
 52 |   AWU_TIMEBASE_256MS  = (uint8_t)11,   /*!< AWU Timebase equals 256 ms */
 53 |   AWU_TIMEBASE_512MS  = (uint8_t)12,   /*!< AWU Timebase equals 512 ms */
 54 |   AWU_TIMEBASE_1S     = (uint8_t)13,   /*!< AWU Timebase equals 1 s */
 55 |   AWU_TIMEBASE_2S     = (uint8_t)14,   /*!< AWU Timebase equals 2 s */
 56 |   AWU_TIMEBASE_12S    = (uint8_t)15,   /*!< AWU Timebase equals 12 s */
 57 |   AWU_TIMEBASE_30S    = (uint8_t)16    /*!< AWU Timebase equals 30 s */
 58 | } AWU_Timebase_TypeDef;
 59 | 
 60 | /**
 61 |   * @}
 62 |   */
 63 | 
 64 | /* Exported constants --------------------------------------------------------*/
 65 | 
 66 | /** @addtogroup AWU_Exported_Constants
 67 |   * @{
 68 |   */
 69 | 
 70 | #define LSI_FREQUENCY_MIN ((uint32_t)110000) /*!< LSI minimum value in Hertz */
 71 | #define LSI_FREQUENCY_MAX ((uint32_t)150000) /*!< LSI maximum value in Hertz */
 72 | 
 73 | /**
 74 |   * @}
 75 |   */
 76 | 
 77 | /* Exported macros ------------------------------------------------------------*/
 78 | 
 79 | /* Private macros ------------------------------------------------------------*/
 80 | 
 81 | /** @addtogroup AWU_Private_Macros
 82 |   * @{
 83 |   */
 84 | 
 85 | /**
 86 |   * @brief  Macro used by the assert function to check the different functions parameters.
 87 |   */
 88 | 
 89 | /**
 90 |   * @brief   Macro used by the assert function to check the AWU timebases
 91 |   */
 92 | #define IS_AWU_TIMEBASE_OK(TB) \
 93 |   (((TB) == AWU_TIMEBASE_NO_IT) || \
 94 |    ((TB) == AWU_TIMEBASE_250US) || \
 95 |    ((TB) == AWU_TIMEBASE_500US) || \
 96 |    ((TB) == AWU_TIMEBASE_1MS)   || \
 97 |    ((TB) == AWU_TIMEBASE_2MS)   || \
 98 |    ((TB) == AWU_TIMEBASE_4MS)   || \
 99 |    ((TB) == AWU_TIMEBASE_8MS)   || \
100 |    ((TB) == AWU_TIMEBASE_16MS)  || \
101 |    ((TB) == AWU_TIMEBASE_32MS)  || \
102 |    ((TB) == AWU_TIMEBASE_64MS)  || \
103 |    ((TB) == AWU_TIMEBASE_128MS) || \
104 |    ((TB) == AWU_TIMEBASE_256MS) || \
105 |    ((TB) == AWU_TIMEBASE_512MS) || \
106 |    ((TB) == AWU_TIMEBASE_1S)    || \
107 |    ((TB) == AWU_TIMEBASE_2S)    || \
108 |    ((TB) == AWU_TIMEBASE_12S)   || \
109 |    ((TB) == AWU_TIMEBASE_30S))
110 | 
111 | /**
112 |   * @brief    Macro used by the assert function to check the LSI frequency (in Hz)
113 |   */
114 | #define IS_LSI_FREQUENCY_OK(FREQ) \
115 |   (((FREQ) >= LSI_FREQUENCY_MIN) && \
116 |    ((FREQ) <= LSI_FREQUENCY_MAX))
117 | 
118 | /**
119 |   * @}
120 |   */
121 | 
122 | /* Exported functions ------------------------------------------------------- */
123 | 
124 | /** @addtogroup AWU_Exported_Functions
125 |   * @{
126 |   */
127 | void AWU_DeInit(void);
128 | void AWU_Init(AWU_Timebase_TypeDef AWU_TimeBase);
129 | void AWU_Cmd(FunctionalState NewState);
130 | void AWU_LSICalibrationConfig(uint32_t LSIFreqHz);
131 | void AWU_IdleModeEnable(void);
132 | FlagStatus AWU_GetFlagStatus(void);
133 | 
134 | /**
135 |   * @}
136 |   */
137 | 
138 | #endif /* __STM8S_AWU_H */
139 | 
140 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
141 | 
--------------------------------------------------------------------------------
/mcu/std_lib/inc/stm8s_beep.h:
--------------------------------------------------------------------------------
  1 | /**
  2 |   ******************************************************************************
  3 |   * @file    stm8s_beep.h
  4 |   * @author  MCD Application Team
  5 |   * @version V2.1.0
  6 |   * @date    18-November-2011
  7 |   * @brief   This file contains all functions prototype and macros for the BEEP peripheral.
  8 |   ******************************************************************************
  9 |   * @attention
 10 |   *
 11 |   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 12 |   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 13 |   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 14 |   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 15 |   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 16 |   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 17 |   *
 18 |   * © COPYRIGHT 2011 STMicroelectronics
 19 |   ******************************************************************************
 20 |   */
 21 | 
 22 | 
 23 | /* Define to prevent recursive inclusion -------------------------------------*/
 24 | #ifndef __STM8S_BEEP_H
 25 | #define __STM8S_BEEP_H
 26 | 
 27 | /* Includes ------------------------------------------------------------------*/
 28 | #include "stm8s.h"
 29 | 
 30 | /* Exported types ------------------------------------------------------------*/
 31 | 
 32 | /** @addtogroup BEEP_Exported_Types
 33 |   * @{
 34 |   */
 35 | 
 36 | /**
 37 |   * @brief  BEEP Frequency selection
 38 |   */
 39 | typedef enum {
 40 |   BEEP_FREQUENCY_1KHZ = (uint8_t)0x00,  /*!< Beep signal output frequency equals to 1 KHz */
 41 |   BEEP_FREQUENCY_2KHZ = (uint8_t)0x40,  /*!< Beep signal output frequency equals to 2 KHz */
 42 |   BEEP_FREQUENCY_4KHZ = (uint8_t)0x80   /*!< Beep signal output frequency equals to 4 KHz */
 43 | } BEEP_Frequency_TypeDef;
 44 | 
 45 | /**
 46 |   * @}
 47 |   */
 48 | 
 49 | /* Exported constants --------------------------------------------------------*/
 50 | 
 51 | /** @addtogroup BEEP_Exported_Constants
 52 |   * @{
 53 |   */
 54 | 
 55 | #define BEEP_CALIBRATION_DEFAULT ((uint8_t)0x0B) /*!< Default value when calibration is not done */
 56 | 
 57 | #define LSI_FREQUENCY_MIN ((uint32_t)110000) /*!< LSI minimum value in Hertz */
 58 | #define LSI_FREQUENCY_MAX ((uint32_t)150000) /*!< LSI maximum value in Hertz */
 59 | 
 60 | /**
 61 |   * @}
 62 |   */
 63 | 
 64 | /* Exported macros -----------------------------------------------------------*/
 65 | /* Private macros ------------------------------------------------------------*/
 66 | 
 67 | /** @addtogroup BEEP_Private_Macros
 68 |   * @{
 69 |   */
 70 | 
 71 | /**
 72 |   * @brief  Macro used by the assert function to check the different functions parameters.
 73 |   */
 74 | 
 75 | /**
 76 |   * @brief  Macro used by the assert function to check the BEEP frequencies.
 77 |   */
 78 | #define IS_BEEP_FREQUENCY_OK(FREQ) \
 79 |   (((FREQ) == BEEP_FREQUENCY_1KHZ) || \
 80 |    ((FREQ) == BEEP_FREQUENCY_2KHZ) || \
 81 |    ((FREQ) == BEEP_FREQUENCY_4KHZ))
 82 | 
 83 | /**
 84 |   * @brief   Macro used by the assert function to check the LSI frequency (in Hz).
 85 |   */
 86 | #define IS_LSI_FREQUENCY_OK(FREQ) \
 87 |   (((FREQ) >= LSI_FREQUENCY_MIN) && \
 88 |    ((FREQ) <= LSI_FREQUENCY_MAX))
 89 | 
 90 | /**
 91 |   * @}
 92 |   */
 93 | 
 94 | /* Exported functions ------------------------------------------------------- */
 95 | 
 96 | /** @addtogroup BEEP_Exported_Functions
 97 |   * @{
 98 |   */
 99 | 
100 | void BEEP_DeInit(void);
101 | void BEEP_Init(BEEP_Frequency_TypeDef BEEP_Frequency);
102 | void BEEP_Cmd(FunctionalState NewState);
103 | void BEEP_LSICalibrationConfig(uint32_t LSIFreqHz);
104 | 
105 | 
106 | /**
107 |   * @}
108 |   */
109 | 
110 | #endif /* __STM8S_BEEP_H */
111 | 
112 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
113 | 
--------------------------------------------------------------------------------
/mcu/std_lib/inc/stm8s_exti.h:
--------------------------------------------------------------------------------
  1 | /**
  2 |   ******************************************************************************
  3 |   * @file    stm8s_exti.h
  4 |   * @author  MCD Application Team
  5 |   * @version V2.1.0
  6 |   * @date    18-November-2011
  7 |   * @brief   This file contains all functions prototype and macros for the EXTI peripheral.
  8 |   ******************************************************************************
  9 |   * @attention
 10 |   *
 11 |   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 12 |   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 13 |   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 14 |   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 15 |   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 16 |   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 17 |   *
 18 |   * © COPYRIGHT 2011 STMicroelectronics
 19 |   ******************************************************************************
 20 |   */
 21 | 
 22 | /* Define to prevent recursive inclusion -------------------------------------*/
 23 | #ifndef __STM8S_EXTI_H__
 24 | #define __STM8S_EXTI_H__
 25 | 
 26 | /* Includes ------------------------------------------------------------------*/
 27 | #include "stm8s.h"
 28 | 
 29 | /* Exported types ------------------------------------------------------------*/
 30 | 
 31 | /** @addtogroup EXTI_Exported_Types
 32 |   * @{
 33 |   */
 34 | 
 35 | /**
 36 |   * @brief  EXTI Sensitivity values for PORTA to PORTE
 37 |   */
 38 | typedef enum {
 39 |   EXTI_SENSITIVITY_FALL_LOW  = (uint8_t)0x00, /*!< Interrupt on Falling edge and Low level */
 40 |   EXTI_SENSITIVITY_RISE_ONLY = (uint8_t)0x01, /*!< Interrupt on Rising edge only */
 41 |   EXTI_SENSITIVITY_FALL_ONLY = (uint8_t)0x02, /*!< Interrupt on Falling edge only */
 42 |   EXTI_SENSITIVITY_RISE_FALL = (uint8_t)0x03  /*!< Interrupt on Rising and Falling edges */
 43 | } EXTI_Sensitivity_TypeDef;
 44 | 
 45 | /**
 46 |   * @brief  EXTI Sensitivity values for TLI
 47 |   */
 48 | typedef enum {
 49 |   EXTI_TLISENSITIVITY_FALL_ONLY = (uint8_t)0x00, /*!< Top Level Interrupt on Falling edge only */
 50 |   EXTI_TLISENSITIVITY_RISE_ONLY = (uint8_t)0x04  /*!< Top Level Interrupt on Rising edge only */
 51 | } EXTI_TLISensitivity_TypeDef;
 52 | 
 53 | /**
 54 |   * @brief  EXTI PortNum possible values
 55 |   */
 56 | typedef enum {
 57 |   EXTI_PORT_GPIOA = (uint8_t)0x00, /*!< GPIO Port A */
 58 |   EXTI_PORT_GPIOB = (uint8_t)0x01, /*!< GPIO Port B */
 59 |   EXTI_PORT_GPIOC = (uint8_t)0x02, /*!< GPIO Port C */
 60 |   EXTI_PORT_GPIOD = (uint8_t)0x03, /*!< GPIO Port D */
 61 |   EXTI_PORT_GPIOE = (uint8_t)0x04  /*!< GPIO Port E */
 62 | } EXTI_Port_TypeDef;
 63 | 
 64 | /**
 65 |   * @}
 66 |   */
 67 | 
 68 | /* Private macros ------------------------------------------------------------*/
 69 | 
 70 | /** @addtogroup EXTI_Private_Macros
 71 |   * @{
 72 |   */
 73 | 
 74 | /**
 75 |   * @brief  Macro used by the assert function in order to check the different sensitivity values for PORTA to PORTE.
 76 |   */
 77 | #define IS_EXTI_SENSITIVITY_OK(SensitivityValue) \
 78 |   (((SensitivityValue) == EXTI_SENSITIVITY_FALL_LOW) || \
 79 |    ((SensitivityValue) == EXTI_SENSITIVITY_RISE_ONLY) || \
 80 |    ((SensitivityValue) == EXTI_SENSITIVITY_FALL_ONLY) || \
 81 |    ((SensitivityValue) == EXTI_SENSITIVITY_RISE_FALL))
 82 | 
 83 | /**
 84 |   * @brief  Macro used by the assert function in order to check the different sensitivity values for TLI.
 85 |   */
 86 | #define IS_EXTI_TLISENSITIVITY_OK(SensitivityValue) \
 87 |   (((SensitivityValue) == EXTI_TLISENSITIVITY_FALL_ONLY) || \
 88 |    ((SensitivityValue) == EXTI_TLISENSITIVITY_RISE_ONLY))
 89 | 
 90 | /**
 91 |   * @brief  Macro used by the assert function in order to check the different Port values
 92 |   */
 93 | #define IS_EXTI_PORT_OK(PORT) \
 94 |   (((PORT) == EXTI_PORT_GPIOA) ||\
 95 |    ((PORT) == EXTI_PORT_GPIOB) ||\
 96 |    ((PORT) == EXTI_PORT_GPIOC) ||\
 97 |    ((PORT) == EXTI_PORT_GPIOD) ||\
 98 |    ((PORT) == EXTI_PORT_GPIOE))
 99 | 
100 | /**
101 |   * @brief  Macro used by the assert function in order to check the different values of the EXTI PinMask
102 |   */
103 | #define IS_EXTI_PINMASK_OK(PinMask) ((((PinMask) & (uint8_t)0x00) == (uint8_t)0x00) && ((PinMask) != (uint8_t)0x00))
104 | 
105 | /**
106 |   * @}
107 |   */
108 | 
109 | /* Exported functions ------------------------------------------------------- */
110 | 
111 | /** @addtogroup EXTI_Exported_Functions
112 |   * @{
113 |   */
114 | 
115 | void EXTI_DeInit(void);
116 | void EXTI_SetExtIntSensitivity(EXTI_Port_TypeDef Port, EXTI_Sensitivity_TypeDef SensitivityValue);
117 | void EXTI_SetTLISensitivity(EXTI_TLISensitivity_TypeDef SensitivityValue);
118 | EXTI_Sensitivity_TypeDef EXTI_GetExtIntSensitivity(EXTI_Port_TypeDef Port);
119 | EXTI_TLISensitivity_TypeDef EXTI_GetTLISensitivity(void);
120 | 
121 | /**
122 |   * @}
123 |   */
124 | 
125 | #endif /* __STM8S_EXTI_H__ */
126 | 
127 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
128 | 
--------------------------------------------------------------------------------
/mcu/std_lib/inc/stm8s_flash.h:
--------------------------------------------------------------------------------
  1 | /**
  2 |   ******************************************************************************
  3 |   * @file    stm8s_flash.h
  4 |   * @author  MCD Application Team
  5 |   * @version V2.1.0
  6 |   * @date    18-November-2011
  7 |   * @brief   This file contains all functions prototype and macros for the FLASH peripheral.
  8 |   ******************************************************************************
  9 |   * @attention
 10 |   *
 11 |   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 12 |   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 13 |   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 14 |   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 15 |   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 16 |   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 17 |   *
 18 |   * © COPYRIGHT 2011 STMicroelectronics
 19 |   ******************************************************************************
 20 |   */
 21 | 
 22 | /* Define to prevent recursive inclusion -------------------------------------*/
 23 | #ifndef __STM8S_FLASH_H
 24 | #define __STM8S_FLASH_H
 25 | 
 26 | /* Includes ------------------------------------------------------------------*/
 27 | #include "stm8s.h"
 28 | 
 29 | /* Exported constants --------------------------------------------------------*/
 30 | 
 31 | /** @addtogroup FLASH_Exported_Constants
 32 |   * @{
 33 |   */
 34 | 
 35 | #define FLASH_PROG_START_PHYSICAL_ADDRESS ((uint32_t)0x008000) /*!< Program memory: start address */
 36 | 
 37 | #if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined (STM8AF52Ax) || defined (STM8AF62Ax)
 38 |  #define FLASH_PROG_END_PHYSICAL_ADDRESS   ((uint32_t)0x027FFF) /*!< Program memory: end address */
 39 |  #define FLASH_PROG_BLOCKS_NUMBER          ((uint16_t)1024)     /*!< Program memory: total number of blocks */
 40 |  #define FLASH_DATA_START_PHYSICAL_ADDRESS ((uint32_t)0x004000) /*!< Data EEPROM memory: start address */
 41 |  #define FLASH_DATA_END_PHYSICAL_ADDRESS   ((uint32_t)0x0047FF) /*!< Data EEPROM memory: end address */
 42 |  #define FLASH_DATA_BLOCKS_NUMBER          ((uint16_t)16)       /*!< Data EEPROM memory: total number of blocks */
 43 |  #define FLASH_BLOCK_SIZE                  ((uint8_t)128)       /*!< Number of bytes in a block (common for Program and Data memories) */
 44 | #endif /* STM8S208, STM8S207, STM8S007, STM8AF52Ax, STM8AF62Ax */
 45 | 
 46 | #if defined(STM8S105) || defined(STM8S005) || defined(STM8AF626x)
 47 |  #define FLASH_PROG_END_PHYSICAL_ADDRESS   ((uint32_t)0xFFFF)   /*!< Program memory: end address */
 48 |  #define FLASH_PROG_BLOCKS_NUMBER          ((uint16_t)256)      /*!< Program memory: total number of blocks */
 49 |  #define FLASH_DATA_START_PHYSICAL_ADDRESS ((uint32_t)0x004000) /*!< Data EEPROM memory: start address */
 50 |  #define FLASH_DATA_END_PHYSICAL_ADDRESS   ((uint32_t)0x0043FF) /*!< Data EEPROM memory: end address */
 51 |  #define FLASH_DATA_BLOCKS_NUMBER          ((uint16_t)8)        /*!< Data EEPROM memory: total number of blocks */
 52 |  #define FLASH_BLOCK_SIZE                  ((uint8_t)128)       /*!< Number of bytes in a block (common for Program and Data memories) */
 53 | #endif /* STM8S105 or STM8AF626x */
 54 | 
 55 | #if defined(STM8S103) || defined(STM8S003) ||  defined(STM8S903)
 56 |  #define FLASH_PROG_END_PHYSICAL_ADDRESS   ((uint32_t)0x9FFF)   /*!< Program memory: end address */
 57 |  #define FLASH_PROG_BLOCKS_NUMBER          ((uint16_t)128)      /*!< Program memory: total number of blocks */
 58 |  #define FLASH_DATA_START_PHYSICAL_ADDRESS ((uint32_t)0x004000) /*!< Data EEPROM memory: start address */
 59 |  #define FLASH_DATA_END_PHYSICAL_ADDRESS   ((uint32_t)0x00427F) /*!< Data EEPROM memory: end address */
 60 |  #define FLASH_DATA_BLOCKS_NUMBER          ((uint16_t)10)       /*!< Data EEPROM memory: total number of blocks */
 61 |  #define FLASH_BLOCK_SIZE                  ((uint8_t)64)        /*!< Number of bytes in a block (common for Program and Data memories) */
 62 | #endif /* STM8S103, STM8S903 */
 63 | 
 64 | #define FLASH_RASS_KEY1 ((uint8_t)0x56) /*!< First RASS key */
 65 | #define FLASH_RASS_KEY2 ((uint8_t)0xAE) /*!< Second RASS key */
 66 | 
 67 | #define OPTION_BYTE_START_PHYSICAL_ADDRESS  ((uint16_t)0x4800)
 68 | #define OPTION_BYTE_END_PHYSICAL_ADDRESS    ((uint16_t)0x487F)
 69 | #define FLASH_OPTIONBYTE_ERROR              ((uint16_t)0x5555) /*!< Error code option byte 
 70 |                                                                    (if value read is not equal to complement value read) */
 71 | /**
 72 |   * @}
 73 |   */
 74 | 
 75 | /* Exported types ------------------------------------------------------------*/
 76 | 
 77 | /** @addtogroup FLASH_Exported_Types
 78 |   * @{
 79 |   */
 80 | 
 81 | /**
 82 |   * @brief  FLASH Memory types
 83 |   */
 84 | typedef enum {
 85 |     FLASH_MEMTYPE_PROG      = (uint8_t)0xFD, /*!< Program memory */
 86 |     FLASH_MEMTYPE_DATA      = (uint8_t)0xF7  /*!< Data EEPROM memory */
 87 | } FLASH_MemType_TypeDef;
 88 | 
 89 | /**
 90 |   * @brief  FLASH programming modes
 91 |   */
 92 | typedef enum {
 93 |     FLASH_PROGRAMMODE_STANDARD = (uint8_t)0x00, /*!< Standard programming mode */
 94 |     FLASH_PROGRAMMODE_FAST     = (uint8_t)0x10  /*!< Fast programming mode */
 95 | } FLASH_ProgramMode_TypeDef;
 96 | 
 97 | /**
 98 |   * @brief  FLASH fixed programming time
 99 |   */
100 | typedef enum {
101 |     FLASH_PROGRAMTIME_STANDARD = (uint8_t)0x00, /*!< Standard programming time fixed at 1/2 tprog */
102 |     FLASH_PROGRAMTIME_TPROG    = (uint8_t)0x01  /*!< Programming time fixed at tprog */
103 | } FLASH_ProgramTime_TypeDef;
104 | 
105 | /**
106 |   * @brief  FLASH Low Power mode select
107 |   */
108 | typedef enum {
109 |     FLASH_LPMODE_POWERDOWN         = (uint8_t)0x04, /*!< HALT: Power-Down / ACTIVE-HALT: Power-Down */
110 |     FLASH_LPMODE_STANDBY           = (uint8_t)0x08, /*!< HALT: Standby    / ACTIVE-HALT: Standby */
111 |     FLASH_LPMODE_POWERDOWN_STANDBY = (uint8_t)0x00, /*!< HALT: Power-Down / ACTIVE-HALT: Standby */
112 |     FLASH_LPMODE_STANDBY_POWERDOWN = (uint8_t)0x0C  /*!< HALT: Standby    / ACTIVE-HALT: Power-Down */
113 | }
114 | FLASH_LPMode_TypeDef;
115 | 
116 | /**
117 |   * @brief  FLASH status of the last operation
118 |   */
119 | typedef enum {
120 | #if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S105) || \
121 |     defined(STM8S005) || defined (STM8AF52Ax) || defined (STM8AF62Ax) || defined(STM8AF626x)		
122 | 		FLASH_STATUS_END_HIGH_VOLTAGE           = (uint8_t)0x40, /*!< End of high voltage */
123 | #endif /* STM8S208, STM8S207, STM8S105, STM8AF62Ax, STM8AF52Ax, STM8AF626x */
124 | 		FLASH_STATUS_SUCCESSFUL_OPERATION       = (uint8_t)0x04, /*!< End of operation flag */
125 | 		FLASH_STATUS_TIMEOUT = (uint8_t)0x02, /*!< Time out error */
126 |     FLASH_STATUS_WRITE_PROTECTION_ERROR     = (uint8_t)0x01 /*!< Write attempted to protected page */
127 | } FLASH_Status_TypeDef;
128 | 
129 | /**
130 |   * @brief  FLASH flags definition
131 |  * - Warning : FLAG value = mapping position register
132 |   */
133 | typedef enum {
134 | #if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S105) || \
135 |     defined(STM8S005) || defined (STM8AF52Ax) || defined (STM8AF62Ax) || defined(STM8AF626x)
136 |     FLASH_FLAG_HVOFF     = (uint8_t)0x40,     /*!< End of high voltage flag */
137 | #endif /* STM8S208, STM8S207, STM8S105, STM8AF62Ax, STM8AF52Ax, STM8AF626x */
138 |     FLASH_FLAG_DUL       = (uint8_t)0x08,     /*!< Data EEPROM unlocked flag */
139 |     FLASH_FLAG_EOP       = (uint8_t)0x04,     /*!< End of programming (write or erase operation) flag */
140 |     FLASH_FLAG_PUL       = (uint8_t)0x02,     /*!< Flash Program memory unlocked flag */
141 |     FLASH_FLAG_WR_PG_DIS = (uint8_t)0x01      /*!< Write attempted to protected page flag */
142 | } FLASH_Flag_TypeDef;
143 | 
144 | /**
145 |   * @}
146 |   */
147 | 
148 | /* Private macros ------------------------------------------------------------*/
149 | 
150 | /**
151 |   * @brief  Macros used by the assert function in order to check the different functions parameters.
152 |   * @addtogroup FLASH_Private_Macros
153 |   * @{
154 |   */
155 | 
156 | /**
157 |   * @brief  Macro used by the assert function in order to check the different sensitivity values for the flash program Address
158 |   */
159 | 
160 | #define IS_FLASH_PROG_ADDRESS_OK(ADDRESS) (((ADDRESS) >= FLASH_PROG_START_PHYSICAL_ADDRESS) && \
161 |     ((ADDRESS) <= FLASH_PROG_END_PHYSICAL_ADDRESS))
162 | 
163 | /**
164 |   * @brief  Macro used by the assert function in order to check the different sensitivity values for the data eeprom Address
165 |   */
166 | 
167 | #define IS_FLASH_DATA_ADDRESS_OK(ADDRESS) (((ADDRESS) >= FLASH_DATA_START_PHYSICAL_ADDRESS) && \
168 |     ((ADDRESS) <= FLASH_DATA_END_PHYSICAL_ADDRESS))
169 | 
170 | /**
171 |   * @brief  Macro used by the assert function in order to check the different sensitivity values for the data eeprom and flash program Address
172 |   */
173 | #define IS_FLASH_ADDRESS_OK(ADDRESS)((((ADDRESS) >= FLASH_PROG_START_PHYSICAL_ADDRESS) && ((ADDRESS) <= FLASH_PROG_END_PHYSICAL_ADDRESS)) || \
174 |                                      (((ADDRESS) >= FLASH_DATA_START_PHYSICAL_ADDRESS) && ((ADDRESS) <= FLASH_DATA_END_PHYSICAL_ADDRESS)))
175 | 
176 | /**
177 |   * @brief  Macro used by the assert function in order to check the different sensitivity values for the flash program Block number
178 |   */
179 | #define IS_FLASH_PROG_BLOCK_NUMBER_OK(BLOCKNUM) ((BLOCKNUM) < FLASH_PROG_BLOCKS_NUMBER)
180 | 
181 | /**
182 |   * @brief  Macro used by the assert function in order to check the different sensitivity values for the data eeprom Block number
183 |   */
184 | #define IS_FLASH_DATA_BLOCK_NUMBER_OK(BLOCKNUM) ((BLOCKNUM) < FLASH_DATA_BLOCKS_NUMBER)
185 | 
186 | /**
187 |   * @brief  Macro used by the assert function in order to check the different sensitivity values for the flash memory type
188 |   */
189 | 
190 | #define IS_MEMORY_TYPE_OK(MEMTYPE) (((MEMTYPE) == FLASH_MEMTYPE_PROG) || \
191 |                                     ((MEMTYPE) == FLASH_MEMTYPE_DATA))
192 | 
193 | /**
194 |   * @brief  Macro used by the assert function in order to check the different sensitivity values for the flash program mode
195 |   */
196 | 
197 | #define IS_FLASH_PROGRAM_MODE_OK(MODE) (((MODE) == FLASH_PROGRAMMODE_STANDARD) || \
198 |                                         ((MODE) == FLASH_PROGRAMMODE_FAST))
199 | 
200 | /**
201 |   * @brief  Macro used by the assert function in order to check the program time mode
202 |   */
203 | 
204 | #define IS_FLASH_PROGRAM_TIME_OK(TIME) (((TIME) == FLASH_PROGRAMTIME_STANDARD) || \
205 |                                         ((TIME) == FLASH_PROGRAMTIME_TPROG))
206 | 
207 | /**
208 |   * @brief  Macro used by the assert function in order to check the different 
209 |   *         sensitivity values for the low power mode
210 |   */
211 | 
212 | #define IS_FLASH_LOW_POWER_MODE_OK(LPMODE) (((LPMODE) == FLASH_LPMODE_POWERDOWN) || \
213 |     ((LPMODE) == FLASH_LPMODE_STANDBY) || \
214 |     ((LPMODE) == FLASH_LPMODE_POWERDOWN_STANDBY) || \
215 |     ((LPMODE) == FLASH_LPMODE_STANDBY_POWERDOWN))
216 | 
217 | /**
218 |   * @brief  Macro used by the assert function in order to check the different 
219 |   *         sensitivity values for the option bytes Address
220 |   */
221 | #define IS_OPTION_BYTE_ADDRESS_OK(ADDRESS) (((ADDRESS) >= OPTION_BYTE_START_PHYSICAL_ADDRESS) && \
222 |     ((ADDRESS) <= OPTION_BYTE_END_PHYSICAL_ADDRESS))
223 | 
224 | 
225 | /**
226 |   * @brief  Macro used by the assert function in order to check the different flags values
227 |   */
228 | #if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S105) || \
229 |     defined(STM8S005) || defined (STM8AF52Ax) || defined (STM8AF62Ax) || defined(STM8AF626x)
230 |  #define IS_FLASH_FLAGS_OK(FLAG) (((FLAG) == FLASH_FLAG_HVOFF) || \
231 |                                  ((FLAG) == FLASH_FLAG_DUL) || \
232 |                                  ((FLAG) == FLASH_FLAG_EOP) || \
233 |                                  ((FLAG) == FLASH_FLAG_PUL) || \
234 |                                  ((FLAG) == FLASH_FLAG_WR_PG_DIS))
235 | #else /* STM8S103, STM8S903 */
236 |  #define IS_FLASH_FLAGS_OK(FLAG) (((FLAG) == FLASH_FLAG_DUL) || \
237 |                                  ((FLAG) == FLASH_FLAG_EOP) || \
238 |                                  ((FLAG) == FLASH_FLAG_PUL) || \
239 |                                  ((FLAG) == FLASH_FLAG_WR_PG_DIS))
240 | #endif /* STM8S208, STM8S207, STM8S105, STM8AF62Ax, STM8AF52Ax, STM8AF626x */
241 | /**
242 |   * @}
243 |   */
244 | 
245 | /* Exported functions ------------------------------------------------------- */
246 | 
247 | /** @addtogroup FLASH_Exported_Functions
248 |   * @{
249 |   */
250 | void FLASH_Unlock(FLASH_MemType_TypeDef FLASH_MemType);
251 | void FLASH_Lock(FLASH_MemType_TypeDef FLASH_MemType);
252 | void FLASH_DeInit(void);
253 | void FLASH_ITConfig(FunctionalState NewState);
254 | void FLASH_EraseByte(uint32_t Address);
255 | void FLASH_ProgramByte(uint32_t Address, uint8_t Data);
256 | uint8_t FLASH_ReadByte(uint32_t Address);
257 | void FLASH_ProgramWord(uint32_t Address, uint32_t Data);
258 | uint16_t FLASH_ReadOptionByte(uint16_t Address);
259 | void FLASH_ProgramOptionByte(uint16_t Address, uint8_t Data);
260 | void FLASH_EraseOptionByte(uint16_t Address);
261 | void FLASH_SetLowPowerMode(FLASH_LPMode_TypeDef FLASH_LPMode);
262 | void FLASH_SetProgrammingTime(FLASH_ProgramTime_TypeDef FLASH_ProgTime);
263 | FLASH_LPMode_TypeDef FLASH_GetLowPowerMode(void);
264 | FLASH_ProgramTime_TypeDef FLASH_GetProgrammingTime(void);
265 | uint32_t FLASH_GetBootSize(void);
266 | FlagStatus FLASH_GetFlagStatus(FLASH_Flag_TypeDef FLASH_FLAG);
267 | 
268 | /**
269 | @code
270 |  All the functions declared below must be executed from RAM exclusively, except 
271 |  for the FLASH_WaitForLastOperation function which can be executed from Flash.
272 |  
273 |  Steps of the execution from RAM differs from one toolchain to another.
274 |  for more details refer to stm8s_flash.c file.
275 |  
276 |  To enable execution from RAM you can either uncomment the following define 
277 |  in the stm8s.h file or define it in your toolchain compiler preprocessor
278 |  - #define RAM_EXECUTION  (1) 
279 | 
280 | @endcode
281 | */
282 | IN_RAM(void FLASH_EraseBlock(uint16_t BlockNum, FLASH_MemType_TypeDef FLASH_MemType));
283 | IN_RAM(void FLASH_ProgramBlock(uint16_t BlockNum, FLASH_MemType_TypeDef FLASH_MemType, 
284 |                         FLASH_ProgramMode_TypeDef FLASH_ProgMode, uint8_t *Buffer));
285 | IN_RAM(FLASH_Status_TypeDef FLASH_WaitForLastOperation(FLASH_MemType_TypeDef FLASH_MemType));
286 | 
287 | /**
288 |   * @}
289 |   */
290 | 
291 | #endif /*__STM8S_FLASH_H */
292 | 
293 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
294 | 
--------------------------------------------------------------------------------
/mcu/std_lib/inc/stm8s_gpio.h:
--------------------------------------------------------------------------------
  1 | /**
  2 |   ******************************************************************************
  3 |   * @file    stm8s_gpio.h
  4 |   * @author  MCD Application Team
  5 |   * @version V2.1.0
  6 |   * @date    18-November-2011
  7 |   * @brief   This file contains all functions prototype and macros for the GPIO peripheral.
  8 |   ******************************************************************************
  9 |   * @attention
 10 |   *
 11 |   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 12 |   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 13 |   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 14 |   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 15 |   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 16 |   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 17 |   *
 18 |   * © COPYRIGHT 2011 STMicroelectronics
 19 |   ******************************************************************************
 20 |   */
 21 | 
 22 | /* Define to prevent recursive inclusion -------------------------------------*/
 23 | #ifndef __STM8S_GPIO_H
 24 | #define __STM8S_GPIO_H
 25 | 
 26 | /* Includes ------------------------------------------------------------------*/
 27 | #include "stm8s.h"
 28 | 
 29 | /* Exported variables ------------------------------------------------------- */
 30 | /* Exported types ------------------------------------------------------------*/
 31 | 
 32 | /** @addtogroup GPIO_Exported_Types
 33 |   * @{
 34 |   */
 35 | 
 36 | /**
 37 |   * @brief  GPIO modes
 38 |   *
 39 |   * Bits definitions:
 40 |   * - Bit 7: 0 = INPUT mode
 41 |   *          1 = OUTPUT mode
 42 |   *          1 = PULL-UP (input) or PUSH-PULL (output)
 43 |   * - Bit 5: 0 = No external interrupt (input) or No slope control (output)
 44 |   *          1 = External interrupt (input) or Slow control enabled (output)
 45 |   * - Bit 4: 0 = Low level (output)
 46 |   *          1 = High level (output push-pull) or HI-Z (output open-drain)
 47 |   */
 48 | typedef enum
 49 | {
 50 |   GPIO_MODE_IN_FL_NO_IT      = (uint8_t)0x00,  /*!< Input floating, no external interrupt */
 51 |   GPIO_MODE_IN_PU_NO_IT      = (uint8_t)0x40,  /*!< Input pull-up, no external interrupt */
 52 |   GPIO_MODE_IN_FL_IT         = (uint8_t)0x20,  /*!< Input floating, external interrupt */
 53 |   GPIO_MODE_IN_PU_IT         = (uint8_t)0x60,  /*!< Input pull-up, external interrupt */
 54 |   GPIO_MODE_OUT_OD_LOW_FAST  = (uint8_t)0xA0,  /*!< Output open-drain, low level, 10MHz */
 55 |   GPIO_MODE_OUT_PP_LOW_FAST  = (uint8_t)0xE0,  /*!< Output push-pull, low level, 10MHz */
 56 |   GPIO_MODE_OUT_OD_LOW_SLOW  = (uint8_t)0x80,  /*!< Output open-drain, low level, 2MHz */
 57 |   GPIO_MODE_OUT_PP_LOW_SLOW  = (uint8_t)0xC0,  /*!< Output push-pull, low level, 2MHz */
 58 |   GPIO_MODE_OUT_OD_HIZ_FAST  = (uint8_t)0xB0,  /*!< Output open-drain, high-impedance level,10MHz */
 59 |   GPIO_MODE_OUT_PP_HIGH_FAST = (uint8_t)0xF0,  /*!< Output push-pull, high level, 10MHz */
 60 |   GPIO_MODE_OUT_OD_HIZ_SLOW  = (uint8_t)0x90,  /*!< Output open-drain, high-impedance level, 2MHz */
 61 |   GPIO_MODE_OUT_PP_HIGH_SLOW = (uint8_t)0xD0   /*!< Output push-pull, high level, 2MHz */
 62 | }GPIO_Mode_TypeDef;
 63 | 
 64 | /**
 65 |   * @brief  Definition of the GPIO pins. Used by the @ref GPIO_Init function in
 66 |   * order to select the pins to be initialized.
 67 |   */
 68 | 
 69 | typedef enum
 70 | {
 71 |   GPIO_PIN_0    = ((uint8_t)0x01),  /*!< Pin 0 selected */
 72 |   GPIO_PIN_1    = ((uint8_t)0x02),  /*!< Pin 1 selected */
 73 |   GPIO_PIN_2    = ((uint8_t)0x04),  /*!< Pin 2 selected */
 74 |   GPIO_PIN_3    = ((uint8_t)0x08),   /*!< Pin 3 selected */
 75 |   GPIO_PIN_4    = ((uint8_t)0x10),  /*!< Pin 4 selected */
 76 |   GPIO_PIN_5    = ((uint8_t)0x20),  /*!< Pin 5 selected */
 77 |   GPIO_PIN_6    = ((uint8_t)0x40),  /*!< Pin 6 selected */
 78 |   GPIO_PIN_7    = ((uint8_t)0x80),  /*!< Pin 7 selected */
 79 |   GPIO_PIN_LNIB = ((uint8_t)0x0F),  /*!< Low nibble pins selected */
 80 |   GPIO_PIN_HNIB = ((uint8_t)0xF0),  /*!< High nibble pins selected */
 81 |   GPIO_PIN_ALL  = ((uint8_t)0xFF)   /*!< All pins selected */
 82 | }GPIO_Pin_TypeDef;
 83 | 
 84 | /**
 85 |   * @}
 86 |   */
 87 | 
 88 | /* Exported constants --------------------------------------------------------*/
 89 | /* Exported macros -----------------------------------------------------------*/
 90 | /* Private macros ------------------------------------------------------------*/
 91 | 
 92 | /** @addtogroup GPIO_Private_Macros
 93 |   * @{
 94 |   */
 95 | 
 96 | /**
 97 |   * @brief  Macro used by the assert function to check the different functions parameters.
 98 |   */
 99 | 
100 | /**
101 |   * @brief  Macro used by the assert function in order to check the different
102 |   * values of GPIOMode_TypeDef.
103 |   */
104 | #define IS_GPIO_MODE_OK(MODE) \
105 |   (((MODE) == GPIO_MODE_IN_FL_NO_IT)    || \
106 |    ((MODE) == GPIO_MODE_IN_PU_NO_IT)    || \
107 |    ((MODE) == GPIO_MODE_IN_FL_IT)       || \
108 |    ((MODE) == GPIO_MODE_IN_PU_IT)       || \
109 |    ((MODE) == GPIO_MODE_OUT_OD_LOW_FAST)  || \
110 |    ((MODE) == GPIO_MODE_OUT_PP_LOW_FAST)  || \
111 |    ((MODE) == GPIO_MODE_OUT_OD_LOW_SLOW)  || \
112 |    ((MODE) == GPIO_MODE_OUT_PP_LOW_SLOW)  || \
113 |    ((MODE) == GPIO_MODE_OUT_OD_HIZ_FAST)  || \
114 |    ((MODE) == GPIO_MODE_OUT_PP_HIGH_FAST)  || \
115 |    ((MODE) == GPIO_MODE_OUT_OD_HIZ_SLOW)  || \
116 |    ((MODE) == GPIO_MODE_OUT_PP_HIGH_SLOW))
117 | 
118 | /**
119 |   * @brief  Macro used by the assert function in order to check the different
120 |   * values of GPIO_Pins.
121 |   */
122 | #define IS_GPIO_PIN_OK(PIN)  ((PIN) != (uint8_t)0x00)
123 | 
124 | /**
125 |   * @}
126 |   */
127 | 
128 | /* Exported functions ------------------------------------------------------- */
129 | /** @addtogroup GPIO_Exported_Functions
130 |   * @{
131 |   */
132 | 
133 | void GPIO_DeInit(GPIO_TypeDef* GPIOx);
134 | void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode);
135 | void GPIO_Write(GPIO_TypeDef* GPIOx, uint8_t PortVal);
136 | void GPIO_WriteHigh(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);
137 | void GPIO_WriteLow(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);
138 | void GPIO_WriteReverse(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);
139 | uint8_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
140 | uint8_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
141 | BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin);
142 | void GPIO_ExternalPullUpConfig(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, FunctionalState NewState);
143 | /**
144 |   * @}
145 |   */
146 | 
147 | #endif /* __STM8L_GPIO_H */
148 | 
149 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
150 | 
--------------------------------------------------------------------------------
/mcu/std_lib/inc/stm8s_itc.h:
--------------------------------------------------------------------------------
  1 | /**
  2 |   ******************************************************************************
  3 |   * @file    stm8s_itc.h
  4 |   * @author  MCD Application Team
  5 |   * @version V2.1.0
  6 |   * @date    18-November-2011
  7 |   * @brief   This file contains all functions prototype and macros for the ITC peripheral.
  8 |   ******************************************************************************
  9 |   * @attention
 10 |   *
 11 |   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 12 |   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 13 |   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 14 |   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 15 |   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 16 |   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 17 |   *
 18 |   * © COPYRIGHT 2011 STMicroelectronics
 19 |   ******************************************************************************
 20 |   */
 21 | 
 22 | /* Define to prevent recursive inclusion -------------------------------------*/
 23 | #ifndef __STM8S_ITC_H__
 24 | #define __STM8S_ITC_H__
 25 | 
 26 | /* Includes ------------------------------------------------------------------*/
 27 | #include "stm8s.h"
 28 | 
 29 | /* Exported types ------------------------------------------------------------*/
 30 | 
 31 | /** @addtogroup ITC_Exported_Types
 32 |   * @{
 33 |   */
 34 | 
 35 | /**
 36 |   * @brief  ITC Interrupt Lines selection
 37 |   */
 38 | typedef enum {
 39 |   ITC_IRQ_TLI            = (uint8_t)0,   /*!< Software interrupt */
 40 |   ITC_IRQ_AWU            = (uint8_t)1,   /*!< Auto wake up from halt interrupt */
 41 |   ITC_IRQ_CLK            = (uint8_t)2,   /*!< Clock controller interrupt */
 42 |   ITC_IRQ_PORTA          = (uint8_t)3,   /*!< Port A external interrupts */
 43 |   ITC_IRQ_PORTB          = (uint8_t)4,   /*!< Port B external interrupts */
 44 |   ITC_IRQ_PORTC          = (uint8_t)5,   /*!< Port C external interrupts */
 45 |   ITC_IRQ_PORTD          = (uint8_t)6,   /*!< Port D external interrupts */
 46 |   ITC_IRQ_PORTE          = (uint8_t)7,   /*!< Port E external interrupts */
 47 |   
 48 | #if defined(STM8S208) || defined(STM8AF52Ax)
 49 |   ITC_IRQ_CAN_RX         = (uint8_t)8,   /*!< beCAN RX interrupt */
 50 |   ITC_IRQ_CAN_TX         = (uint8_t)9,   /*!< beCAN TX/ER/SC interrupt */
 51 | #endif /*STM8S208 or STM8AF52Ax */
 52 | 
 53 | #ifdef STM8S903
 54 |   ITC_IRQ_PORTF          = (uint8_t)8,   /*!< Port F external interrupts */
 55 | #endif /*STM8S903*/
 56 | 
 57 |   ITC_IRQ_SPI            = (uint8_t)10,  /*!< SPI interrupt */
 58 |   ITC_IRQ_TIM1_OVF       = (uint8_t)11,  /*!< TIM1 update/overflow/underflow/trigger/
 59 |                                          break interrupt*/
 60 |   ITC_IRQ_TIM1_CAPCOM    = (uint8_t)12,  /*!< TIM1 capture/compare interrupt */
 61 |   
 62 | #ifdef STM8S903
 63 |   ITC_IRQ_TIM5_OVFTRI    = (uint8_t)13,  /*!< TIM5 update/overflow/underflow/trigger/
 64 |                                          interrupt */
 65 |   ITC_IRQ_TIM5_CAPCOM    = (uint8_t)14,  /*!< TIM5 capture/compare interrupt */
 66 | #else  
 67 |   ITC_IRQ_TIM2_OVF       = (uint8_t)13,  /*!< TIM2 update /overflow interrupt */
 68 |   ITC_IRQ_TIM2_CAPCOM    = (uint8_t)14,  /*!< TIM2 capture/compare interrupt */
 69 | #endif /*STM8S903*/
 70 | 
 71 |   ITC_IRQ_TIM3_OVF       = (uint8_t)15,  /*!< TIM3 update /overflow interrupt*/
 72 |   ITC_IRQ_TIM3_CAPCOM    = (uint8_t)16,  /*!< TIM3 update /overflow interrupt */
 73 |   ITC_IRQ_UART1_TX       = (uint8_t)17,  /*!< USART1 TX interrupt */
 74 |   ITC_IRQ_UART1_RX       = (uint8_t)18,  /*!< USART1 RX interrupt */
 75 |   ITC_IRQ_I2C            = (uint8_t)19,  /*!< I2C interrupt */
 76 |   
 77 | #if defined(STM8S105) || defined(STM8S005) || defined(STM8AF626x)
 78 |   ITC_IRQ_UART2_TX       = (uint8_t)20,  /*!< USART2 TX interrupt */
 79 |   ITC_IRQ_UART2_RX       = (uint8_t)21,  /*!< USART2 RX interrupt */
 80 | #endif /*STM8S105 or STM8AF626x */
 81 | 
 82 | #if defined(STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8AF52Ax) || defined(STM8AF62Ax)
 83 |   ITC_IRQ_UART3_TX       = (uint8_t)20,  /*!< USART3 TX interrupt */
 84 |   ITC_IRQ_UART3_RX       = (uint8_t)21,  /*!< USART3 RX interrupt */
 85 |   ITC_IRQ_ADC2           = (uint8_t)22,  /*!< ADC2 interrupt */
 86 | #endif /*STM8S208 or STM8S207 or STM8AF52Ax or STM8AF62Ax */
 87 | 
 88 | #if defined(STM8S105) || defined(STM8S005) || defined(STM8S103) || defined(STM8S003) ||  defined(STM8S903) || defined(STM8AF626x)  
 89 |   ITC_IRQ_ADC1           = (uint8_t)22,  /*!< ADC2 interrupt */
 90 | #endif /*STM8S105, STM8S103 or STM8S903 or STM8AF626x */
 91 | 
 92 | #ifdef STM8S903
 93 |   ITC_IRQ_TIM6_OVFTRI    = (uint8_t)23,  /*!< TIM6 update/overflow/underflow/trigger/
 94 |                                          interrupt */
 95 | #else
 96 |   ITC_IRQ_TIM4_OVF       = (uint8_t)23,  /*!< TIM4 update /overflow interrupt */
 97 | #endif /*STM8S903*/
 98 | 
 99 |   ITC_IRQ_EEPROM_EEC     = (uint8_t)24  /*!< Flash interrupt */
100 | } ITC_Irq_TypeDef;
101 | 
102 | /**
103 |   * @brief  ITC Priority Levels selection
104 |   */
105 | typedef enum {
106 |   ITC_PRIORITYLEVEL_0 = (uint8_t)0x02, /*!< Software priority level 0 (cannot be written) */
107 |   ITC_PRIORITYLEVEL_1 = (uint8_t)0x01, /*!< Software priority level 1 */
108 |   ITC_PRIORITYLEVEL_2 = (uint8_t)0x00, /*!< Software priority level 2 */
109 |   ITC_PRIORITYLEVEL_3 = (uint8_t)0x03  /*!< Software priority level 3 */
110 | } ITC_PriorityLevel_TypeDef;
111 | 
112 | /**
113 |   * @}
114 |   */
115 | 
116 | /* Exported constants --------------------------------------------------------*/
117 | 
118 | /** @addtogroup ITC_Exported_Constants
119 |   * @{
120 |   */
121 | 
122 | #define CPU_SOFT_INT_DISABLED ((uint8_t)0x28) /*!< Mask for I1 and I0 bits in CPU_CC register */
123 | 
124 | /**
125 |   * @}
126 |   */
127 | 
128 | /* Private macros ------------------------------------------------------------*/
129 | 
130 | /**
131 |   * @brief  Macros used by the assert function in order to check the different functions parameters.
132 |   * @addtogroup ITC_Private_Macros
133 |   * @{
134 |   */
135 | 
136 | /* Used by assert function */
137 | #define IS_ITC_IRQ_OK(IRQ) ((IRQ) <= (uint8_t)24)
138 | 
139 | /* Used by assert function */
140 | #define IS_ITC_PRIORITY_OK(PriorityValue) \
141 |   (((PriorityValue) == ITC_PRIORITYLEVEL_0) || \
142 |    ((PriorityValue) == ITC_PRIORITYLEVEL_1) || \
143 |    ((PriorityValue) == ITC_PRIORITYLEVEL_2) || \
144 |    ((PriorityValue) == ITC_PRIORITYLEVEL_3))
145 | 
146 | /* Used by assert function */
147 | #define IS_ITC_INTERRUPTS_DISABLED (ITC_GetSoftIntStatus() == CPU_SOFT_INT_DISABLED)
148 | 
149 | /**
150 |   * @}
151 |   */
152 | 
153 | /* Exported functions ------------------------------------------------------- */
154 | 
155 | /** @addtogroup ITC_Exported_Functions
156 |   * @{
157 |   */
158 | 
159 | uint8_t ITC_GetCPUCC(void);
160 | void ITC_DeInit(void);
161 | uint8_t ITC_GetSoftIntStatus(void);
162 | void ITC_SetSoftwarePriority(ITC_Irq_TypeDef IrqNum, ITC_PriorityLevel_TypeDef PriorityValue);
163 | ITC_PriorityLevel_TypeDef ITC_GetSoftwarePriority(ITC_Irq_TypeDef IrqNum);
164 | 
165 | /**
166 |   * @}
167 |   */
168 | 
169 | #endif /* __STM8S_ITC_H__ */
170 | 
171 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
172 | 
--------------------------------------------------------------------------------
/mcu/std_lib/inc/stm8s_iwdg.h:
--------------------------------------------------------------------------------
  1 | /**
  2 |   ******************************************************************************
  3 |   * @file    stm8s_iwdg.h
  4 |   * @author  MCD Application Team
  5 |   * @version V2.1.0
  6 |   * @date    18-November-2011
  7 |   * @brief   This file contains all functions prototypes and macros for the IWDG peripheral.
  8 |   ******************************************************************************
  9 |   * @attention
 10 |   *
 11 |   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 12 |   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 13 |   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 14 |   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 15 |   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 16 |   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 17 |   *
 18 |   * © COPYRIGHT 2011 STMicroelectronics
 19 |   ******************************************************************************
 20 |   */
 21 | 
 22 | /* Define to prevent recursive inclusion -------------------------------------*/
 23 | #ifndef __STM8S_IWDG_H
 24 | #define __STM8S_IWDG_H
 25 | 
 26 | /* Includes ------------------------------------------------------------------*/
 27 | #include "stm8s.h"
 28 | 
 29 | /** @addtogroup STM8S_StdPeriph_Driver
 30 |   * @{
 31 |   */
 32 | 
 33 | /** @addtogroup IWDG_Private_Define
 34 |   * @{
 35 |   */
 36 | 
 37 | /**
 38 |   * @brief  Define used to prevent watchdog reset
 39 |   */
 40 | #define IWDG_KEY_REFRESH    ((uint8_t)0xAA)  /*!<  This value written in the Key register prevent the watchdog reset */
 41 | 
 42 | /**
 43 |   * @brief  Define used to start the watchdog counter down
 44 |   */
 45 | #define IWDG_KEY_ENABLE     ((uint8_t)0xCC)  /*!<  This value written in the Key register start the watchdog counting down*/
 46 | 
 47 | /**
 48 |  * @}
 49 |  */
 50 | 
 51 | /** @addtogroup IWDG_Private_Macros
 52 |   * @{
 53 |   */
 54 | 
 55 | /**
 56 |   * @brief  Macro used by the assert function in order to check the different
 57 |   * values of the prescaler.
 58 |   */
 59 | #define IS_IWDG_PRESCALER_OK(VALUE) (((VALUE) == IWDG_Prescaler_4   ) || \
 60 |                                      ((VALUE) == IWDG_Prescaler_8   ) || \
 61 |                                      ((VALUE) == IWDG_Prescaler_16  ) || \
 62 |                                      ((VALUE) == IWDG_Prescaler_32  ) || \
 63 |                                      ((VALUE) == IWDG_Prescaler_64  ) || \
 64 |                                      ((VALUE) == IWDG_Prescaler_128 ) || \
 65 |                                      ((VALUE) == IWDG_Prescaler_256))
 66 | 
 67 | /**
 68 |   * @brief  Macro used by the assert function in order to check the different
 69 |   * values of the counter register.
 70 |   */
 71 | #define IS_IWDG_WRITEACCESS_MODE_OK(MODE) (((MODE) == IWDG_WriteAccess_Enable) || ((MODE) == IWDG_WriteAccess_Disable))
 72 | 
 73 | /**
 74 |   * @}
 75 |   */
 76 | 
 77 | /** @addtogroup IWDG_Exported_Types
 78 |   * @{
 79 |   */
 80 | 
 81 | /** IWDG write  acces enumeration */
 82 | typedef enum
 83 | {
 84 |   IWDG_WriteAccess_Enable  = (uint8_t)0x55, /*!< Code 0x55 in Key register, allow write access to Prescaler and Reload registers */
 85 |   IWDG_WriteAccess_Disable = (uint8_t)0x00  /*!< Code 0x00 in Key register, not allow write access to Prescaler and Reload registers */
 86 | } IWDG_WriteAccess_TypeDef;
 87 | 
 88 | /** IWDG prescaler enumaration */
 89 | typedef enum
 90 | {
 91 |   IWDG_Prescaler_4   = (uint8_t)0x00, /*!< Used to set prescaler register to 4 */
 92 |   IWDG_Prescaler_8   = (uint8_t)0x01, /*!< Used to set prescaler register to 8 */
 93 |   IWDG_Prescaler_16  = (uint8_t)0x02, /*!< Used to set prescaler register to 16 */
 94 |   IWDG_Prescaler_32  = (uint8_t)0x03, /*!< Used to set prescaler register to 32 */
 95 |   IWDG_Prescaler_64  = (uint8_t)0x04, /*!< Used to set prescaler register to 64 */
 96 |   IWDG_Prescaler_128 = (uint8_t)0x05, /*!< Used to set prescaler register to 128 */
 97 |   IWDG_Prescaler_256 = (uint8_t)0x06  /*!< Used to set prescaler register to 256 */
 98 | } IWDG_Prescaler_TypeDef;
 99 | 
100 | /**
101 |   * @}
102 |   */
103 | 
104 | /** @addtogroup IWDG_Exported_Functions
105 |   * @{
106 |   */
107 | 
108 | void IWDG_WriteAccessCmd(IWDG_WriteAccess_TypeDef IWDG_WriteAccess);
109 | void IWDG_SetPrescaler(IWDG_Prescaler_TypeDef IWDG_Prescaler);
110 | void IWDG_SetReload(uint8_t IWDG_Reload);
111 | void IWDG_ReloadCounter(void);
112 | void IWDG_Enable(void);
113 | 
114 | /**
115 |   * @}
116 |   */
117 | 
118 | #endif /* __STM8S_IWDG_H */
119 | 
120 | /**
121 |   * @}
122 |   */
123 | 
124 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
125 | 
--------------------------------------------------------------------------------
/mcu/std_lib/inc/stm8s_rst.h:
--------------------------------------------------------------------------------
 1 | /**
 2 |   ******************************************************************************
 3 |   * @file    stm8s_rst.h
 4 |   * @author  MCD Application Team
 5 |   * @version V2.1.0
 6 |   * @date    18-November-2011
 7 |   * @brief   This file contains all functions prototype and macros for the RST peripheral.
 8 |   ******************************************************************************
 9 |   * @attention
10 |   *
11 |   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
12 |   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
13 |   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
14 |   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
15 |   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
16 |   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
17 |   *
18 |   * © COPYRIGHT 2011 STMicroelectronics
19 |   ******************************************************************************
20 |   */
21 | /* Define to prevent recursive inclusion -------------------------------------*/
22 | #ifndef __STM8S_RST_H
23 | #define __STM8S_RST_H
24 | 
25 | /* Includes ------------------------------------------------------------------*/
26 | #include "stm8s.h"
27 | 
28 | /** @addtogroup STM8S_StdPeriph_Driver
29 |   * @{
30 |   */
31 | 
32 | /** @addtogroup RST_Exported_Types
33 |   * @{
34 |   */
35 | typedef enum {
36 |   RST_FLAG_EMCF    = (uint8_t)0x10, /*!< EMC reset flag */
37 |   RST_FLAG_SWIMF   = (uint8_t)0x08, /*!< SWIM reset flag */
38 |   RST_FLAG_ILLOPF  = (uint8_t)0x04, /*!< Illigal opcode reset flag */
39 |   RST_FLAG_IWDGF   = (uint8_t)0x02, /*!< Independent watchdog reset flag */
40 |   RST_FLAG_WWDGF   = (uint8_t)0x01  /*!< Window watchdog reset flag */
41 | }RST_Flag_TypeDef;
42 | 
43 | /**
44 |   * @}
45 |   */
46 | 
47 | /* Exported constants --------------------------------------------------------*/
48 | /* Exported macros -----------------------------------------------------------*/
49 | 
50 | /** @addtogroup RST_Private_Macros
51 |   * @{
52 |   */
53 | 
54 | /**
55 |   * @brief  Macro used by the assert function to check the different functions parameters.
56 |   */
57 | /**
58 |   * @brief  Macro used by the assert function to check the different RST flags.
59 |   */
60 | #define IS_RST_FLAG_OK(FLAG) (((FLAG) == RST_FLAG_EMCF) || \
61 |                               ((FLAG) == RST_FLAG_SWIMF)  ||\
62 |                               ((FLAG) == RST_FLAG_ILLOPF) ||\
63 |                               ((FLAG) == RST_FLAG_IWDGF)  ||\
64 |                               ((FLAG) == RST_FLAG_WWDGF))
65 | 
66 | /**
67 |   * @}
68 |   */
69 | 
70 | /** @addtogroup RST_Exported_functions
71 |   * @{
72 |   */
73 | FlagStatus RST_GetFlagStatus(RST_Flag_TypeDef RST_Flag);
74 | void RST_ClearFlag(RST_Flag_TypeDef RST_Flag);
75 | 
76 | /**
77 |   * @}
78 |   */
79 | 
80 | #endif /* __STM8S_RST_H */
81 | 
82 | /**
83 |   * @}
84 |   */
85 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
86 | 
--------------------------------------------------------------------------------
/mcu/std_lib/inc/stm8s_spi.h:
--------------------------------------------------------------------------------
  1 | /**
  2 |   ******************************************************************************
  3 |   * @file    stm8s_spi.h
  4 |   * @author  MCD Application Team
  5 |   * @version V2.1.0
  6 |   * @date    18-November-2011
  7 |   * @brief   This file contains all functions prototype and macros for the SPI peripheral.
  8 |   ******************************************************************************
  9 |   * @attention
 10 |   *
 11 |   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 12 |   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 13 |   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 14 |   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 15 |   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 16 |   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 17 |   *
 18 |   * © COPYRIGHT 2011 STMicroelectronics
 19 |   ******************************************************************************
 20 |   */
 21 | 
 22 | /* Define to prevent recursive inclusion -------------------------------------*/
 23 | #ifndef __STM8S_SPI_H
 24 | #define __STM8S_SPI_H
 25 | 
 26 | /* Includes ------------------------------------------------------------------*/
 27 | #include "stm8s.h"
 28 | 
 29 | /** @addtogroup STM8S_StdPeriph_Driver
 30 |   * @{
 31 |   */
 32 | 
 33 | /** @addtogroup SPI_Exported_Types
 34 |   * @{
 35 |   */
 36 | 
 37 | /**
 38 |   * @brief  SPI data direction mode
 39 |   * Warning: element values correspond to BDM, BDOE, RXONLY bits position
 40 |   */
 41 | typedef enum {
 42 |   SPI_DATADIRECTION_2LINES_FULLDUPLEX = (uint8_t)0x00, /*!< 2-line uni-directional data mode enable */
 43 |   SPI_DATADIRECTION_2LINES_RXONLY     = (uint8_t)0x04, /*!< Receiver only in 2 line uni-directional data mode */
 44 |   SPI_DATADIRECTION_1LINE_RX          = (uint8_t)0x80, /*!< Receiver only in 1 line bi-directional data mode */
 45 |   SPI_DATADIRECTION_1LINE_TX          = (uint8_t)0xC0  /*!< Transmit only in 1 line bi-directional data mode */
 46 | } SPI_DataDirection_TypeDef;
 47 | 
 48 | /**
 49 |   * @brief  SPI Slave Select management
 50 |   * Warning: element values correspond to LSBFIRST bit position
 51 |   */
 52 | typedef enum
 53 | {
 54 |   SPI_NSS_SOFT  = (uint8_t)0x02, /*!< Software slave management disabled */
 55 |   SPI_NSS_HARD  = (uint8_t)0x00  /*!< Software slave management enabled */
 56 | } SPI_NSS_TypeDef;
 57 | 
 58 | 
 59 | /**
 60 |   * @brief  SPI direction transmit/receive
 61 |   */
 62 | 
 63 | typedef enum {
 64 |   SPI_DIRECTION_RX = (uint8_t)0x00, /*!< Selects Rx receive direction in bi-directional mode */
 65 |   SPI_DIRECTION_TX = (uint8_t)0x01  /*!< Selects Tx transmission direction in bi-directional mode */
 66 | } SPI_Direction_TypeDef;
 67 | 
 68 | /**
 69 |   * @brief  SPI master/slave mode
 70 |   * Warning: element values correspond to MSTR bit position
 71 |   */
 72 | typedef enum {
 73 |   SPI_MODE_MASTER = (uint8_t)0x04, /*!< SPI Master configuration */
 74 |   SPI_MODE_SLAVE  = (uint8_t)0x00  /*!< SPI Slave configuration */
 75 | } SPI_Mode_TypeDef;
 76 | 
 77 | /**
 78 |   * @brief  SPI BaudRate Prescaler
 79 |   * Warning: element values correspond to BR bits position
 80 |   */
 81 | typedef enum {
 82 |   SPI_BAUDRATEPRESCALER_2   = (uint8_t)0x00, /*!< SPI frequency = frequency(CPU)/2 */
 83 |   SPI_BAUDRATEPRESCALER_4   = (uint8_t)0x08, /*!< SPI frequency = frequency(CPU)/4 */
 84 |   SPI_BAUDRATEPRESCALER_8   = (uint8_t)0x10, /*!< SPI frequency = frequency(CPU)/8 */
 85 |   SPI_BAUDRATEPRESCALER_16  = (uint8_t)0x18, /*!< SPI frequency = frequency(CPU)/16 */
 86 |   SPI_BAUDRATEPRESCALER_32  = (uint8_t)0x20, /*!< SPI frequency = frequency(CPU)/32 */
 87 |   SPI_BAUDRATEPRESCALER_64  = (uint8_t)0x28, /*!< SPI frequency = frequency(CPU)/64 */
 88 |   SPI_BAUDRATEPRESCALER_128 = (uint8_t)0x30, /*!< SPI frequency = frequency(CPU)/128 */
 89 |   SPI_BAUDRATEPRESCALER_256 = (uint8_t)0x38  /*!< SPI frequency = frequency(CPU)/256 */
 90 | } SPI_BaudRatePrescaler_TypeDef;
 91 | 
 92 | /**
 93 |   * @brief  SPI Clock Polarity
 94 |   * Warning: element values correspond to CPOL bit position
 95 |   */
 96 | typedef enum {
 97 |   SPI_CLOCKPOLARITY_LOW  = (uint8_t)0x00, /*!< Clock to 0 when idle */
 98 |   SPI_CLOCKPOLARITY_HIGH = (uint8_t)0x02  /*!< Clock to 1 when idle */
 99 | } SPI_ClockPolarity_TypeDef;
100 | 
101 | /**
102 |   * @brief  SPI Clock Phase
103 |   * Warning: element values correspond to CPHA bit position
104 |   */
105 | typedef enum {
106 |   SPI_CLOCKPHASE_1EDGE = (uint8_t)0x00, /*!< The first clock transition is the first data capture edge */
107 |   SPI_CLOCKPHASE_2EDGE = (uint8_t)0x01  /*!< The second clock transition is the first data capture edge */
108 | } SPI_ClockPhase_TypeDef;
109 | 
110 | /**
111 |   * @brief  SPI Frame Format: MSB or LSB transmitted first
112 |   * Warning: element values correspond to LSBFIRST bit position
113 |   */
114 | typedef enum {
115 |   SPI_FIRSTBIT_MSB = (uint8_t)0x00, /*!< MSB bit will be transmitted first */
116 |   SPI_FIRSTBIT_LSB = (uint8_t)0x80  /*!< LSB bit will be transmitted first */
117 | } SPI_FirstBit_TypeDef;
118 | 
119 | /**
120 |   * @brief  SPI CRC Transmit/Receive
121 |   */
122 | typedef enum {
123 |   SPI_CRC_RX = (uint8_t)0x00, /*!< Select Tx CRC register */
124 |   SPI_CRC_TX = (uint8_t)0x01  /*!< Select Rx CRC register */
125 | } SPI_CRC_TypeDef;
126 | 
127 | /**
128 |   * @brief  SPI flags definition - Warning : FLAG value = mapping position register
129 |   */
130 | typedef enum {
131 |   SPI_FLAG_BSY    = (uint8_t)0x80, /*!< Busy flag */
132 |   SPI_FLAG_OVR    = (uint8_t)0x40, /*!< Overrun flag */
133 |   SPI_FLAG_MODF   = (uint8_t)0x20, /*!< Mode fault */
134 |   SPI_FLAG_CRCERR = (uint8_t)0x10, /*!< CRC error flag */
135 |   SPI_FLAG_WKUP   = (uint8_t)0x08, /*!< Wake-up flag */
136 |   SPI_FLAG_TXE    = (uint8_t)0x02, /*!< Transmit buffer empty */
137 |   SPI_FLAG_RXNE   = (uint8_t)0x01  /*!< Receive buffer empty */
138 | } SPI_Flag_TypeDef;
139 | 
140 | /**
141 |   * @brief  SPI_IT possible values
142 |   * Elements values convention: 0xYX
143 |   *   X: Position of the corresponding Interrupt
144 |   *   Y: ITPENDINGBIT position
145 |   */
146 | typedef enum
147 | {
148 |   SPI_IT_WKUP   = (uint8_t)0x34,  /*!< Wake-up interrupt*/
149 |   SPI_IT_OVR   = (uint8_t)0x65,  /*!< Overrun interrupt*/
150 |   SPI_IT_MODF   = (uint8_t)0x55,  /*!< Mode fault interrupt*/
151 |   SPI_IT_CRCERR = (uint8_t)0x45,  /*!< CRC error interrupt*/
152 |   SPI_IT_TXE    = (uint8_t)0x17,  /*!< Transmit buffer empty interrupt*/
153 |   SPI_IT_RXNE   = (uint8_t)0x06,   /*!< Receive buffer not empty interrupt*/
154 |   SPI_IT_ERR    = (uint8_t)0x05   /*!< Error interrupt*/
155 | } SPI_IT_TypeDef;
156 | 
157 | /**
158 |   * @}
159 |   */
160 | 
161 | /* Private define ------------------------------------------------------------*/
162 | 
163 | /** @addtogroup SPI_Private_Macros
164 |   * @brief  Macros used by the assert_param function to check the different functions parameters.
165 |   * @{
166 |   */
167 | 
168 | /**
169 |   * @brief  Macro used by the assert_param function in order to check the data direction mode values
170 |   */
171 | #define IS_SPI_DATA_DIRECTION_OK(MODE) (((MODE) == SPI_DATADIRECTION_2LINES_FULLDUPLEX) || \
172 |                                         ((MODE) == SPI_DATADIRECTION_2LINES_RXONLY) || \
173 |                                         ((MODE) == SPI_DATADIRECTION_1LINE_RX) || \
174 |                                         ((MODE) == SPI_DATADIRECTION_1LINE_TX))
175 | 
176 | /**
177 |   * @brief  Macro used by the assert_param function in order to check the mode 
178 |   *         half duplex data direction values
179 |   */
180 | #define IS_SPI_DIRECTION_OK(DIRECTION) (((DIRECTION) == SPI_DIRECTION_RX) || \
181 |                                         ((DIRECTION) == SPI_DIRECTION_TX))
182 | 
183 | /**
184 |   * @brief  Macro used by the assert_param function in order to check the NSS 
185 |   *         management values
186 |   */
187 | #define IS_SPI_SLAVEMANAGEMENT_OK(NSS) (((NSS) == SPI_NSS_SOFT) || \
188 |                                         ((NSS) == SPI_NSS_HARD))
189 | 
190 | 
191 | /**
192 |   * @brief  Macro used by the assert_param function in order to check the different
193 |   *         sensitivity values for the CRC polynomial
194 |   */
195 | #define IS_SPI_CRC_POLYNOMIAL_OK(POLYNOMIAL) ((POLYNOMIAL) > (uint8_t)0x00)
196 | 
197 | /**
198 |   * @brief  Macro used by the assert_param function in order to check the SPI Mode values
199 |   */
200 | #define IS_SPI_MODE_OK(MODE) (((MODE) == SPI_MODE_MASTER) || \
201 |                               ((MODE) == SPI_MODE_SLAVE))
202 | 
203 | /**
204 |   * @brief  Macro used by the assert_param function in order to check the baudrate values
205 |   */
206 | #define IS_SPI_BAUDRATE_PRESCALER_OK(PRESCALER) (((PRESCALER) == SPI_BAUDRATEPRESCALER_2) || \
207 |     ((PRESCALER) == SPI_BAUDRATEPRESCALER_4) || \
208 |     ((PRESCALER) == SPI_BAUDRATEPRESCALER_8) || \
209 |     ((PRESCALER) == SPI_BAUDRATEPRESCALER_16) || \
210 |     ((PRESCALER) == SPI_BAUDRATEPRESCALER_32) || \
211 |     ((PRESCALER) == SPI_BAUDRATEPRESCALER_64) || \
212 |     ((PRESCALER) == SPI_BAUDRATEPRESCALER_128) || \
213 |     ((PRESCALER) == SPI_BAUDRATEPRESCALER_256))
214 | 
215 | /**
216 |   * @brief  Macro used by the assert_param function in order to check the polarity values
217 |   */
218 | #define IS_SPI_POLARITY_OK(CLKPOL) (((CLKPOL) == SPI_CLOCKPOLARITY_LOW) || \
219 |                                     ((CLKPOL) == SPI_CLOCKPOLARITY_HIGH))
220 | 
221 | /**
222 |   * @brief  Macro used by the assert_param function in order to check the phase values
223 |   */
224 | #define IS_SPI_PHASE_OK(CLKPHA) (((CLKPHA) == SPI_CLOCKPHASE_1EDGE) || \
225 |                                  ((CLKPHA) == SPI_CLOCKPHASE_2EDGE))
226 | 
227 | /**
228 |   * @brief  Macro used by the assert_param function in order to check the first 
229 |   *         bit to be transmited values
230 |   */
231 | #define IS_SPI_FIRSTBIT_OK(BIT) (((BIT) == SPI_FIRSTBIT_MSB) || \
232 |                                  ((BIT) == SPI_FIRSTBIT_LSB))
233 | 
234 | /**
235 |   * @brief  Macro used by the assert_param function in order to check the CRC 
236 |   *         Transmit/Receive
237 |   */
238 | #define IS_SPI_CRC_OK(CRC) (((CRC) == SPI_CRC_TX) || \
239 |                             ((CRC) == SPI_CRC_RX))
240 | 
241 | /**
242 |   * @brief  Macro used by the assert_param function in order to check the 
243 |   *         different flags values
244 |   */
245 | #define IS_SPI_FLAGS_OK(FLAG) (((FLAG) == SPI_FLAG_OVR) || \
246 |                                ((FLAG) == SPI_FLAG_MODF) || \
247 |                                ((FLAG) == SPI_FLAG_CRCERR) || \
248 |                                ((FLAG) == SPI_FLAG_WKUP) || \
249 |                                ((FLAG) == SPI_FLAG_TXE) || \
250 |                                ((FLAG) == SPI_FLAG_RXNE) || \
251 |                                ((FLAG) == SPI_FLAG_BSY))
252 | 
253 | /**
254 |   * @brief  Macro used by the assert_param function in order to check the 
255 |   *         different sensitivity values for the flag that can be cleared 
256 |   *         by writing 0
257 |   */
258 | #define IS_SPI_CLEAR_FLAGS_OK(FLAG) (((FLAG) == SPI_FLAG_CRCERR) || \
259 |                                      ((FLAG) == SPI_FLAG_WKUP))
260 | 
261 | /**
262 |   * @brief  Macro used by the assert_param function in order to check the 
263 |   *        different sensitivity values for the Interrupts
264 |   */
265 | #define IS_SPI_CONFIG_IT_OK(Interrupt) (((Interrupt) == SPI_IT_TXE)  || \
266 |                                         ((Interrupt) == SPI_IT_RXNE)  || \
267 |                                         ((Interrupt) == SPI_IT_ERR) || \
268 |                                         ((Interrupt) == SPI_IT_WKUP))
269 | 
270 | /**
271 |   * @brief  Macro used by the assert_param function in order to check the 
272 |   *         different sensitivity values for the pending bit
273 |   */
274 | #define IS_SPI_GET_IT_OK(ITPendingBit) (((ITPendingBit) == SPI_IT_OVR)  || \
275 |                                         ((ITPendingBit) == SPI_IT_MODF) || \
276 |                                         ((ITPendingBit) == SPI_IT_CRCERR) || \
277 |                                         ((ITPendingBit) == SPI_IT_WKUP) || \
278 |                                         ((ITPendingBit) == SPI_IT_TXE)  || \
279 |                                         ((ITPendingBit) == SPI_IT_RXNE))
280 | 
281 | /**
282 |   * @brief  Macro used by the assert_param function in order to check the 
283 |   *         different sensitivity values for the pending bit that can be cleared
284 |   *         by writing 0
285 |   */
286 | #define IS_SPI_CLEAR_IT_OK(ITPendingBit) (((ITPendingBit) == SPI_IT_CRCERR) || \
287 |     ((ITPendingBit) == SPI_IT_WKUP))
288 | 
289 | /**
290 |   * @}
291 |   */
292 | 
293 | /** @addtogroup SPI_Exported_Functions
294 |   * @{
295 |   */
296 | void SPI_DeInit(void);
297 | void SPI_Init(SPI_FirstBit_TypeDef FirstBit, 
298 |               SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, 
299 |               SPI_Mode_TypeDef Mode, SPI_ClockPolarity_TypeDef ClockPolarity, 
300 |               SPI_ClockPhase_TypeDef ClockPhase, 
301 |               SPI_DataDirection_TypeDef Data_Direction, 
302 |               SPI_NSS_TypeDef Slave_Management, uint8_t CRCPolynomial);
303 | void SPI_Cmd(FunctionalState NewState);
304 | void SPI_ITConfig(SPI_IT_TypeDef SPI_IT, FunctionalState NewState);
305 | void SPI_SendData(uint8_t Data);
306 | uint8_t SPI_ReceiveData(void);
307 | void SPI_NSSInternalSoftwareCmd(FunctionalState NewState);
308 | void SPI_TransmitCRC(void);
309 | void SPI_CalculateCRCCmd(FunctionalState NewState);
310 | uint8_t SPI_GetCRC(SPI_CRC_TypeDef SPI_CRC);
311 | void SPI_ResetCRC(void);
312 | uint8_t SPI_GetCRCPolynomial(void);
313 | void SPI_BiDirectionalLineConfig(SPI_Direction_TypeDef SPI_Direction);
314 | FlagStatus SPI_GetFlagStatus(SPI_Flag_TypeDef SPI_FLAG);
315 | void SPI_ClearFlag(SPI_Flag_TypeDef SPI_FLAG);
316 | ITStatus SPI_GetITStatus(SPI_IT_TypeDef SPI_IT);
317 | void SPI_ClearITPendingBit(SPI_IT_TypeDef SPI_IT);
318 | 
319 | /**
320 |   * @}
321 |   */
322 | 
323 | #endif /* __STM8S_SPI_H */
324 | 
325 | /**
326 |   * @}
327 |   */
328 |   
329 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
330 | 
--------------------------------------------------------------------------------
/mcu/std_lib/inc/stm8s_tim3.h:
--------------------------------------------------------------------------------
  1 | /**
  2 |   ******************************************************************************
  3 |   * @file    stm8s_tim3.h
  4 |   * @author  MCD Application Team
  5 |   * @version V2.1.0
  6 |   * @date    18-November-2011
  7 |   * @brief  This file contains all functions prototype and macros for the TIM3 peripheral.
  8 |   ******************************************************************************
  9 |   * @attention
 10 |   *
 11 |   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 12 |   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 13 |   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 14 |   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 15 |   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 16 |   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 17 |   *
 18 |   * © COPYRIGHT 2011 STMicroelectronics
 19 |   ******************************************************************************
 20 |   */
 21 | 
 22 | /* Define to prevent recursive inclusion -------------------------------------*/
 23 | #ifndef __STM8S_TIM3_H
 24 | #define __STM8S_TIM3_H
 25 | 
 26 | /* Includes ------------------------------------------------------------------*/
 27 | #include "stm8s.h"
 28 | 
 29 | /** @addtogroup STM8S_StdPeriph_Driver
 30 |   * @{
 31 |   */
 32 | 
 33 | /* Exported types ------------------------------------------------------------*/
 34 | 
 35 | /** @addtogroup TIM3_Exported_Types
 36 |   * @{
 37 |   */
 38 | 
 39 | /** TIM3 Forced Action */
 40 | typedef enum
 41 | {
 42 |   TIM3_FORCEDACTION_ACTIVE           = ((uint8_t)0x50),
 43 |   TIM3_FORCEDACTION_INACTIVE         = ((uint8_t)0x40)
 44 | } TIM3_ForcedAction_TypeDef;
 45 | 
 46 | #define IS_TIM3_FORCED_ACTION_OK(ACTION) (((ACTION) == TIM3_FORCEDACTION_ACTIVE) || \
 47 |     ((ACTION) == TIM3_FORCEDACTION_INACTIVE))
 48 | 
 49 | /** TIM3 Prescaler */
 50 | typedef enum
 51 | {
 52 |   TIM3_PRESCALER_1  = ((uint8_t)0x00),
 53 |   TIM3_PRESCALER_2    = ((uint8_t)0x01),
 54 |   TIM3_PRESCALER_4    = ((uint8_t)0x02),
 55 |   TIM3_PRESCALER_8     = ((uint8_t)0x03),
 56 |   TIM3_PRESCALER_16   = ((uint8_t)0x04),
 57 |   TIM3_PRESCALER_32     = ((uint8_t)0x05),
 58 |   TIM3_PRESCALER_64    = ((uint8_t)0x06),
 59 |   TIM3_PRESCALER_128   = ((uint8_t)0x07),
 60 |   TIM3_PRESCALER_256   = ((uint8_t)0x08),
 61 |   TIM3_PRESCALER_512   = ((uint8_t)0x09),
 62 |   TIM3_PRESCALER_1024  = ((uint8_t)0x0A),
 63 |   TIM3_PRESCALER_2048 = ((uint8_t)0x0B),
 64 |   TIM3_PRESCALER_4096   = ((uint8_t)0x0C),
 65 |   TIM3_PRESCALER_8192 = ((uint8_t)0x0D),
 66 |   TIM3_PRESCALER_16384 = ((uint8_t)0x0E),
 67 |   TIM3_PRESCALER_32768 = ((uint8_t)0x0F)
 68 | } TIM3_Prescaler_TypeDef;
 69 | 
 70 | #define IS_TIM3_PRESCALER_OK(PRESCALER) (((PRESCALER) == TIM3_PRESCALER_1  ) || \
 71 |     ((PRESCALER) == TIM3_PRESCALER_2    ) || \
 72 |     ((PRESCALER) == TIM3_PRESCALER_4    ) || \
 73 |     ((PRESCALER) == TIM3_PRESCALER_8  ) || \
 74 |     ((PRESCALER) == TIM3_PRESCALER_16   ) || \
 75 |     ((PRESCALER) == TIM3_PRESCALER_32     ) || \
 76 |     ((PRESCALER) == TIM3_PRESCALER_64    ) || \
 77 |     ((PRESCALER) == TIM3_PRESCALER_128   ) || \
 78 |     ((PRESCALER) == TIM3_PRESCALER_256   ) || \
 79 |     ((PRESCALER) == TIM3_PRESCALER_512   ) || \
 80 |     ((PRESCALER) == TIM3_PRESCALER_1024  ) || \
 81 |     ((PRESCALER) == TIM3_PRESCALER_2048 ) || \
 82 |     ((PRESCALER) == TIM3_PRESCALER_4096 ) || \
 83 |     ((PRESCALER) == TIM3_PRESCALER_8192 ) || \
 84 |     ((PRESCALER) == TIM3_PRESCALER_16384 ) || \
 85 |     ((PRESCALER) == TIM3_PRESCALER_32768 ))
 86 | 
 87 | /** TIM3 Output Compare and PWM modes */
 88 | typedef enum
 89 | {
 90 |   TIM3_OCMODE_TIMING     = ((uint8_t)0x00),
 91 |   TIM3_OCMODE_ACTIVE     = ((uint8_t)0x10),
 92 |   TIM3_OCMODE_INACTIVE   = ((uint8_t)0x20),
 93 |   TIM3_OCMODE_TOGGLE     = ((uint8_t)0x30),
 94 |   TIM3_OCMODE_PWM1       = ((uint8_t)0x60),
 95 |   TIM3_OCMODE_PWM2       = ((uint8_t)0x70)
 96 | } TIM3_OCMode_TypeDef;
 97 | 
 98 | #define IS_TIM3_OC_MODE_OK(MODE) (((MODE) ==  TIM3_OCMODE_TIMING) || \
 99 |                                   ((MODE) == TIM3_OCMODE_ACTIVE) || \
100 |                                   ((MODE) == TIM3_OCMODE_INACTIVE) || \
101 |                                   ((MODE) == TIM3_OCMODE_TOGGLE)|| \
102 |                                   ((MODE) == TIM3_OCMODE_PWM1) || \
103 |                                   ((MODE) == TIM3_OCMODE_PWM2))
104 | 
105 | #define IS_TIM3_OCM_OK(MODE)(((MODE) ==  TIM3_OCMODE_TIMING) || \
106 |                              ((MODE) == TIM3_OCMODE_ACTIVE) || \
107 |                              ((MODE) == TIM3_OCMODE_INACTIVE) || \
108 |                              ((MODE) == TIM3_OCMODE_TOGGLE)|| \
109 |                              ((MODE) == TIM3_OCMODE_PWM1) || \
110 |                              ((MODE) == TIM3_OCMODE_PWM2) || \
111 |                              ((MODE) == (uint8_t)TIM3_FORCEDACTION_ACTIVE) || \
112 |                              ((MODE) == (uint8_t)TIM3_FORCEDACTION_INACTIVE))
113 | 
114 | /** TIM3 One Pulse Mode */
115 | typedef enum
116 | {
117 |   TIM3_OPMODE_SINGLE                 = ((uint8_t)0x01),
118 |   TIM3_OPMODE_REPETITIVE             = ((uint8_t)0x00)
119 | } TIM3_OPMode_TypeDef;
120 | 
121 | #define IS_TIM3_OPM_MODE_OK(MODE) (((MODE) == TIM3_OPMODE_SINGLE) || \
122 |                                    ((MODE) == TIM3_OPMODE_REPETITIVE))
123 | 
124 | /** TIM3 Channel */
125 | 
126 | typedef enum
127 | {
128 |   TIM3_CHANNEL_1                     = ((uint8_t)0x00),
129 |   TIM3_CHANNEL_2                     = ((uint8_t)0x01)
130 | } TIM3_Channel_TypeDef;
131 | 
132 | #define IS_TIM3_CHANNEL_OK(CHANNEL) (((CHANNEL) == TIM3_CHANNEL_1) || \
133 |                                      ((CHANNEL) == TIM3_CHANNEL_2))
134 | 
135 | #define IS_TIM3_PWMI_CHANNEL_OK(CHANNEL) (((CHANNEL) == TIM3_CHANNEL_1) || \
136 |     ((CHANNEL) == TIM3_CHANNEL_2))
137 | 
138 | /** TIM3 Output Compare Polarity */
139 | typedef enum
140 | {
141 |   TIM3_OCPOLARITY_HIGH               = ((uint8_t)0x00),
142 |   TIM3_OCPOLARITY_LOW                = ((uint8_t)0x22)
143 | } TIM3_OCPolarity_TypeDef;
144 | 
145 | #define IS_TIM3_OC_POLARITY_OK(POLARITY) (((POLARITY) == TIM3_OCPOLARITY_HIGH) || \
146 |     ((POLARITY) == TIM3_OCPOLARITY_LOW))
147 | 
148 | /** TIM3 Output Compare states */
149 | typedef enum
150 | {
151 |   TIM3_OUTPUTSTATE_DISABLE           = ((uint8_t)0x00),
152 |   TIM3_OUTPUTSTATE_ENABLE            = ((uint8_t)0x11)
153 | } TIM3_OutputState_TypeDef;
154 | 
155 | #define IS_TIM3_OUTPUT_STATE_OK(STATE) (((STATE) == TIM3_OUTPUTSTATE_DISABLE) || \
156 |                                         ((STATE) == TIM3_OUTPUTSTATE_ENABLE))
157 | 
158 | /** TIM3 Input Capture Polarity */
159 | typedef enum
160 | {
161 |   TIM3_ICPOLARITY_RISING            = ((uint8_t)0x00),
162 |   TIM3_ICPOLARITY_FALLING           = ((uint8_t)0x44)
163 | } TIM3_ICPolarity_TypeDef;
164 | 
165 | #define IS_TIM3_IC_POLARITY_OK(POLARITY) (((POLARITY) == TIM3_ICPOLARITY_RISING) || \
166 |     ((POLARITY) == TIM3_ICPOLARITY_FALLING))
167 | 
168 | /** TIM3 Input Capture Selection */
169 | typedef enum
170 | {
171 |   TIM3_ICSELECTION_DIRECTTI          = ((uint8_t)0x01),
172 |   TIM3_ICSELECTION_INDIRECTTI        = ((uint8_t)0x02),
173 |   TIM3_ICSELECTION_TRGI              = ((uint8_t)0x03)
174 | } TIM3_ICSelection_TypeDef;
175 | 
176 | #define IS_TIM3_IC_SELECTION_OK(SELECTION) (((SELECTION) == TIM3_ICSELECTION_DIRECTTI) || \
177 |     ((SELECTION) == TIM3_ICSELECTION_INDIRECTTI) || \
178 |     ((SELECTION) == TIM3_ICSELECTION_TRGI))
179 | 
180 | /** TIM3 Input Capture Prescaler */
181 | typedef enum
182 | {
183 |   TIM3_ICPSC_DIV1                    = ((uint8_t)0x00),
184 |   TIM3_ICPSC_DIV2                    = ((uint8_t)0x04),
185 |   TIM3_ICPSC_DIV4                    = ((uint8_t)0x08),
186 |   TIM3_ICPSC_DIV8                    = ((uint8_t)0x0C)
187 | } TIM3_ICPSC_TypeDef;
188 | 
189 | #define IS_TIM3_IC_PRESCALER_OK(PRESCALER) (((PRESCALER) == TIM3_ICPSC_DIV1) || \
190 |     ((PRESCALER) == TIM3_ICPSC_DIV2) || \
191 |     ((PRESCALER) == TIM3_ICPSC_DIV4) || \
192 |     ((PRESCALER) == TIM3_ICPSC_DIV8))
193 | 
194 | /** TIM3 Input Capture Filer Value */
195 | #define IS_TIM3_IC_FILTER_OK(ICFILTER) ((ICFILTER) <= 0x0F)
196 | 
197 | /** TIM3 interrupt sources */
198 | typedef enum
199 | {
200 |   TIM3_IT_UPDATE                     = ((uint8_t)0x01),
201 |   TIM3_IT_CC1                        = ((uint8_t)0x02),
202 |   TIM3_IT_CC2                        = ((uint8_t)0x04)
203 | } TIM3_IT_TypeDef;
204 | 
205 | #define IS_TIM3_IT_OK(IT) (((IT) != 0x00) && ((IT) <= 0x07))
206 | 
207 | #define IS_TIM3_GET_IT_OK(IT) (((IT) == TIM3_IT_UPDATE) || \
208 |                                ((IT) == TIM3_IT_CC1) || \
209 |                                ((IT) == TIM3_IT_CC2))
210 | 
211 | /** TIM3 Prescaler Reload Mode */
212 | typedef enum
213 | {
214 |   TIM3_PSCRELOADMODE_UPDATE          = ((uint8_t)0x00),
215 |   TIM3_PSCRELOADMODE_IMMEDIATE       = ((uint8_t)0x01)
216 | } TIM3_PSCReloadMode_TypeDef;
217 | 
218 | #define IS_TIM3_PRESCALER_RELOAD_OK(RELOAD) (((RELOAD) == TIM3_PSCRELOADMODE_UPDATE) || \
219 |     ((RELOAD) == TIM3_PSCRELOADMODE_IMMEDIATE))
220 | 
221 | /** TIM3 Event Source */
222 | typedef enum
223 | {
224 |   TIM3_EVENTSOURCE_UPDATE            = ((uint8_t)0x01),
225 |   TIM3_EVENTSOURCE_CC1               = ((uint8_t)0x02),
226 |   TIM3_EVENTSOURCE_CC2               = ((uint8_t)0x04)
227 | } TIM3_EventSource_TypeDef;
228 | 
229 | #define IS_TIM3_EVENT_SOURCE_OK(SOURCE) (((SOURCE) != 0x00))
230 | 
231 | /** TIM3 Update Source */
232 | typedef enum
233 | {
234 |   TIM3_UPDATESOURCE_GLOBAL           = ((uint8_t)0x00),
235 |   TIM3_UPDATESOURCE_REGULAR          = ((uint8_t)0x01)
236 | } TIM3_UpdateSource_TypeDef;
237 | 
238 | #define IS_TIM3_UPDATE_SOURCE_OK(SOURCE) (((SOURCE) == TIM3_UPDATESOURCE_GLOBAL) || \
239 |     ((SOURCE) == TIM3_UPDATESOURCE_REGULAR))
240 | 
241 | /** TIM3 Flags */
242 | typedef enum
243 | {
244 |   TIM3_FLAG_UPDATE                   = ((uint16_t)0x0001),
245 |   TIM3_FLAG_CC1                      = ((uint16_t)0x0002),
246 |   TIM3_FLAG_CC2                      = ((uint16_t)0x0004),
247 |   TIM3_FLAG_CC1OF                    = ((uint16_t)0x0200),
248 |   TIM3_FLAG_CC2OF                    = ((uint16_t)0x0400)
249 | } TIM3_FLAG_TypeDef;
250 | 
251 | #define IS_TIM3_GET_FLAG_OK(FLAG) (((FLAG) == TIM3_FLAG_UPDATE) || \
252 |                                    ((FLAG) == TIM3_FLAG_CC1) || \
253 |                                    ((FLAG) == TIM3_FLAG_CC2) || \
254 |                                    ((FLAG) == TIM3_FLAG_CC1OF) || \
255 |                                    ((FLAG) == TIM3_FLAG_CC2OF) )
256 | 
257 | #define IS_TIM3_CLEAR_FLAG_OK(FLAG) ((((uint16_t)(FLAG) & 0xF9F8) == 0x0000) && ((uint16_t)(FLAG)!= 0x0000))
258 | 
259 | /**
260 |   * @}
261 |   */
262 | 
263 | /* Exported macro ------------------------------------------------------------*/
264 | 
265 | /* Exported functions --------------------------------------------------------*/
266 | 
267 | /** @addtogroup TIM3_Exported_Functions
268 |   * @{
269 |   */
270 | 
271 | void TIM3_DeInit(void);
272 | void TIM3_TimeBaseInit(TIM3_Prescaler_TypeDef TIM3_Prescaler, uint16_t TIM3_Period);
273 | void TIM3_OC1Init(TIM3_OCMode_TypeDef TIM3_OCMode, TIM3_OutputState_TypeDef TIM3_OutputState, uint16_t TIM3_Pulse, TIM3_OCPolarity_TypeDef TIM3_OCPolarity);
274 | void TIM3_OC2Init(TIM3_OCMode_TypeDef TIM3_OCMode, TIM3_OutputState_TypeDef TIM3_OutputState, uint16_t TIM3_Pulse, TIM3_OCPolarity_TypeDef TIM3_OCPolarity);
275 | void TIM3_ICInit(TIM3_Channel_TypeDef TIM3_Channel, TIM3_ICPolarity_TypeDef TIM3_ICPolarity, TIM3_ICSelection_TypeDef TIM3_ICSelection,  TIM3_ICPSC_TypeDef TIM3_ICPrescaler, uint8_t TIM3_ICFilter);
276 | void TIM3_PWMIConfig(TIM3_Channel_TypeDef TIM3_Channel, TIM3_ICPolarity_TypeDef TIM3_ICPolarity, TIM3_ICSelection_TypeDef TIM3_ICSelection,  TIM3_ICPSC_TypeDef TIM3_ICPrescaler, uint8_t TIM3_ICFilter);
277 | void TIM3_Cmd(FunctionalState NewState);
278 | void TIM3_ITConfig(TIM3_IT_TypeDef TIM3_IT, FunctionalState NewState);
279 | void TIM3_InternalClockConfig(void);
280 | void TIM3_UpdateDisableConfig(FunctionalState NewState);
281 | void TIM3_UpdateRequestConfig(TIM3_UpdateSource_TypeDef TIM3_UpdateSource);
282 | void TIM3_SelectOnePulseMode(TIM3_OPMode_TypeDef TIM3_OPMode);
283 | void TIM3_PrescalerConfig(TIM3_Prescaler_TypeDef Prescaler, TIM3_PSCReloadMode_TypeDef TIM3_PSCReloadMode);
284 | void TIM3_ForcedOC1Config(TIM3_ForcedAction_TypeDef TIM3_ForcedAction);
285 | void TIM3_ForcedOC2Config(TIM3_ForcedAction_TypeDef TIM3_ForcedAction);
286 | void TIM3_ARRPreloadConfig(FunctionalState NewState);
287 | void TIM3_CCPreloadControl(FunctionalState NewState);
288 | void TIM3_OC1PreloadConfig(FunctionalState NewState);
289 | void TIM3_OC2PreloadConfig(FunctionalState NewState);
290 | void TIM3_GenerateEvent(TIM3_EventSource_TypeDef TIM3_EventSource);
291 | void TIM3_OC1PolarityConfig(TIM3_OCPolarity_TypeDef TIM3_OCPolarity);
292 | void TIM3_OC2PolarityConfig(TIM3_OCPolarity_TypeDef TIM3_OCPolarity);
293 | void TIM3_CCxCmd(TIM3_Channel_TypeDef TIM3_Channel, FunctionalState NewState);
294 | void TIM3_SelectOCxM(TIM3_Channel_TypeDef TIM3_Channel, TIM3_OCMode_TypeDef TIM3_OCMode);
295 | void TIM3_SetCounter(uint16_t Counter);
296 | void TIM3_SetAutoreload(uint16_t Autoreload);
297 | void TIM3_SetCompare1(uint16_t Compare1);
298 | void TIM3_SetCompare2(uint16_t Compare2);
299 | void TIM3_SetIC1Prescaler(TIM3_ICPSC_TypeDef TIM3_IC1Prescaler);
300 | void TIM3_SetIC2Prescaler(TIM3_ICPSC_TypeDef TIM3_IC2Prescaler);
301 | uint16_t TIM3_GetCapture1(void);
302 | uint16_t TIM3_GetCapture2(void);
303 | uint16_t TIM3_GetCounter(void);
304 | TIM3_Prescaler_TypeDef TIM3_GetPrescaler(void);
305 | FlagStatus TIM3_GetFlagStatus(TIM3_FLAG_TypeDef TIM3_FLAG);
306 | void TIM3_ClearFlag(TIM3_FLAG_TypeDef TIM3_FLAG);
307 | ITStatus TIM3_GetITStatus(TIM3_IT_TypeDef TIM3_IT);
308 | void TIM3_ClearITPendingBit(TIM3_IT_TypeDef TIM3_IT);
309 | 
310 | /**
311 |   * @}
312 |   */
313 | 
314 | #endif /* __STM8S_TIM3_H */
315 | 
316 | /**
317 |   * @}
318 |   */
319 | 
320 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
321 | 
--------------------------------------------------------------------------------
/mcu/std_lib/inc/stm8s_tim4.h:
--------------------------------------------------------------------------------
  1 | /**
  2 |   ******************************************************************************
  3 |   * @file    stm8s_tim4.h
  4 |   * @author  MCD Application Team
  5 |   * @version V2.1.0
  6 |   * @date    18-November-2011
  7 |   * @brief   This file contains all functions prototype and macros for the TIM4 peripheral.
  8 |   ******************************************************************************
  9 |   * @attention
 10 |   *
 11 |   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 12 |   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 13 |   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 14 |   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 15 |   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 16 |   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 17 |   *
 18 |   * © COPYRIGHT 2011 STMicroelectronics
 19 |   ******************************************************************************
 20 |   */
 21 | 
 22 | /* Define to prevent recursive inclusion -------------------------------------*/
 23 | #ifndef __STM8S_TIM4_H
 24 | #define __STM8S_TIM4_H
 25 | 
 26 | /* Includes ------------------------------------------------------------------*/
 27 | #include "stm8s.h"
 28 | 
 29 | /** @addtogroup STM8S_StdPeriph_Driver
 30 |   * @{
 31 |   */
 32 | 
 33 | /* Exported types ------------------------------------------------------------*/
 34 | 
 35 | /** @addtogroup TIM4_Exported_Types
 36 |   * @{
 37 |   */
 38 | 
 39 | 
 40 | 
 41 | /** TIM4 Prescaler */
 42 | typedef enum
 43 | {
 44 |   TIM4_PRESCALER_1  = ((uint8_t)0x00),
 45 |   TIM4_PRESCALER_2    = ((uint8_t)0x01),
 46 |   TIM4_PRESCALER_4    = ((uint8_t)0x02),
 47 |   TIM4_PRESCALER_8     = ((uint8_t)0x03),
 48 |   TIM4_PRESCALER_16   = ((uint8_t)0x04),
 49 |   TIM4_PRESCALER_32     = ((uint8_t)0x05),
 50 |   TIM4_PRESCALER_64    = ((uint8_t)0x06),
 51 |   TIM4_PRESCALER_128   = ((uint8_t)0x07)
 52 | } TIM4_Prescaler_TypeDef;
 53 | 
 54 | #define IS_TIM4_PRESCALER_OK(PRESCALER) (((PRESCALER) == TIM4_PRESCALER_1  ) || \
 55 |     ((PRESCALER) == TIM4_PRESCALER_2    ) || \
 56 |     ((PRESCALER) == TIM4_PRESCALER_4    ) || \
 57 |     ((PRESCALER) == TIM4_PRESCALER_8  ) || \
 58 |     ((PRESCALER) == TIM4_PRESCALER_16   ) || \
 59 |     ((PRESCALER) == TIM4_PRESCALER_32     ) || \
 60 |     ((PRESCALER) == TIM4_PRESCALER_64    ) || \
 61 |     ((PRESCALER) == TIM4_PRESCALER_128   ) )
 62 | 
 63 | /** TIM4 One Pulse Mode */
 64 | typedef enum
 65 | {
 66 |   TIM4_OPMODE_SINGLE                 = ((uint8_t)0x01),
 67 |   TIM4_OPMODE_REPETITIVE             = ((uint8_t)0x00)
 68 | } TIM4_OPMode_TypeDef;
 69 | 
 70 | #define IS_TIM4_OPM_MODE_OK(MODE) (((MODE) == TIM4_OPMODE_SINGLE) || \
 71 |                                    ((MODE) == TIM4_OPMODE_REPETITIVE))
 72 | 
 73 | /** TIM4 Prescaler Reload Mode */
 74 | typedef enum
 75 | {
 76 |   TIM4_PSCRELOADMODE_UPDATE          = ((uint8_t)0x00),
 77 |   TIM4_PSCRELOADMODE_IMMEDIATE       = ((uint8_t)0x01)
 78 | } TIM4_PSCReloadMode_TypeDef;
 79 | 
 80 | #define IS_TIM4_PRESCALER_RELOAD_OK(RELOAD) (((RELOAD) == TIM4_PSCRELOADMODE_UPDATE) || \
 81 |     ((RELOAD) == TIM4_PSCRELOADMODE_IMMEDIATE))
 82 | 
 83 | /** TIM4 Update Source */
 84 | typedef enum
 85 | {
 86 |   TIM4_UPDATESOURCE_GLOBAL           = ((uint8_t)0x00),
 87 |   TIM4_UPDATESOURCE_REGULAR          = ((uint8_t)0x01)
 88 | } TIM4_UpdateSource_TypeDef;
 89 | 
 90 | #define IS_TIM4_UPDATE_SOURCE_OK(SOURCE) (((SOURCE) == TIM4_UPDATESOURCE_GLOBAL) || \
 91 |     ((SOURCE) == TIM4_UPDATESOURCE_REGULAR))
 92 | 
 93 | /** TIM4 Event Source */
 94 | typedef enum
 95 | {
 96 |   TIM4_EVENTSOURCE_UPDATE            = ((uint8_t)0x01)
 97 | }TIM4_EventSource_TypeDef;
 98 | 
 99 | #define IS_TIM4_EVENT_SOURCE_OK(SOURCE) (((SOURCE) == 0x01))
100 | 
101 | /** TIM4 Flags */
102 | typedef enum
103 | {
104 |   TIM4_FLAG_UPDATE                   = ((uint8_t)0x01)
105 | }TIM4_FLAG_TypeDef;
106 | 
107 | #define IS_TIM4_GET_FLAG_OK(FLAG) ((FLAG) == TIM4_FLAG_UPDATE)
108 | 
109 | 
110 | 
111 | /** TIM4 interrupt sources */
112 | typedef enum
113 | {
114 |   TIM4_IT_UPDATE                     = ((uint8_t)0x01)
115 | }TIM4_IT_TypeDef;
116 | 
117 | #define IS_TIM4_IT_OK(IT) ((IT) == TIM4_IT_UPDATE)
118 | 
119 | 
120 | 
121 | /**
122 |   * @}
123 |   */
124 | 
125 | /* Exported macro ------------------------------------------------------------*/
126 | 
127 | /* Exported functions --------------------------------------------------------*/
128 | 
129 | /** @addtogroup TIM4_Exported_Functions
130 |   * @{
131 |   */
132 | void TIM4_DeInit(void);
133 | void TIM4_TimeBaseInit(TIM4_Prescaler_TypeDef TIM4_Prescaler, uint8_t TIM4_Period);
134 | void TIM4_Cmd(FunctionalState NewState);
135 | void TIM4_ITConfig(TIM4_IT_TypeDef TIM4_IT, FunctionalState NewState);
136 | void TIM4_UpdateDisableConfig(FunctionalState NewState);
137 | void TIM4_UpdateRequestConfig(TIM4_UpdateSource_TypeDef TIM4_UpdateSource);
138 | void TIM4_SelectOnePulseMode(TIM4_OPMode_TypeDef TIM4_OPMode);
139 | void TIM4_PrescalerConfig(TIM4_Prescaler_TypeDef Prescaler, TIM4_PSCReloadMode_TypeDef TIM4_PSCReloadMode);
140 | void TIM4_ARRPreloadConfig(FunctionalState NewState);
141 | void TIM4_GenerateEvent(TIM4_EventSource_TypeDef TIM4_EventSource);
142 | void TIM4_SetCounter(uint8_t Counter);
143 | void TIM4_SetAutoreload(uint8_t Autoreload);
144 | uint8_t TIM4_GetCounter(void);
145 | TIM4_Prescaler_TypeDef TIM4_GetPrescaler(void);
146 | FlagStatus TIM4_GetFlagStatus(TIM4_FLAG_TypeDef TIM4_FLAG);
147 | void TIM4_ClearFlag(TIM4_FLAG_TypeDef TIM4_FLAG);
148 | ITStatus TIM4_GetITStatus(TIM4_IT_TypeDef TIM4_IT);
149 | void TIM4_ClearITPendingBit(TIM4_IT_TypeDef TIM4_IT);
150 | 
151 | 
152 | /**
153 |   * @}
154 |   */
155 | 
156 | #endif /* __STM8S_TIM4_H */
157 | 
158 | /**
159 |   * @}
160 |   */
161 | 
162 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
163 | 
--------------------------------------------------------------------------------
/mcu/std_lib/inc/stm8s_tim6.h:
--------------------------------------------------------------------------------
  1 | /**
  2 |   ******************************************************************************
  3 |   * @file    stm8s_tim6.h
  4 |   * @author  MCD Application Team
  5 |   * @version V2.1.0
  6 |   * @date    18-November-2011
  7 |   * @brief   This file contains all functions prototype and macros for the TIM6 peripheral.
  8 |   ******************************************************************************
  9 |   * @attention
 10 |   *
 11 |   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 12 |   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 13 |   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 14 |   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 15 |   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 16 |   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 17 |   *
 18 |   * © COPYRIGHT 2011 STMicroelectronics
 19 |   ******************************************************************************
 20 |   */
 21 | 
 22 | /* Define to prevent recursive inclusion -------------------------------------*/
 23 | #ifndef __STM8S_TIM6_H
 24 | #define __STM8S_TIM6_H
 25 | 
 26 | /* Includes ------------------------------------------------------------------*/
 27 | #include "stm8s.h"
 28 | 
 29 | /** @addtogroup STM8S_StdPeriph_Driver
 30 |   * @{
 31 |   */
 32 | 
 33 | /* Exported variables ------------------------------------------------------- */
 34 | /* Exported types ------------------------------------------------------------*/
 35 | 
 36 | /** @addtogroup TIM6_Exported_Types
 37 |   * @{
 38 |   */
 39 | 
 40 | 
 41 | /**
 42 |   * @brief  TIM6 Prescaler
 43 |   */
 44 | typedef enum
 45 | {
 46 |     TIM6_PRESCALER_1      = ((uint8_t)0x00),  /*!< Time base Prescaler = 1 (No effect)*/
 47 |     TIM6_PRESCALER_2      = ((uint8_t)0x01),  /*!< Time base Prescaler = 2 */
 48 |     TIM6_PRESCALER_4      = ((uint8_t)0x02),  /*!< Time base Prescaler = 4 */
 49 |     TIM6_PRESCALER_8      = ((uint8_t)0x03),  /*!< Time base Prescaler = 8 */
 50 |     TIM6_PRESCALER_16     = ((uint8_t)0x04),  /*!< Time base Prescaler = 16 */
 51 |     TIM6_PRESCALER_32     = ((uint8_t)0x05),  /*!< Time base Prescaler = 32 */
 52 |     TIM6_PRESCALER_64     = ((uint8_t)0x06),  /*!< Time base Prescaler = 64 */
 53 |     TIM6_PRESCALER_128    = ((uint8_t)0x07)  /*!< Time base Prescaler = 128 */
 54 | }TIM6_Prescaler_TypeDef;
 55 | 
 56 | /**
 57 |   * @brief  TIM6 One Pulse Mode
 58 |   */
 59 | typedef enum
 60 | {
 61 |     TIM6_OPMODE_SINGLE      = ((uint8_t)0x01),  /*!< Single one Pulse mode (OPM Active) */
 62 |     TIM6_OPMODE_REPETITIVE  = ((uint8_t)0x00)   /*!< Repetitive Pulse mode (OPM inactive) */
 63 | }TIM6_OPMode_TypeDef;
 64 | 
 65 | /**
 66 |   * @brief  TIM6 Prescaler Reload Mode
 67 |   */
 68 | typedef enum
 69 | {
 70 |     TIM6_PSCRELOADMODE_UPDATE      =((uint8_t)0x00),  /*!< Prescaler value is reloaded at every update*/
 71 |     TIM6_PSCRELOADMODE_IMMEDIATE   =((uint8_t)0x01)    /*!< Prescaler value is reloaded immediatly*/
 72 | }TIM6_PSCReloadMode_TypeDef;
 73 | 
 74 | /**
 75 |   * @brief  TIM6 Update Source
 76 |   */
 77 | typedef enum
 78 | {
 79 |     TIM6_UPDATESOURCE_GLOBAL   =((uint8_t)0x00),  /*!< Global Update request source */
 80 |     TIM6_UPDATESOURCE_REGULAR  =((uint8_t)0x01)    /*!< Regular Update request source */
 81 | }TIM6_UpdateSource_TypeDef;
 82 | 
 83 | /**
 84 |   * @brief  TIM6 Event Source
 85 |   */
 86 | typedef enum
 87 | {
 88 |     TIM6_EVENTSOURCE_UPDATE    = ((uint8_t)0x01),    /*!< Update Event*/
 89 |     TIM6_EVENTSOURCE_TRIGGER   = ((uint8_t)0x40)    /*!< Trigger Event*/
 90 | }TIM6_EventSource_TypeDef;
 91 | 
 92 | /**
 93 |   * @brief  TIM6 Trigger Output Source
 94 |   */
 95 | typedef enum
 96 | {
 97 |     TIM6_TRGOSOURCE_RESET    = ((uint8_t)0x00),    /*!< Trigger Output source = Reset*/
 98 |     TIM6_TRGOSOURCE_ENABLE   = ((uint8_t)0x10),    /*!< Trigger Output source = TIM5 is enabled*/
 99 |     TIM6_TRGOSOURCE_UPDATE   = ((uint8_t)0x20)    /*!< Trigger Output source = Update event*/
100 | }TIM6_TRGOSource_TypeDef;
101 | 
102 | /**
103 |   * @brief  TIM6 Slave Mode
104 |   */
105 | typedef enum
106 | {
107 |     TIM6_SLAVEMODE_DISABLE    = ((uint8_t)0x00),   /*!< Disable slave mode to clock the prescaler directly with the internal clock */
108 |     TIM6_SLAVEMODE_RESET      = ((uint8_t)0x04),   /*!< Slave Mode Selection  = Reset*/
109 |     TIM6_SLAVEMODE_GATED      = ((uint8_t)0x05),   /*!< Slave Mode Selection  = Gated*/
110 |     TIM6_SLAVEMODE_TRIGGER    = ((uint8_t)0x06),    /*!< Slave Mode Selection  = Trigger*/
111 |     TIM6_SLAVEMODE_EXTERNAL1  = ((uint8_t)0x07)    /*!< Slave Mode Selection  = External 1*/
112 | }TIM6_SlaveMode_TypeDef;
113 | 
114 | /**
115 |   * @brief  TIM6 Flags
116 |   */
117 | typedef enum
118 | {
119 |     TIM6_FLAG_UPDATE   = ((uint8_t)0x01),    /*!< Update Flag */
120 |     TIM6_FLAG_TRIGGER  = ((uint8_t)0x40)    /*!< Trigger Flag */
121 | }TIM6_FLAG_TypeDef;
122 | 
123 | /**
124 |   * @brief  TIM6 interrupt sources
125 |   */
126 | typedef enum
127 | {
128 |     TIM6_IT_UPDATE   = ((uint8_t)0x01),    /*!< Update Interrupt*/
129 |     TIM6_IT_TRIGGER  = ((uint8_t)0x40)    /*!< Trigger  Interrupt*/
130 | }TIM6_IT_TypeDef;
131 | 
132 | /**
133 |   * @brief  TIM6 Internal Trigger Selection
134 |   */
135 | typedef enum
136 | {
137 |     TIM6_TS_TIM1  = ((uint8_t)0x20),/*!< TRIG Input source =  TIM1 TRIG Output  */
138 |     TIM6_TS_TIM5  = ((uint8_t)0x30) /*!< TRIG Input source =  TIM5 TRIG Output  */
139 | }TIM6_TS_TypeDef;
140 | 
141 | /**
142 |   * @}
143 |   */
144 | 
145 | /* Exported constants --------------------------------------------------------*/
146 | /* Exported macros -----------------------------------------------------------*/
147 | /* Private macros ------------------------------------------------------------*/
148 | 
149 | /** @addtogroup TIM6_Private_Macros
150 |   * @{
151 |   */
152 | 
153 | /**
154 |   * @brief  Macro used by the assert function to check the different functions parameters.
155 |   */
156 | 
157 | /**
158 |   * @brief  Macro TIM6 Prescaler
159 |   */
160 | #define IS_TIM6_PRESCALER_OK(PRESCALER)  \
161 |    (((PRESCALER) == TIM6_PRESCALER_1)    || \
162 |     ((PRESCALER) == TIM6_PRESCALER_2)    || \
163 |     ((PRESCALER) == TIM6_PRESCALER_4)    || \
164 |     ((PRESCALER) == TIM6_PRESCALER_8)    || \
165 |     ((PRESCALER) == TIM6_PRESCALER_16)   || \
166 |     ((PRESCALER) == TIM6_PRESCALER_32)   || \
167 |     ((PRESCALER) == TIM6_PRESCALER_64)   || \
168 |     ((PRESCALER) == TIM6_PRESCALER_128))
169 | /**
170 |   * @brief  Macro TIM6 One Pulse Mode
171 |   */
172 | #define IS_TIM6_OPM_MODE_OK(MODE)  \
173 |    (((MODE) == TIM6_OPMODE_SINGLE) || \
174 |     ((MODE) == TIM6_OPMODE_REPETITIVE))
175 | 
176 | /**
177 |   * @brief  Macro TIM6 Prescaler reload
178 |   */
179 | #define IS_TIM6_PRESCALER_RELOAD_OK(RELOAD) \
180 |    (((RELOAD) == TIM6_PSCRELOADMODE_UPDATE) || \
181 |     ((RELOAD) == TIM6_PSCRELOADMODE_IMMEDIATE))
182 | /**
183 |   * @brief  Macro TIM6 Update source
184 |   */
185 | #define IS_TIM6_UPDATE_SOURCE_OK(SOURCE) \
186 |    (((SOURCE) == TIM6_UPDATESOURCE_GLOBAL) || \
187 |     ((SOURCE) == TIM6_UPDATESOURCE_REGULAR))
188 | /**
189 |   * @brief  Macro TIM6 Event source
190 |   */
191 | #define IS_TIM6_EVENT_SOURCE_OK(SOURCE) \
192 |    ((((SOURCE) & (uint8_t)0xBE) == 0x00) && \
193 |     ((SOURCE) != 0x00))
194 | 
195 | /**
196 |   * @brief  Macro TIM6 TRGO source
197 |   */
198 | #define IS_TIM6_TRGO_SOURCE_OK(SOURCE) \
199 |    (((SOURCE) == TIM6_TRGOSOURCE_RESET) || \
200 |     ((SOURCE) == TIM6_TRGOSOURCE_ENABLE)|| \
201 |     ((SOURCE) == TIM6_TRGOSOURCE_UPDATE))
202 | /**
203 |   * @brief  Macro TIM6 Slave mode
204 |   */
205 | #define IS_TIM6_SLAVE_MODE_OK(MODE) \
206 |    (((MODE) == TIM6_SLAVEMODE_DISABLE) || \
207 |     ((MODE) == TIM6_SLAVEMODE_RESET)   || \
208 |     ((MODE) == TIM6_SLAVEMODE_GATED)   || \
209 |     ((MODE) == TIM6_SLAVEMODE_TRIGGER) || \
210 |     ((MODE) == TIM6_SLAVEMODE_EXTERNAL1))
211 | /**
212 |   * @brief  Macro TIM6 Flags
213 |   */
214 | #define IS_TIM6_GET_FLAG_OK(FLAG) \
215 |    (((FLAG) == TIM6_FLAG_UPDATE) || \
216 |     ((FLAG) == TIM6_FLAG_TRIGGER))
217 | 
218 | #define IS_TIM6_CLEAR_FLAG_OK(FLAG) \
219 |    ((((FLAG) & (uint8_t)0xBE) == 0x00) && ((FLAG) != 0x00))
220 | /**
221 |   * @brief  Macro TIM6 interrupts
222 |   */
223 | #define IS_TIM6_IT_OK(IT) \
224 |    (((IT) != 0x00) && \
225 |     (((IT) & (uint8_t)(~(uint8_t)(0x41)))== 0x00))
226 | 
227 | #define IS_TIM6_GET_IT_OK(IT) \
228 |    (((IT) == TIM6_IT_UPDATE) || \
229 |     ((IT) == TIM6_IT_TRIGGER))
230 | /**
231 |   * @brief  Macro TIM6 Trigger selection
232 |   */
233 | #define IS_TIM6_TRIGGER_SELECTION_OK(SELECTION) \
234 |    (((SELECTION) == TIM6_TS_TIM5) || \
235 |     ((SELECTION) == TIM6_TS_TIM1))
236 | /**
237 |  * @}
238 |  */
239 | 
240 | /* Exported functions --------------------------------------------------------*/
241 | 
242 | /** @addtogroup TIM6_Exported_Functions
243 |   * @{
244 |   */
245 | 
246 | void TIM6_DeInit(void);
247 | void TIM6_TimeBaseInit(TIM6_Prescaler_TypeDef TIM6_Prescaler, uint8_t TIM6_Period);
248 | void TIM6_Cmd(FunctionalState NewState);
249 | void TIM6_UpdateDisableConfig(FunctionalState NewState);
250 | void TIM6_UpdateRequestConfig(TIM6_UpdateSource_TypeDef TIM6_UpdateSource);
251 | void TIM6_SelectOnePulseMode(TIM6_OPMode_TypeDef TIM6_OPMode);
252 | void TIM6_PrescalerConfig(TIM6_Prescaler_TypeDef Prescaler, TIM6_PSCReloadMode_TypeDef TIM6_PSCReloadMode);
253 | void TIM6_ARRPreloadConfig(FunctionalState NewState);
254 | void TIM6_SetCounter(uint8_t Counter);
255 | void TIM6_SetAutoreload(uint8_t Autoreload);
256 | uint8_t TIM6_GetCounter(void);
257 | TIM6_Prescaler_TypeDef TIM6_GetPrescaler(void);
258 | void TIM6_ITConfig(TIM6_IT_TypeDef TIM6_IT, FunctionalState NewState);
259 | void TIM6_ClearFlag(TIM6_FLAG_TypeDef TIM6_FLAG);
260 | ITStatus TIM6_GetITStatus(TIM6_IT_TypeDef TIM6_IT);
261 | void TIM6_GenerateEvent(TIM6_EventSource_TypeDef TIM6_EventSource);
262 | FlagStatus TIM6_GetFlagStatus(TIM6_FLAG_TypeDef TIM6_FLAG);
263 | void TIM6_ClearITPendingBit(TIM6_IT_TypeDef TIM6_IT);
264 | void TIM6_SelectOutputTrigger(TIM6_TRGOSource_TypeDef TIM6_TRGOSource);
265 | void TIM6_SelectMasterSlaveMode(FunctionalState NewState);
266 | void TIM6_SelectInputTrigger(TIM6_TS_TypeDef TIM6_InputTriggerSource);
267 | void TIM6_InternalClockConfig(void);
268 | void TIM6_SelectSlaveMode(TIM6_SlaveMode_TypeDef TIM6_SlaveMode);
269 | 
270 | /**
271 |  * @}
272 |  */
273 | 
274 | #endif /* __STM8S_TIM6_H */
275 | 
276 | /**
277 |   * @}
278 |   */
279 |   
280 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
281 | 
--------------------------------------------------------------------------------
/mcu/std_lib/inc/stm8s_wwdg.h:
--------------------------------------------------------------------------------
 1 | /**
 2 |   ********************************************************************************
 3 |   * @file    stm8s_wwdg.h
 4 |   * @author  MCD Application Team
 5 |   * @version V2.1.0
 6 |   * @date    18-November-2011
 7 |   * @brief   This file contains all functions prototype and macros for the WWDG peripheral.
 8 |   ******************************************************************************
 9 |   * @attention
10 |   *
11 |   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
12 |   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
13 |   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
14 |   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
15 |   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
16 |   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
17 |   *
18 |   * © COPYRIGHT 2011 STMicroelectronics
19 |   ******************************************************************************
20 |   */
21 | 
22 | /* Define to prevent recursive inclusion -------------------------------------*/
23 | #ifndef __STM8S_WWDG_H
24 | #define __STM8S_WWDG_H
25 | 
26 | /* Includes ------------------------------------------------------------------*/
27 | #include "stm8s.h"
28 | 
29 | /** @addtogroup STM8S_StdPeriph_Driver
30 |   * @{
31 |   */
32 | 
33 | /* Private macros ------------------------------------------------------------*/
34 | 
35 | /** @addtogroup WWDG_Private_Macros
36 |   * @{
37 |   */
38 | 
39 | /**
40 |   * @brief  Macro used by the assert function in order to check the
41 |   * values of the window register.
42 |   */
43 | #define IS_WWDG_WINDOWLIMITVALUE_OK(WindowLimitValue) ((WindowLimitValue) <= 0x7F)
44 | 
45 | /**
46 |   * @brief  Macro used by the assert function in order to check the different
47 |   * values of the counter register.
48 |   */
49 | #define IS_WWDG_COUNTERVALUE_OK(CounterValue) ((CounterValue) <= 0x7F)
50 | 
51 | /**
52 |   * @}
53 |   */
54 | 
55 | /* Exported types ------------------------------------------------------------*/
56 | 
57 | /* Exported functions ------------------------------------------------------- */
58 | 
59 | /** @addtogroup WWDG_Exported_Functions
60 |   * @{
61 |   */
62 | 
63 | void WWDG_Init(uint8_t Counter, uint8_t WindowValue);
64 | void WWDG_SetCounter(uint8_t Counter);
65 | uint8_t WWDG_GetCounter(void);
66 | void WWDG_SWReset(void);
67 | void WWDG_SetWindowValue(uint8_t WindowValue);
68 | 
69 | 
70 | /**
71 |   * @}
72 |   */
73 | 
74 | #endif /* __STM8S_WWDG_H */
75 | 
76 | /**
77 |   * @}
78 |   */
79 | 
80 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
81 | 
--------------------------------------------------------------------------------
/mcu/std_lib/src/stm8s_awu.c:
--------------------------------------------------------------------------------
  1 | /**
  2 |   ******************************************************************************
  3 |   * @file    stm8s_awu.c
  4 |   * @author  MCD Application Team
  5 |   * @version V2.1.0
  6 |   * @date    18-November-2011
  7 |   * @brief   This file contains all the functions for the AWU peripheral.  
  8 |   ******************************************************************************
  9 |   * @attention
 10 |   *
 11 |   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 12 |   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 13 |   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 14 |   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 15 |   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 16 |   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 17 |   *
 18 |   * © COPYRIGHT 2011 STMicroelectronics
 19 |   ******************************************************************************
 20 |   */
 21 | 
 22 | /* Includes ------------------------------------------------------------------*/
 23 | #include "stm8s_awu.h"
 24 | 
 25 | /** @addtogroup STM8S_StdPeriph_Driver
 26 |   * @{
 27 |   */
 28 | /* Private typedef -----------------------------------------------------------*/
 29 | /* Private define ------------------------------------------------------------*/
 30 | /* Private macro -------------------------------------------------------------*/
 31 | /* Private variables ---------------------------------------------------------*/
 32 | /* Private function prototypes -----------------------------------------------*/
 33 | /* Private functions ---------------------------------------------------------*/
 34 | 
 35 | /* See also AWU_Timebase_TypeDef structure in stm8s_awu.h file :
 36 |                           N   2   5   1   2   4   8   1   3   6   1   2   5   1   2   1   3
 37 |                           O   5   0   m   m   m   m   6   2   4   2   5   1   s   s   2   0
 38 |                           I   0   0   s   s   s   s   m   m   m   8   6   2           s   s
 39 |                           T   u   u                   s   s   s   m   m   m
 40 |                               s   s                               s   s   s
 41 | */
 42 | /** Contains the different values to write in the APR register (used by AWU_Init function) */
 43 | CONST uint8_t APR_Array[17] =
 44 |     {
 45 |         0, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 61, 23, 23, 62
 46 |     };
 47 | 
 48 | /** Contains the different values to write in the TBR register (used by AWU_Init function) */
 49 | CONST uint8_t TBR_Array[17] =
 50 |     {
 51 |         0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 12, 14, 15, 15
 52 |     };
 53 | 
 54 | /* Public functions ----------------------------------------------------------*/
 55 | 
 56 | /**
 57 |   * @addtogroup AWU_Public_Functions
 58 |   * @{
 59 |   */
 60 | 
 61 | /**
 62 |   * @brief  Deinitializes the AWU peripheral registers to their default reset
 63 |   * values.
 64 |   * @param  None
 65 |   * @retval None
 66 |   */
 67 | void AWU_DeInit(void)
 68 | {
 69 |     AWU->CSR = AWU_CSR_RESET_VALUE;
 70 |     AWU->APR = AWU_APR_RESET_VALUE;
 71 |     AWU->TBR = AWU_TBR_RESET_VALUE;
 72 | }
 73 | 
 74 | /**
 75 |   * @brief  Initializes the AWU peripheral according to the specified parameters.
 76 |   * @param   AWU_TimeBase : Time base selection (interval between AWU interrupts).
 77 |   * can be one of the values of @ref AWU_Timebase_TypeDef.
 78 |   * @retval None
 79 |   * @par Required preconditions:
 80 |   * The LS RC calibration must be performed before calling this function.
 81 |   */
 82 | void AWU_Init(AWU_Timebase_TypeDef AWU_TimeBase)
 83 | {
 84 | 
 85 |     /* Check parameter */
 86 |     assert_param(IS_AWU_TIMEBASE_OK(AWU_TimeBase));
 87 | 
 88 |     /* Enable the AWU peripheral */
 89 |     AWU->CSR |= AWU_CSR_AWUEN;
 90 | 
 91 |     /* Set the TimeBase */
 92 |     AWU->TBR &= (uint8_t)(~AWU_TBR_AWUTB);
 93 |     AWU->TBR |= TBR_Array[(uint8_t)AWU_TimeBase];
 94 | 
 95 |     /* Set the APR divider */
 96 |     AWU->APR &= (uint8_t)(~AWU_APR_APR);
 97 |     AWU->APR |= APR_Array[(uint8_t)AWU_TimeBase];
 98 | 
 99 | }
100 | 
101 | /**
102 |   * @brief  Enable or disable the AWU peripheral.
103 |   * @param   NewState Indicates the new state of the AWU peripheral.
104 |   * @retval None
105 |   * @par Required preconditions:
106 |   * Initialisation of AWU and LS RC calibration must be done before.
107 |   */
108 | void AWU_Cmd(FunctionalState NewState)
109 | {
110 |     if (NewState != DISABLE)
111 |     {
112 |         /* Enable the AWU peripheral */
113 |         AWU->CSR |= AWU_CSR_AWUEN;
114 |     }
115 |     else
116 |     {
117 |         /* Disable the AWU peripheral */
118 |         AWU->CSR &= (uint8_t)(~AWU_CSR_AWUEN);
119 |     }
120 | }
121 | 
122 | /**
123 |   * @brief  Update APR register with the measured LSI frequency.
124 |   * @par Note on the APR calculation:
125 |   * A is the integer part of lsifreqkhz/4 and x the decimal part.
126 |   * x <= A/(1+2A) is equivalent to A >= x(1+2A) and also to 4A >= 4x(1+2A) [F1]
127 |   * but we know that A + x = lsifreqkhz/4 ==> 4x = lsifreqkhz-4A
128 |   * so [F1] can be written :
129 |   * 4A >= (lsifreqkhz-4A)(1+2A)
130 |   * @param   LSIFreqHz Low Speed RC frequency measured by timer (in Hz).
131 |   * @retval None
132 |   * @par Required preconditions:
133 |   * - AWU must be disabled to avoid unwanted interrupts.
134 |   */
135 | void AWU_LSICalibrationConfig(uint32_t LSIFreqHz)
136 | {
137 | 
138 |     uint16_t lsifreqkhz = 0x0;
139 |     uint16_t A = 0x0;
140 | 
141 |     /* Check parameter */
142 |     assert_param(IS_LSI_FREQUENCY_OK(LSIFreqHz));
143 | 
144 |     lsifreqkhz = (uint16_t)(LSIFreqHz / 1000); /* Converts value in kHz */
145 | 
146 |     /* Calculation of AWU calibration value */
147 | 
148 |     A = (uint16_t)(lsifreqkhz >> 2U); /* Division by 4, keep integer part only */
149 | 
150 |     if ((4U * A) >= ((lsifreqkhz - (4U * A)) * (1U + (2U * A))))
151 |     {
152 |         AWU->APR = (uint8_t)(A - 2U);
153 |     }
154 |     else
155 |     {
156 |         AWU->APR = (uint8_t)(A - 1U);
157 |     }
158 | }
159 | 
160 | /**
161 |   * @brief  Configures AWU in Idle mode to reduce power consumption.
162 |   * @param  None
163 |   * @retval None
164 |   */
165 | void AWU_IdleModeEnable(void)
166 | {
167 |     /* Disable AWU peripheral */
168 |     AWU->CSR &= (uint8_t)(~AWU_CSR_AWUEN);
169 | 
170 |     /* No AWU timebase */
171 |     AWU->TBR = (uint8_t)(~AWU_TBR_AWUTB);
172 | }
173 | 
174 | /**
175 |   * @brief  Returns status of the AWU peripheral flag.
176 |   * @param  None
177 |   * @retval FlagStatus : Status of the AWU flag.
178 |   * This parameter can be any of the @ref FlagStatus enumeration.
179 |   */
180 | FlagStatus AWU_GetFlagStatus(void)
181 | {
182 |     return((FlagStatus)(((uint8_t)(AWU->CSR & AWU_CSR_AWUF) == (uint8_t)0x00) ? RESET : SET));
183 | }
184 | 
185 | 
186 | /**
187 |   * @}
188 |   */
189 |   
190 | /**
191 |   * @}
192 |   */
193 |   
194 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
195 | 
--------------------------------------------------------------------------------
/mcu/std_lib/src/stm8s_beep.c:
--------------------------------------------------------------------------------
  1 | /**
  2 |   ******************************************************************************
  3 |   * @file    stm8s_beep.c
  4 |   * @author  MCD Application Team
  5 |   * @version V2.1.0
  6 |   * @date    18-November-2011
  7 |   * @brief   This file contains all the functions for the BEEP peripheral.
  8 |   ******************************************************************************
  9 |   * @attention
 10 |   *
 11 |   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 12 |   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 13 |   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 14 |   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 15 |   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 16 |   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 17 |   *
 18 |   * © COPYRIGHT 2011 STMicroelectronics
 19 |   ******************************************************************************
 20 |   */
 21 | 
 22 | /* Includes ------------------------------------------------------------------*/
 23 | #include "stm8s_beep.h"
 24 | 
 25 | /** @addtogroup STM8S_StdPeriph_Driver
 26 |   * @{
 27 |   */
 28 | /* Private typedef -----------------------------------------------------------*/
 29 | /* Private define ------------------------------------------------------------*/
 30 | /* Private macro -------------------------------------------------------------*/
 31 | /* Private variables ---------------------------------------------------------*/
 32 | /* Private function prototypes -----------------------------------------------*/
 33 | /* Private functions ---------------------------------------------------------*/
 34 | 
 35 | /* Public functions ----------------------------------------------------------*/
 36 | 
 37 | /**
 38 |   * @addtogroup BEEP_Public_Functions
 39 |   * @{
 40 |   */
 41 | 
 42 | /**
 43 |   * @brief  Deinitializes the BEEP peripheral registers to their default reset
 44 |   * values.
 45 |   * @param  None
 46 |   * @retval None
 47 |   */
 48 | void BEEP_DeInit(void)
 49 | {
 50 |     BEEP->CSR = BEEP_CSR_RESET_VALUE;
 51 | }
 52 | 
 53 | /**
 54 |   * @brief  Initializes the BEEP function according to the specified parameters.
 55 |   * @param   BEEP_Frequency Frequency selection.
 56 |   * can be one of the values of @ref BEEP_Frequency_TypeDef.
 57 |   * @retval None
 58 |   * @par Required preconditions:
 59 |   * The LS RC calibration must be performed before calling this function.
 60 |   */
 61 | void BEEP_Init(BEEP_Frequency_TypeDef BEEP_Frequency)
 62 | {
 63 | 
 64 |     /* Check parameter */
 65 |     assert_param(IS_BEEP_FREQUENCY_OK(BEEP_Frequency));
 66 | 
 67 |     /* Set a default calibration value if no calibration is done */
 68 |     if ((BEEP->CSR & BEEP_CSR_BEEPDIV) == BEEP_CSR_BEEPDIV)
 69 |     {
 70 |         BEEP->CSR &= (uint8_t)(~BEEP_CSR_BEEPDIV); /* Clear bits */
 71 |         BEEP->CSR |= BEEP_CALIBRATION_DEFAULT;
 72 |     }
 73 | 
 74 |     /* Select the output frequency */
 75 |     BEEP->CSR &= (uint8_t)(~BEEP_CSR_BEEPSEL);
 76 |     BEEP->CSR |= (uint8_t)(BEEP_Frequency);
 77 | 
 78 | }
 79 | 
 80 | /**
 81 |   * @brief  Enable or disable the BEEP function.
 82 |   * @param   NewState Indicates the new state of the BEEP function.
 83 |   * @retval None
 84 |   * @par Required preconditions:
 85 |   * Initialisation of BEEP and LS RC calibration must be done before.
 86 |   */
 87 | void BEEP_Cmd(FunctionalState NewState)
 88 | {
 89 |     if (NewState != DISABLE)
 90 |     {
 91 |         /* Enable the BEEP peripheral */
 92 |         BEEP->CSR |= BEEP_CSR_BEEPEN;
 93 |     }
 94 |     else
 95 |     {
 96 |         /* Disable the BEEP peripheral */
 97 |         BEEP->CSR &= (uint8_t)(~BEEP_CSR_BEEPEN);
 98 |     }
 99 | }
100 | 
101 | /**
102 |   * @brief  Update CSR register with the measured LSI frequency.
103 |   * @par Note on the APR calculation:
104 |   * A is the integer part of LSIFreqkHz/4 and x the decimal part.
105 |   * x <= A/(1+2A) is equivalent to A >= x(1+2A) and also to 4A >= 4x(1+2A) [F1]
106 |   * but we know that A + x = LSIFreqkHz/4 ==> 4x = LSIFreqkHz-4A
107 |   * so [F1] can be written :
108 |   * 4A >= (LSIFreqkHz-4A)(1+2A)
109 |   * @param   LSIFreqHz Low Speed RC frequency measured by timer (in Hz).
110 |   * @retval None
111 |   * @par Required preconditions:
112 |   * - BEEP must be disabled to avoid unwanted interrupts.
113 |   */
114 | void BEEP_LSICalibrationConfig(uint32_t LSIFreqHz)
115 | {
116 | 
117 |     uint16_t lsifreqkhz;
118 |     uint16_t A;
119 | 
120 |     /* Check parameter */
121 |     assert_param(IS_LSI_FREQUENCY_OK(LSIFreqHz));
122 | 
123 |     lsifreqkhz = (uint16_t)(LSIFreqHz / 1000); /* Converts value in kHz */
124 | 
125 |     /* Calculation of BEEPER calibration value */
126 | 
127 |     BEEP->CSR &= (uint8_t)(~BEEP_CSR_BEEPDIV); /* Clear bits */
128 | 
129 |     A = (uint16_t)(lsifreqkhz >> 3U); /* Division by 8, keep integer part only */
130 | 
131 |     if ((8U * A) >= ((lsifreqkhz - (8U * A)) * (1U + (2U * A))))
132 |     {
133 |         BEEP->CSR |= (uint8_t)(A - 2U);
134 |     }
135 |     else
136 |     {
137 |         BEEP->CSR |= (uint8_t)(A - 1U);
138 |     }
139 | }
140 | 
141 | /**
142 |   * @}
143 |   */
144 |   
145 | /**
146 |   * @}
147 |   */
148 |   
149 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
150 | 
--------------------------------------------------------------------------------
/mcu/std_lib/src/stm8s_can.c:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZiB/STM8S-USB/1844b1bc4d40433e264c68cd51c8f76a3d349eb6/mcu/std_lib/src/stm8s_can.c
--------------------------------------------------------------------------------
/mcu/std_lib/src/stm8s_exti.c:
--------------------------------------------------------------------------------
  1 | /**
  2 |   ******************************************************************************
  3 |   * @file    stm8s_exti.c
  4 |   * @author  MCD Application Team
  5 |   * @version V2.1.0
  6 |   * @date    18-November-2011
  7 |   * @brief   This file contains all the functions for the EXTI peripheral.
  8 |   ******************************************************************************
  9 |   * @attention
 10 |   *
 11 |   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 12 |   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 13 |   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 14 |   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 15 |   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 16 |   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 17 |   *
 18 |   * © COPYRIGHT 2011 STMicroelectronics
 19 |   ******************************************************************************
 20 |   */
 21 | 
 22 | /* Includes ------------------------------------------------------------------*/
 23 | #include "stm8s_exti.h"
 24 | 
 25 | /** @addtogroup STM8S_StdPeriph_Driver
 26 |   * @{
 27 |   */
 28 | /* Private typedef -----------------------------------------------------------*/
 29 | /* Private define ------------------------------------------------------------*/
 30 | /* Private macro -------------------------------------------------------------*/
 31 | /* Private variables ---------------------------------------------------------*/
 32 | /* Private function prototypes -----------------------------------------------*/
 33 | /* Private functions ---------------------------------------------------------*/
 34 | 
 35 | /* Public functions ----------------------------------------------------------*/
 36 | 
 37 | /**
 38 |   * @addtogroup EXTI_Public_Functions
 39 |   * @{
 40 |   */
 41 | 
 42 | /**
 43 |   * @brief  Deinitializes the external interrupt control registers to their default reset value.
 44 |   * @param  None
 45 |   * @retval None
 46 |   */
 47 | void EXTI_DeInit(void)
 48 | {
 49 |     EXTI->CR1 = EXTI_CR1_RESET_VALUE;
 50 |     EXTI->CR2 = EXTI_CR2_RESET_VALUE;
 51 | }
 52 | 
 53 | /**
 54 |   * @brief  Set the external interrupt sensitivity of the selected port.
 55 |   * @warning
 56 |   * - The modification of external interrupt sensitivity is only possible when the interrupts are disabled.
 57 |   * - The normal behavior is to disable the interrupts before calling this function, and re-enable them after.
 58 |   * @param   Port The port number to access.
 59 |   * @param   SensitivityValue The external interrupt sensitivity value to set.
 60 |   * @retval None
 61 |   * @par Required preconditions:
 62 |   * Global interrupts must be disabled before calling this function.
 63 |   */
 64 | void EXTI_SetExtIntSensitivity(EXTI_Port_TypeDef Port, EXTI_Sensitivity_TypeDef SensitivityValue)
 65 | {
 66 | 
 67 |     /* Check function parameters */
 68 |     assert_param(IS_EXTI_PORT_OK(Port));
 69 |     assert_param(IS_EXTI_SENSITIVITY_OK(SensitivityValue));
 70 | 
 71 |     /* Set external interrupt sensitivity */
 72 |     switch (Port)
 73 |     {
 74 |     case EXTI_PORT_GPIOA:
 75 |         EXTI->CR1 &= (uint8_t)(~EXTI_CR1_PAIS);
 76 |         EXTI->CR1 |= (uint8_t)(SensitivityValue);
 77 |         break;
 78 |     case EXTI_PORT_GPIOB:
 79 |         EXTI->CR1 &= (uint8_t)(~EXTI_CR1_PBIS);
 80 |         EXTI->CR1 |= (uint8_t)((uint8_t)(SensitivityValue) << 2);
 81 |         break;
 82 |     case EXTI_PORT_GPIOC:
 83 |         EXTI->CR1 &= (uint8_t)(~EXTI_CR1_PCIS);
 84 |         EXTI->CR1 |= (uint8_t)((uint8_t)(SensitivityValue) << 4);
 85 |         break;
 86 |     case EXTI_PORT_GPIOD:
 87 |         EXTI->CR1 &= (uint8_t)(~EXTI_CR1_PDIS);
 88 |         EXTI->CR1 |= (uint8_t)((uint8_t)(SensitivityValue) << 6);
 89 |         break;
 90 |     case EXTI_PORT_GPIOE:
 91 |         EXTI->CR2 &= (uint8_t)(~EXTI_CR2_PEIS);
 92 |         EXTI->CR2 |= (uint8_t)(SensitivityValue);
 93 |         break;
 94 |     default:
 95 |         break;
 96 |     }
 97 | }
 98 | 
 99 | /**
100 |   * @brief  Set the TLI interrupt sensitivity.
101 |   * @param   SensitivityValue The TLI interrupt sensitivity value.
102 |   * @retval None
103 |   * @par Required preconditions:
104 |   * Global interrupts must be disabled before calling this function.
105 |   */
106 | void EXTI_SetTLISensitivity(EXTI_TLISensitivity_TypeDef SensitivityValue)
107 | {
108 |     /* Check function parameters */
109 |     assert_param(IS_EXTI_TLISENSITIVITY_OK(SensitivityValue));
110 | 
111 |     /* Set TLI interrupt sensitivity */
112 |     EXTI->CR2 &= (uint8_t)(~EXTI_CR2_TLIS);
113 |     EXTI->CR2 |= (uint8_t)(SensitivityValue);
114 | }
115 | 
116 | /**
117 |   * @brief  Get the external interrupt sensitivity of the selected port.
118 |   * @param   Port The port number to access.
119 |   * @retval EXTI_Sensitivity_TypeDef The external interrupt sensitivity of the selected port.
120 |   */
121 | EXTI_Sensitivity_TypeDef EXTI_GetExtIntSensitivity(EXTI_Port_TypeDef Port)
122 | {
123 |     uint8_t value = 0;
124 | 
125 |     /* Check function parameters */
126 |     assert_param(IS_EXTI_PORT_OK(Port));
127 | 
128 |     switch (Port)
129 |     {
130 |     case EXTI_PORT_GPIOA:
131 |         value = (uint8_t)(EXTI->CR1 & EXTI_CR1_PAIS);
132 |         break;
133 |     case EXTI_PORT_GPIOB:
134 |         value = (uint8_t)((uint8_t)(EXTI->CR1 & EXTI_CR1_PBIS) >> 2);
135 |         break;
136 |     case EXTI_PORT_GPIOC:
137 |         value = (uint8_t)((uint8_t)(EXTI->CR1 & EXTI_CR1_PCIS) >> 4);
138 |         break;
139 |     case EXTI_PORT_GPIOD:
140 |         value = (uint8_t)((uint8_t)(EXTI->CR1 & EXTI_CR1_PDIS) >> 6);
141 |         break;
142 |     case EXTI_PORT_GPIOE:
143 |         value = (uint8_t)(EXTI->CR2 & EXTI_CR2_PEIS);
144 |         break;
145 |     default:
146 |         break;
147 |     }
148 | 
149 |     return((EXTI_Sensitivity_TypeDef)value);
150 | }
151 | 
152 | /**
153 |   * @brief  Get the TLI interrupt sensitivity.
154 |   * @param  None
155 |   * @retval EXTI_TLISensitivity_TypeDef The TLI interrupt sensitivity read.
156 |   */
157 | EXTI_TLISensitivity_TypeDef EXTI_GetTLISensitivity(void)
158 | {
159 | 
160 |     uint8_t value = 0;
161 | 
162 |     /* Get TLI interrupt sensitivity */
163 |     value = (uint8_t)(EXTI->CR2 & EXTI_CR2_TLIS);
164 | 
165 |     return((EXTI_TLISensitivity_TypeDef)value);
166 | }
167 | 
168 | /**
169 |   * @}
170 |   */
171 |   
172 | /**
173 |   * @}
174 |   */
175 |   
176 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
177 | 
--------------------------------------------------------------------------------
/mcu/std_lib/src/stm8s_flash.c:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZiB/STM8S-USB/1844b1bc4d40433e264c68cd51c8f76a3d349eb6/mcu/std_lib/src/stm8s_flash.c
--------------------------------------------------------------------------------
/mcu/std_lib/src/stm8s_gpio.c:
--------------------------------------------------------------------------------
  1 | /**
  2 |   ******************************************************************************
  3 |   * @file    stm8s_gpio.c
  4 |   * @author  MCD Application Team
  5 |   * @version V2.1.0
  6 |   * @date    18-November-2011
  7 |   * @brief   This file contains all the functions for the GPIO peripheral.
  8 |   ******************************************************************************
  9 |   * @attention
 10 |   *
 11 |   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 12 |   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 13 |   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 14 |   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 15 |   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 16 |   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 17 |   *
 18 |   * © COPYRIGHT 2011 STMicroelectronics
 19 |   ******************************************************************************
 20 |   */
 21 | 
 22 | /* Includes ------------------------------------------------------------------*/
 23 | #include "stm8s_gpio.h"
 24 | 
 25 | /** @addtogroup STM8S_StdPeriph_Driver
 26 |   * @{
 27 |   */
 28 | /* Private typedef -----------------------------------------------------------*/
 29 | /* Private define ------------------------------------------------------------*/
 30 | /* Private macro -------------------------------------------------------------*/
 31 | /* Private variables ---------------------------------------------------------*/
 32 | /* Private function prototypes -----------------------------------------------*/
 33 | /* Private functions ---------------------------------------------------------*/
 34 | 
 35 | /* Public functions ----------------------------------------------------------*/
 36 | 
 37 | /**
 38 |   * @addtogroup GPIO_Public_Functions
 39 |   * @{
 40 |   */
 41 | 
 42 | /**
 43 |   * @brief  Deinitializes the GPIOx peripheral registers to their default reset values.
 44 |   * @param  GPIOx: Select the GPIO peripheral number (x = A to I).
 45 |   * @retval None
 46 |   */
 47 | void GPIO_DeInit(GPIO_TypeDef* GPIOx)
 48 | {
 49 |     GPIOx->ODR = GPIO_ODR_RESET_VALUE; /* Reset Output Data Register */
 50 |     GPIOx->DDR = GPIO_DDR_RESET_VALUE; /* Reset Data Direction Register */
 51 |     GPIOx->CR1 = GPIO_CR1_RESET_VALUE; /* Reset Control Register 1 */
 52 |     GPIOx->CR2 = GPIO_CR2_RESET_VALUE; /* Reset Control Register 2 */
 53 | }
 54 | 
 55 | /**
 56 |   * @brief  Initializes the GPIOx according to the specified parameters.
 57 |   * @param  GPIOx : Select the GPIO peripheral number (x = A to I).
 58 |   * @param  GPIO_Pin : This parameter contains the pin number, it can be any value
 59 |   *         of the @ref GPIO_Pin_TypeDef enumeration.
 60 |   * @param  GPIO_Mode : This parameter can be a value of the
 61 |   *         @Ref GPIO_Mode_TypeDef enumeration.
 62 |   * @retval None
 63 |   */
 64 | 
 65 | void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode)
 66 | {
 67 |     /*----------------------*/
 68 |     /* Check the parameters */
 69 |     /*----------------------*/
 70 | 
 71 |     assert_param(IS_GPIO_MODE_OK(GPIO_Mode));
 72 |     assert_param(IS_GPIO_PIN_OK(GPIO_Pin));
 73 |     
 74 |   /* Reset corresponding bit to GPIO_Pin in CR2 register */
 75 |   GPIOx->CR2 &= (uint8_t)(~(GPIO_Pin));
 76 | 
 77 |     /*-----------------------------*/
 78 |     /* Input/Output mode selection */
 79 |     /*-----------------------------*/
 80 | 
 81 |     if ((((uint8_t)(GPIO_Mode)) & (uint8_t)0x80) != (uint8_t)0x00) /* Output mode */
 82 |     {
 83 |         if ((((uint8_t)(GPIO_Mode)) & (uint8_t)0x10) != (uint8_t)0x00) /* High level */
 84 |         {
 85 |             GPIOx->ODR |= (uint8_t)GPIO_Pin;
 86 |         } 
 87 |         else /* Low level */
 88 |         {
 89 |             GPIOx->ODR &= (uint8_t)(~(GPIO_Pin));
 90 |         }
 91 |         /* Set Output mode */
 92 |         GPIOx->DDR |= (uint8_t)GPIO_Pin;
 93 |     } 
 94 |     else /* Input mode */
 95 |     {
 96 |         /* Set Input mode */
 97 |         GPIOx->DDR &= (uint8_t)(~(GPIO_Pin));
 98 |     }
 99 | 
100 |     /*------------------------------------------------------------------------*/
101 |     /* Pull-Up/Float (Input) or Push-Pull/Open-Drain (Output) modes selection */
102 |     /*------------------------------------------------------------------------*/
103 | 
104 |     if ((((uint8_t)(GPIO_Mode)) & (uint8_t)0x40) != (uint8_t)0x00) /* Pull-Up or Push-Pull */
105 |     {
106 |         GPIOx->CR1 |= (uint8_t)GPIO_Pin;
107 |     } 
108 |     else /* Float or Open-Drain */
109 |     {
110 |         GPIOx->CR1 &= (uint8_t)(~(GPIO_Pin));
111 |     }
112 | 
113 |     /*-----------------------------------------------------*/
114 |     /* Interrupt (Input) or Slope (Output) modes selection */
115 |     /*-----------------------------------------------------*/
116 | 
117 |     if ((((uint8_t)(GPIO_Mode)) & (uint8_t)0x20) != (uint8_t)0x00) /* Interrupt or Slow slope */
118 |     {
119 |         GPIOx->CR2 |= (uint8_t)GPIO_Pin;
120 |     } 
121 |     else /* No external interrupt or No slope control */
122 |     {
123 |         GPIOx->CR2 &= (uint8_t)(~(GPIO_Pin));
124 |     }
125 | }
126 | 
127 | /**
128 |   * @brief  Writes data to the specified GPIO data port.
129 |   * @note   The port must be configured in output mode.
130 |   * @param  GPIOx : Select the GPIO peripheral number (x = A to I).
131 |   * @param  GPIO_PortVal : Specifies the value to be written to the port output
132 |   *         data register.
133 |   * @retval None
134 |   */
135 | void GPIO_Write(GPIO_TypeDef* GPIOx, uint8_t PortVal)
136 | {
137 |     GPIOx->ODR = PortVal;
138 | }
139 | 
140 | /**
141 |   * @brief  Writes high level to the specified GPIO pins.
142 |   * @note   The port must be configured in output mode.  
143 |   * @param  GPIOx : Select the GPIO peripheral number (x = A to I).
144 |   * @param  PortPins : Specifies the pins to be turned high to the port output.
145 |   *         data register.
146 |   * @retval None
147 |   */
148 | void GPIO_WriteHigh(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins)
149 | {
150 |     GPIOx->ODR |= (uint8_t)PortPins;
151 | }
152 | 
153 | /**
154 |   * @brief  Writes low level to the specified GPIO pins.
155 |   * @note   The port must be configured in output mode.  
156 |   * @param  GPIOx : Select the GPIO peripheral number (x = A to I).
157 |   * @param  PortPins : Specifies the pins to be turned low to the port output.
158 |   *         data register.
159 |   * @retval None
160 |   */
161 | void GPIO_WriteLow(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins)
162 | {
163 |     GPIOx->ODR &= (uint8_t)(~PortPins);
164 | }
165 | 
166 | /**
167 |   * @brief  Writes reverse level to the specified GPIO pins.
168 |   * @note   The port must be configured in output mode.
169 |   * @param  GPIOx : Select the GPIO peripheral number (x = A to I).
170 |   * @param  PortPins : Specifies the pins to be reversed to the port output.
171 |   *         data register.
172 |   * @retval None
173 |   */
174 | void GPIO_WriteReverse(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins)
175 | {
176 |     GPIOx->ODR ^= (uint8_t)PortPins;
177 | }
178 | 
179 | /**
180 |   * @brief  Reads the specified GPIO output data port.
181 |   * @note   The port must be configured in input mode.  
182 |   * @param  GPIOx : Select the GPIO peripheral number (x = A to I).
183 |   * @retval GPIO output data port value.
184 |   */
185 | uint8_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)
186 | {
187 |     return ((uint8_t)GPIOx->ODR);
188 | }
189 | 
190 | /**
191 |   * @brief  Reads the specified GPIO input data port.
192 |   * @note   The port must be configured in input mode.   
193 |   * @param  GPIOx : Select the GPIO peripheral number (x = A to I).
194 |   * @retval GPIO input data port value.
195 |   */
196 | uint8_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
197 | {
198 |     return ((uint8_t)GPIOx->IDR);
199 | }
200 | 
201 | /**
202 |   * @brief  Reads the specified GPIO input data pin.
203 |   * @param  GPIOx : Select the GPIO peripheral number (x = A to I).
204 |   * @param  GPIO_Pin : Specifies the pin number.
205 |   * @retval BitStatus : GPIO input pin status.
206 |   */
207 | BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin)
208 | {
209 |     return ((BitStatus)(GPIOx->IDR & (uint8_t)GPIO_Pin));
210 | }
211 | 
212 | /**
213 |   * @brief  Configures the external pull-up on GPIOx pins.
214 |   * @param  GPIOx : Select the GPIO peripheral number (x = A to I).
215 |   * @param  GPIO_Pin : Specifies the pin number
216 |   * @param  NewState : The new state of the pull up pin.
217 |   * @retval None
218 |   */
219 | void GPIO_ExternalPullUpConfig(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, FunctionalState NewState)
220 | {
221 |     /* Check the parameters */
222 |     assert_param(IS_GPIO_PIN_OK(GPIO_Pin));
223 |     assert_param(IS_FUNCTIONALSTATE_OK(NewState));
224 | 
225 |     if (NewState != DISABLE) /* External Pull-Up Set*/
226 |     {
227 |         GPIOx->CR1 |= (uint8_t)GPIO_Pin;
228 |     } else /* External Pull-Up Reset*/
229 |     {
230 |         GPIOx->CR1 &= (uint8_t)(~(GPIO_Pin));
231 |     }
232 | }
233 | 
234 | /**
235 |   * @}
236 |   */
237 |   
238 | /**
239 |   * @}
240 |   */
241 |   
242 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
243 | 
--------------------------------------------------------------------------------
/mcu/std_lib/src/stm8s_i2c.c:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZiB/STM8S-USB/1844b1bc4d40433e264c68cd51c8f76a3d349eb6/mcu/std_lib/src/stm8s_i2c.c
--------------------------------------------------------------------------------
/mcu/std_lib/src/stm8s_itc.c:
--------------------------------------------------------------------------------
  1 | /**
  2 |   ******************************************************************************
  3 |   * @file    stm8s_itc.c
  4 |   * @author  MCD Application Team
  5 |   * @version V2.1.0
  6 |   * @date    18-November-2011
  7 |   * @brief   This file contains all the functions for the ITC peripheral.
  8 |   ******************************************************************************
  9 |   * @attention
 10 |   *
 11 |   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 12 |   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 13 |   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 14 |   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 15 |   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 16 |   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 17 |   *
 18 |   * © COPYRIGHT 2011 STMicroelectronics
 19 |   ******************************************************************************
 20 |   */
 21 | 
 22 | /* Includes ------------------------------------------------------------------*/
 23 | #include "stm8s_itc.h"
 24 | 
 25 | /** @addtogroup STM8S_StdPeriph_Driver
 26 |   * @{
 27 |   */
 28 | /* Private typedef -----------------------------------------------------------*/
 29 | /* Private define ------------------------------------------------------------*/
 30 | /* Private macro -------------------------------------------------------------*/
 31 | /* Private variables ---------------------------------------------------------*/
 32 | /* Private function prototypes -----------------------------------------------*/
 33 | /* Private functions ---------------------------------------------------------*/
 34 | 
 35 | /** @addtogroup ITC_Private_Functions
 36 |   * @{
 37 |   */
 38 | 
 39 | /**
 40 |   * @brief  Utility function used to read CC register.
 41 |   * @param  None
 42 |   * @retval CPU CC register value
 43 |   */
 44 | uint8_t ITC_GetCPUCC(void)
 45 | {
 46 | #ifdef _COSMIC_
 47 |   _asm("push cc");
 48 |   _asm("pop a");
 49 |   return; /* Ignore compiler warning, the returned value is in A register */
 50 | #elif defined _RAISONANCE_ /* _RAISONANCE_ */
 51 |   return _getCC_();
 52 | #else /* _IAR_ */
 53 |   asm("push cc");
 54 |   asm("pop a"); /* Ignore compiler warning, the returned value is in A register */
 55 | #endif /* _COSMIC_*/
 56 | }
 57 | 
 58 | 
 59 | /**
 60 |   * @}
 61 |   */
 62 | 
 63 | /* Public functions ----------------------------------------------------------*/
 64 | 
 65 | /** @addtogroup ITC_Public_Functions
 66 |   * @{
 67 |   */
 68 | 
 69 | /**
 70 |   * @brief  Deinitializes the ITC registers to their default reset value.
 71 |   * @param  None
 72 |   * @retval None
 73 |   */
 74 | void ITC_DeInit(void)
 75 | {
 76 |     ITC->ISPR1 = ITC_SPRX_RESET_VALUE;
 77 |     ITC->ISPR2 = ITC_SPRX_RESET_VALUE;
 78 |     ITC->ISPR3 = ITC_SPRX_RESET_VALUE;
 79 |     ITC->ISPR4 = ITC_SPRX_RESET_VALUE;
 80 |     ITC->ISPR5 = ITC_SPRX_RESET_VALUE;
 81 |     ITC->ISPR6 = ITC_SPRX_RESET_VALUE;
 82 |     ITC->ISPR7 = ITC_SPRX_RESET_VALUE;
 83 |     ITC->ISPR8 = ITC_SPRX_RESET_VALUE;
 84 | }
 85 | 
 86 | /**
 87 |   * @brief  Gets the interrupt software priority bits (I1, I0) value from CPU CC register.
 88 |   * @param  None
 89 |   * @retval The interrupt software priority bits value.
 90 |   */
 91 | uint8_t ITC_GetSoftIntStatus(void)
 92 | {
 93 |     return (uint8_t)(ITC_GetCPUCC() & CPU_CC_I1I0);
 94 | }
 95 | 
 96 | /**
 97 |   * @brief  Gets the software priority of the specified interrupt source.
 98 |   * @param  IrqNum : Specifies the peripheral interrupt source.
 99 |   * @retval ITC_PriorityLevel_TypeDef : Specifies the software priority of the interrupt source.
100 |   */
101 | ITC_PriorityLevel_TypeDef ITC_GetSoftwarePriority(ITC_Irq_TypeDef IrqNum)
102 | {
103 | 
104 |     uint8_t Value = 0;
105 |     uint8_t Mask = 0;
106 | 
107 |     /* Check function parameters */
108 |     assert_param(IS_ITC_IRQ_OK((uint8_t)IrqNum));
109 | 
110 |     /* Define the mask corresponding to the bits position in the SPR register */
111 |     Mask = (uint8_t)(0x03U << (((uint8_t)IrqNum % 4U) * 2U));
112 | 
113 |     switch (IrqNum)
114 |     {
115 |     case ITC_IRQ_TLI: /* TLI software priority can be read but has no meaning */
116 |     case ITC_IRQ_AWU:
117 |     case ITC_IRQ_CLK:
118 |     case ITC_IRQ_PORTA:
119 |         Value = (uint8_t)(ITC->ISPR1 & Mask); /* Read software priority */
120 |         break;
121 |     case ITC_IRQ_PORTB:
122 |     case ITC_IRQ_PORTC:
123 |     case ITC_IRQ_PORTD:
124 |     case ITC_IRQ_PORTE:
125 |         Value = (uint8_t)(ITC->ISPR2 & Mask); /* Read software priority */
126 |         break;
127 | #if defined(STM8S208) || defined(STM8AF52Ax)
128 |     case ITC_IRQ_CAN_RX:
129 |     case ITC_IRQ_CAN_TX:
130 | #endif /*STM8S208 or STM8AF52Ax */
131 | 
132 | #ifdef STM8S903
133 |     case ITC_IRQ_PORTF:
134 | #endif /*STM8S903*/
135 | 
136 |     case ITC_IRQ_SPI:
137 |     case ITC_IRQ_TIM1_OVF:
138 |         Value = (uint8_t)(ITC->ISPR3 & Mask); /* Read software priority */
139 |         break;
140 |     case ITC_IRQ_TIM1_CAPCOM:
141 | #ifdef STM8S903
142 |     case ITC_IRQ_TIM5_OVFTRI:
143 |     case ITC_IRQ_TIM5_CAPCOM:
144 | #else
145 |     case ITC_IRQ_TIM2_OVF:
146 |     case ITC_IRQ_TIM2_CAPCOM:
147 | #endif /*STM8S903*/
148 | 
149 |     case ITC_IRQ_TIM3_OVF:
150 |         Value = (uint8_t)(ITC->ISPR4 & Mask); /* Read software priority */
151 |         break;
152 |     case ITC_IRQ_TIM3_CAPCOM:
153 |     case ITC_IRQ_UART1_TX:
154 |     case ITC_IRQ_UART1_RX:
155 |     case ITC_IRQ_I2C:
156 |         Value = (uint8_t)(ITC->ISPR5 & Mask); /* Read software priority */
157 |         break;
158 | #if defined(STM8S105) || defined(STM8S005) || defined(STM8AF626x)
159 |     case ITC_IRQ_UART2_TX:
160 |     case ITC_IRQ_UART2_RX:
161 | #endif /*STM8S105 or STM8AF626x*/
162 | 
163 | #if defined(STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8AF52Ax) || \
164 |     defined(STM8AF62Ax)
165 |     case ITC_IRQ_UART3_TX:
166 |     case ITC_IRQ_UART3_RX:
167 |     case ITC_IRQ_ADC2:
168 | #endif /*STM8S208 or STM8S207 or STM8AF52Ax or STM8AF62Ax */
169 | 
170 | #if defined(STM8S105) || defined(STM8S005) || defined(STM8S103) || defined(STM8S003) || \
171 |     defined(STM8S903) || defined(STM8AF626x)
172 |     case ITC_IRQ_ADC1:
173 | #endif /*STM8S105, STM8S103 or STM8S905 or STM8AF626x */
174 | 
175 | #ifdef STM8S903
176 |     case ITC_IRQ_TIM6_OVFTRI:
177 | #else
178 |     case ITC_IRQ_TIM4_OVF:
179 | #endif /*STM8S903*/
180 |         Value = (uint8_t)(ITC->ISPR6 & Mask); /* Read software priority */
181 |         break;
182 |     case ITC_IRQ_EEPROM_EEC:
183 |         Value = (uint8_t)(ITC->ISPR7 & Mask); /* Read software priority */
184 |         break;
185 |     default:
186 |         break;
187 |     }
188 | 
189 |     Value >>= (uint8_t)(((uint8_t)IrqNum % 4u) * 2u);
190 | 
191 |     return((ITC_PriorityLevel_TypeDef)Value);
192 | 
193 | }
194 | 
195 | /**
196 |   * @brief  Sets the software priority of the specified interrupt source.
197 |   * @note   - The modification of the software priority is only possible when
198 |   *         the interrupts are disabled.
199 |   *         - The normal behavior is to disable the interrupt before calling
200 |   *         this function, and re-enable it after.
201 |   *         - The priority level 0 cannot be set (see product specification
202 |   *         for more details).
203 |   * @param  IrqNum : Specifies the peripheral interrupt source.
204 |   * @param  PriorityValue : Specifies the software priority value to set,
205 |   *         can be a value of @ref  ITC_PriorityLevel_TypeDef .
206 |   * @retval None
207 | */
208 | void ITC_SetSoftwarePriority(ITC_Irq_TypeDef IrqNum, ITC_PriorityLevel_TypeDef PriorityValue)
209 | {
210 | 
211 |     uint8_t Mask = 0;
212 |     uint8_t NewPriority = 0;
213 | 
214 |     /* Check function parameters */
215 |     assert_param(IS_ITC_IRQ_OK((uint8_t)IrqNum));
216 |     assert_param(IS_ITC_PRIORITY_OK(PriorityValue));
217 | 
218 |     /* Check if interrupts are disabled */
219 |     assert_param(IS_ITC_INTERRUPTS_DISABLED);
220 | 
221 |     /* Define the mask corresponding to the bits position in the SPR register */
222 |     /* The mask is reversed in order to clear the 2 bits after more easily */
223 |     Mask = (uint8_t)(~(uint8_t)(0x03U << (((uint8_t)IrqNum % 4U) * 2U)));
224 | 
225 |     /* Define the new priority to write */
226 |     NewPriority = (uint8_t)((uint8_t)(PriorityValue) << (((uint8_t)IrqNum % 4U) * 2U));
227 | 
228 |     switch (IrqNum)
229 |     {
230 | 
231 |     case ITC_IRQ_TLI: /* TLI software priority can be written but has no meaning */
232 |     case ITC_IRQ_AWU:
233 |     case ITC_IRQ_CLK:
234 |     case ITC_IRQ_PORTA:
235 |         ITC->ISPR1 &= Mask;
236 |         ITC->ISPR1 |= NewPriority;
237 |         break;
238 | 
239 |     case ITC_IRQ_PORTB:
240 |     case ITC_IRQ_PORTC:
241 |     case ITC_IRQ_PORTD:
242 |     case ITC_IRQ_PORTE:
243 |         ITC->ISPR2 &= Mask;
244 |         ITC->ISPR2 |= NewPriority;
245 |         break;
246 | 
247 | #if defined(STM8S208) || defined(STM8AF52Ax)
248 |     case ITC_IRQ_CAN_RX:
249 |     case ITC_IRQ_CAN_TX:
250 | #endif /*STM8S208 or STM8AF52Ax */
251 | 
252 | #ifdef STM8S903
253 |     case ITC_IRQ_PORTF:
254 | #endif /*STM8S903*/
255 |     case ITC_IRQ_SPI:
256 |     case ITC_IRQ_TIM1_OVF:
257 |         ITC->ISPR3 &= Mask;
258 |         ITC->ISPR3 |= NewPriority;
259 |         break;
260 | 
261 |     case ITC_IRQ_TIM1_CAPCOM:
262 | #ifdef STM8S903
263 |     case ITC_IRQ_TIM5_OVFTRI:
264 |     case ITC_IRQ_TIM5_CAPCOM:
265 | #else
266 |     case ITC_IRQ_TIM2_OVF:
267 |     case ITC_IRQ_TIM2_CAPCOM:
268 | #endif /*STM8S903*/
269 | 
270 |     case ITC_IRQ_TIM3_OVF:
271 |         ITC->ISPR4 &= Mask;
272 |         ITC->ISPR4 |= NewPriority;
273 |         break;
274 | 
275 |     case ITC_IRQ_TIM3_CAPCOM:
276 |     case ITC_IRQ_UART1_TX:
277 |     case ITC_IRQ_UART1_RX:
278 |     case ITC_IRQ_I2C:
279 |         ITC->ISPR5 &= Mask;
280 |         ITC->ISPR5 |= NewPriority;
281 |         break;
282 | 
283 | #if defined(STM8S105) || defined(STM8S005) || defined(STM8AF626x)
284 |     case ITC_IRQ_UART2_TX:
285 |     case ITC_IRQ_UART2_RX:
286 | #endif /*STM8S105 or STM8AF626x */
287 | 
288 | #if defined(STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8AF52Ax) || \
289 |     defined(STM8AF62Ax)
290 |     case ITC_IRQ_UART3_TX:
291 |     case ITC_IRQ_UART3_RX:
292 |     case ITC_IRQ_ADC2:
293 | #endif /*STM8S208 or STM8S207 or STM8AF52Ax or STM8AF62Ax */
294 | 
295 | #if defined(STM8S105) || defined(STM8S005) || defined(STM8S103) || defined(STM8S003) || \
296 |     defined(STM8S903) || defined(STM8AF626x)
297 |     case ITC_IRQ_ADC1:
298 | #endif /*STM8S105, STM8S103 or STM8S905 or STM8AF626x */
299 | 
300 | #ifdef STM8S903
301 |     case ITC_IRQ_TIM6_OVFTRI:
302 | #else
303 |     case ITC_IRQ_TIM4_OVF:
304 | #endif /*STM8S903*/
305 |         ITC->ISPR6 &= Mask;
306 |         ITC->ISPR6 |= NewPriority;
307 |         break;
308 | 
309 |     case ITC_IRQ_EEPROM_EEC:
310 |         ITC->ISPR7 &= Mask;
311 |         ITC->ISPR7 |= NewPriority;
312 |         break;
313 | 
314 |     default:
315 |         break;
316 | 
317 |     }
318 | 
319 | }
320 | 
321 | /**
322 |   * @}
323 |   */
324 |   
325 | /**
326 |   * @}
327 |   */
328 |   
329 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
330 | 
--------------------------------------------------------------------------------
/mcu/std_lib/src/stm8s_iwdg.c:
--------------------------------------------------------------------------------
  1 | /**
  2 |   ********************************************************************************
  3 |   * @file    stm8s_iwdg.c
  4 |   * @author  MCD Application Team
  5 |   * @version V2.1.0
  6 |   * @date    18-November-2011
  7 |   * @brief   This file contains all the functions for the IWDG peripheral.
  8 |   ******************************************************************************
  9 |   * @attention
 10 |   *
 11 |   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 12 |   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 13 |   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 14 |   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 15 |   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 16 |   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 17 |   *
 18 |   * © COPYRIGHT 2011 STMicroelectronics
 19 |   ******************************************************************************
 20 |   */
 21 | 
 22 | /* Includes ------------------------------------------------------------------*/
 23 | #include "stm8s_iwdg.h"
 24 | 
 25 | /* Private define ------------------------------------------------------------*/
 26 | /* Private macro -------------------------------------------------------------*/
 27 | /* Private variables ---------------------------------------------------------*/
 28 | /* Private function prototypes -----------------------------------------------*/
 29 | /* Private functions ---------------------------------------------------------*/
 30 | /* Public functions ----------------------------------------------------------*/
 31 | 
 32 | /** @addtogroup IWDG_Public_Functions
 33 |   * @{
 34 |   */
 35 | 
 36 | /**
 37 |   * @brief  Enables or disables write access to Prescaler and Reload registers.
 38 |   * @param  IWDG_WriteAccess : New state of write access to Prescaler and Reload
 39 |   *         registers.  This parameter can be a value of @ref IWDG_WriteAccess_TypeDef.
 40 |   * @retval None
 41 |   */
 42 | void IWDG_WriteAccessCmd(IWDG_WriteAccess_TypeDef IWDG_WriteAccess)
 43 | {
 44 |     /* Check the parameters */
 45 |     assert_param(IS_IWDG_WRITEACCESS_MODE_OK(IWDG_WriteAccess));
 46 | 
 47 |     IWDG->KR = (uint8_t)IWDG_WriteAccess; /* Write Access */
 48 | }
 49 | 
 50 | /**
 51 |   * @brief  Sets IWDG Prescaler value.
 52 |   * @note   Write access should be enabled
 53 |   * @param  IWDG_Prescaler : Specifies the IWDG Prescaler value.
 54 |   *         This parameter can be a value of @ref IWDG_Prescaler_TypeDef.
 55 |   * @retval None
 56 |   */
 57 | void IWDG_SetPrescaler(IWDG_Prescaler_TypeDef IWDG_Prescaler)
 58 | {
 59 |     /* Check the parameters */
 60 |     assert_param(IS_IWDG_PRESCALER_OK(IWDG_Prescaler));
 61 | 
 62 |     IWDG->PR = (uint8_t)IWDG_Prescaler;
 63 | }
 64 | 
 65 | /**
 66 |   * @brief  Sets IWDG Reload value.
 67 |   * @note   Write access should be enabled
 68 |   * @param  IWDG_Reload : Reload register value.
 69 |   *         This parameter must be a number between 0 and 0xFF.
 70 |   * @retval None
 71 |   */
 72 | void IWDG_SetReload(uint8_t IWDG_Reload)
 73 | {
 74 |     IWDG->RLR = IWDG_Reload;
 75 | }
 76 | 
 77 | /**
 78 |   * @brief  Reloads IWDG counter
 79 |   * @note   Write access should be enabled
 80 |   * @param  None
 81 |   * @retval None
 82 |   */
 83 | void IWDG_ReloadCounter(void)
 84 | {
 85 |     IWDG->KR = IWDG_KEY_REFRESH;
 86 | }
 87 | 
 88 | /**
 89 |   * @brief  Enables IWDG.
 90 |   * @param  None
 91 |   * @retval None
 92 |   */
 93 | void IWDG_Enable(void)
 94 | {
 95 |     IWDG->KR = IWDG_KEY_ENABLE;
 96 | }
 97 | 
 98 | /**
 99 |   * @}
100 |   */
101 |   
102 | /**
103 |   * @}
104 |   */
105 |   
106 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
107 | 
--------------------------------------------------------------------------------
/mcu/std_lib/src/stm8s_rst.c:
--------------------------------------------------------------------------------
 1 | /**
 2 |   ******************************************************************************
 3 |   * @file    stm8s_rst.c
 4 |   * @author  MCD Application Team
 5 |   * @version V2.1.0
 6 |   * @date    18-November-2011
 7 |   * @brief   This file contains all the functions for the RST peripheral.
 8 |   ******************************************************************************
 9 |   * @attention
10 |   *
11 |   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
12 |   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
13 |   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
14 |   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
15 |   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
16 |   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
17 |   *
18 |   * © COPYRIGHT 2011 STMicroelectronics
19 |   ******************************************************************************
20 |   */
21 | 
22 | /* Includes ------------------------------------------------------------------*/
23 | 
24 | #include "stm8s_rst.h"
25 | 
26 | /** @addtogroup STM8S_StdPeriph_Driver
27 |   * @{
28 |   */
29 | /* Private typedef -----------------------------------------------------------*/
30 | /* Private define ------------------------------------------------------------*/
31 | /* Private macro -------------------------------------------------------------*/
32 | /* Private variables ---------------------------------------------------------*/
33 | /* Private function prototypes -----------------------------------------------*/
34 | /* Private Constants ---------------------------------------------------------*/
35 | /* Public functions ----------------------------------------------------------*/
36 | /**
37 |   * @addtogroup RST_Public_Functions
38 |   * @{
39 |   */
40 | 
41 | 
42 | /**
43 |   * @brief   Checks whether the specified RST flag is set or not.
44 |   * @param   RST_Flag : specify the reset flag to check.
45 |   *          This parameter can be a value of @ref RST_FLAG_TypeDef.
46 |   * @retval  FlagStatus: status of the given RST flag.
47 |   */
48 | FlagStatus RST_GetFlagStatus(RST_Flag_TypeDef RST_Flag)
49 | {
50 |     /* Check the parameters */
51 |     assert_param(IS_RST_FLAG_OK(RST_Flag));
52 | 
53 |     /* Get flag status */
54 | 
55 |     return ((FlagStatus)((uint8_t)RST->SR & (uint8_t)RST_Flag));
56 | }
57 | 
58 | /**
59 |   * @brief  Clears the specified RST flag.
60 |   * @param  RST_Flag : specify the reset flag to clear.
61 |   *         This parameter can be a value of @ref RST_FLAG_TypeDef.
62 |   * @retval None
63 |   */
64 | void RST_ClearFlag(RST_Flag_TypeDef RST_Flag)
65 | {
66 |     /* Check the parameters */
67 |     assert_param(IS_RST_FLAG_OK(RST_Flag));
68 | 
69 |     RST->SR = (uint8_t)RST_Flag;
70 | }
71 | 
72 | /**
73 |   * @}
74 |   */
75 |   
76 | /**
77 |   * @}
78 |   */
79 |   
80 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
81 | 
--------------------------------------------------------------------------------
/mcu/std_lib/src/stm8s_tim1.c:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZiB/STM8S-USB/1844b1bc4d40433e264c68cd51c8f76a3d349eb6/mcu/std_lib/src/stm8s_tim1.c
--------------------------------------------------------------------------------
/mcu/std_lib/src/stm8s_tim2.c:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZiB/STM8S-USB/1844b1bc4d40433e264c68cd51c8f76a3d349eb6/mcu/std_lib/src/stm8s_tim2.c
--------------------------------------------------------------------------------
/mcu/std_lib/src/stm8s_tim3.c:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZiB/STM8S-USB/1844b1bc4d40433e264c68cd51c8f76a3d349eb6/mcu/std_lib/src/stm8s_tim3.c
--------------------------------------------------------------------------------
/mcu/std_lib/src/stm8s_tim4.c:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZiB/STM8S-USB/1844b1bc4d40433e264c68cd51c8f76a3d349eb6/mcu/std_lib/src/stm8s_tim4.c
--------------------------------------------------------------------------------
/mcu/std_lib/src/stm8s_tim5.c:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZiB/STM8S-USB/1844b1bc4d40433e264c68cd51c8f76a3d349eb6/mcu/std_lib/src/stm8s_tim5.c
--------------------------------------------------------------------------------
/mcu/std_lib/src/stm8s_tim6.c:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZiB/STM8S-USB/1844b1bc4d40433e264c68cd51c8f76a3d349eb6/mcu/std_lib/src/stm8s_tim6.c
--------------------------------------------------------------------------------
/mcu/std_lib/src/stm8s_uart1.c:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZiB/STM8S-USB/1844b1bc4d40433e264c68cd51c8f76a3d349eb6/mcu/std_lib/src/stm8s_uart1.c
--------------------------------------------------------------------------------
/mcu/std_lib/src/stm8s_uart2.c:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZiB/STM8S-USB/1844b1bc4d40433e264c68cd51c8f76a3d349eb6/mcu/std_lib/src/stm8s_uart2.c
--------------------------------------------------------------------------------
/mcu/std_lib/src/stm8s_wwdg.c:
--------------------------------------------------------------------------------
  1 | /**
  2 |   ********************************************************************************
  3 |   * @file    stm8s_wwdg.c
  4 |   * @author  MCD Application Team
  5 |   * @version V2.1.0
  6 |   * @date    18-November-2011
  7 |   * @brief   This file contains all the functions for the WWDG peripheral.
  8 |   ******************************************************************************
  9 |   * @attention
 10 |   *
 11 |   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 12 |   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 13 |   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 14 |   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 15 |   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 16 |   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 17 |   *
 18 |   * © COPYRIGHT 2011 STMicroelectronics
 19 |   ******************************************************************************
 20 |   */
 21 | 
 22 | /* Includes ------------------------------------------------------------------*/
 23 | #include "stm8s_wwdg.h"
 24 | 
 25 | /** @addtogroup STM8S_StdPeriph_Driver
 26 |   * @{
 27 |   */
 28 | /* Private define ------------------------------------------------------------*/
 29 | #define BIT_MASK          ((uint8_t)0x7F)
 30 | /* Private macro -------------------------------------------------------------*/
 31 | /* Private variables ---------------------------------------------------------*/
 32 | /* Private function prototypes -----------------------------------------------*/
 33 | /* Private functions ---------------------------------------------------------*/
 34 | 
 35 | /** @addtogroup WWDG_Public_Functions
 36 |   * @{
 37 |   */
 38 | 
 39 | /**
 40 |   * @brief  Initializes the WWDG peripheral.
 41 |   *         This function set Window Register = WindowValue, Counter Register
 42 |   *         according to Counter and \b ENABLE \b WWDG
 43 |   * @param  Counter : WWDG counter value
 44 |   * @param  WindowValue : specifies the WWDG Window Register, range is 0x00 to 0x7F.
 45 |   * @retval None
 46 |   */
 47 | void WWDG_Init(uint8_t Counter, uint8_t WindowValue)
 48 | {
 49 |     /* Check the parameters */
 50 |     assert_param(IS_WWDG_WINDOWLIMITVALUE_OK(WindowValue));
 51 |     
 52 |     WWDG->WR = WWDG_WR_RESET_VALUE;
 53 |     WWDG->CR = (uint8_t)((uint8_t)(WWDG_CR_WDGA | WWDG_CR_T6) | (uint8_t)Counter);
 54 |     WWDG->WR = (uint8_t)((uint8_t)(~WWDG_CR_WDGA) & (uint8_t)(WWDG_CR_T6 | WindowValue));
 55 | }
 56 | 
 57 | /**
 58 |   * @brief  Refreshes the WWDG peripheral.
 59 |   * @param  Counter :  WWDG Counter Value
 60 |   *         This parameter must be a number between 0x40 and 0x7F.
 61 |   * @retval None
 62 |   */
 63 | void WWDG_SetCounter(uint8_t Counter)
 64 | {
 65 | 
 66 |     /* Check the parameters */
 67 |     assert_param(IS_WWDG_COUNTERVALUE_OK(Counter));
 68 | 
 69 |    /* Write to T[6:0] bits to configure the counter value, no need to do
 70 |      a read-modify-write; writing a 0 to WDGA bit does nothing */
 71 |   WWDG->CR = (uint8_t)(Counter & (uint8_t)BIT_MASK);
 72 | 
 73 | }
 74 | 
 75 | /**
 76 |   * @brief Gets the WWDG Counter Value.
 77 |   *        This value could be used to check if WWDG is in the window, where
 78 |   *        refresh is allowed.
 79 |   * @param  None
 80 |   * @retval WWDG Counter Value
 81 |   */
 82 | uint8_t WWDG_GetCounter(void)
 83 | {
 84 |     return(WWDG->CR);
 85 | }
 86 | 
 87 | /**
 88 |   * @brief  Generates immediate WWDG RESET.
 89 |   * @param  None
 90 |   * @retval None
 91 |   */
 92 | void WWDG_SWReset(void)
 93 | {
 94 |     WWDG->CR = WWDG_CR_WDGA; /* Activate WWDG, with clearing T6 */
 95 | }
 96 | 
 97 | /**
 98 |   * @brief  Sets the WWDG window value.
 99 |   * @param  WindowValue: specifies the window value to be compared to the
100 |   *         downcounter.
101 |   *         This parameter value must be lower than 0x80.
102 |   * @retval None
103 |   */
104 | void WWDG_SetWindowValue(uint8_t WindowValue)
105 | {
106 |     /* Check the parameters */
107 |     assert_param(IS_WWDG_WINDOWLIMITVALUE_OK(WindowValue));
108 |     
109 |     WWDG->WR = (uint8_t)((uint8_t)(~WWDG_CR_WDGA) & (uint8_t)(WWDG_CR_T6 | WindowValue));
110 | }
111 | /**
112 |   * @}
113 |   */
114 |   
115 | /**
116 |   * @}
117 |   */
118 |   
119 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
120 | 
--------------------------------------------------------------------------------
/mcu/stm8_interrupt_vector.c:
--------------------------------------------------------------------------------
  1 | /* BASIC INTERRUPT VECTORS TABLE FOR STM8 devices
  2 |  * Copyright (c) 2011 STMicroelectronics
  3 |  */
  4 | 
  5 | #include "stm8s_it.h"
  6 | 
  7 | typedef void @far (*interrupt_handler_t)(void);
  8 | 
  9 | struct interrupt_vector {
 10 | 	u8 interrupt_instruction;
 11 | 	interrupt_handler_t interrupt_handler;
 12 | };
 13 | 
 14 | extern void usb_rx(void);
 15 | 
 16 | struct interrupt_vector const _vectab[] = {
 17 |   {0x82, (interrupt_handler_t)_stext}, /* RESET */
 18 |   {0x82, (interrupt_handler_t)TRAP_IRQHandler}, /* TRAP - Software interrupt */
 19 | 	{0x82, (interrupt_handler_t)TLI_IRQHandler}, /* irq0 - External Top Level interrupt (TLI) */
 20 | 	{0x82, (interrupt_handler_t)AWU_IRQHandler}, /* irq1 - Auto Wake Up from Halt interrupt */
 21 | 	{0x82, (interrupt_handler_t)CLK_IRQHandler}, /* irq2 - Clock Controller interrupt */
 22 |   {0x82, (interrupt_handler_t)EXTI_PORTA_IRQHandler}, /* irq3 - External interrupt 0 (GPIOA) */
 23 | 	{0x82, (interrupt_handler_t)EXTI_PORTB_IRQHandler}, /* irq4 - External interrupt 1 (GPIOB) */
 24 | 	{0x82, (interrupt_handler_t)EXTI_PORTC_IRQHandler}, /* irq5 - External interrupt 2 (GPIOC) */
 25 | 	{0x82, (interrupt_handler_t)EXTI_PORTD_IRQHandler}, /* irq6 - External interrupt 3 (GPIOD) */
 26 | 	{0x82, (interrupt_handler_t)EXTI_PORTE_IRQHandler}, /* irq7 - External interrupt 4 (GPIOE) */
 27 | 	
 28 | #if defined (STM8S208) || defined (STM8AF52Ax)
 29 | 	{0x82, (interrupt_handler_t)CAN_RX_IRQHandler}, /* irq8 - CAN Rx interrupt */
 30 | 	{0x82, (interrupt_handler_t)CAN_TX_IRQHandler}, /* irq9 - CAN Tx/ER/SC interrupt */
 31 | #elif defined (STM8S903)
 32 | 	{0x82, (interrupt_handler_t)EXTI_PORTF_IRQHandler}, /* irq8 - External interrupt 5 (GPIOF) */
 33 | 	{0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq9 - Reserved */
 34 | #else /*STM8S207, STM8S105 or STM8AF62Ax or STM8AF626x*/
 35 | 	{0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq8 - Reserved */
 36 | 	{0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq9 - Reserved */
 37 | #endif /* STM8S208 or STM8AF52Ax */
 38 | 	{0x82, (interrupt_handler_t)SPI_IRQHandler}, /* irq10 - SPI End of transfer interrupt */
 39 | 	{0x82, (interrupt_handler_t)TIM1_UPD_OVF_TRG_BRK_IRQHandler}, /* irq11 - TIM1 Update/Overflow/Trigger/Break interrupt */
 40 | 	/*{0x82, (interrupt_handler_t)TIM1_CAP_COM_IRQHandler}, /* irq12 - TIM1 Capture/Compare interrupt */
 41 | 	{0x82, (interrupt_handler_t)usb_rx},
 42 |   
 43 | #ifdef STM8S903
 44 |   {0x82, (interrupt_handler_t)TIM5_UPD_OVF_BRK_TRG_IRQHandler}, /* irq13 - TIM5 Update/Overflow/Break/Trigger interrupt  */
 45 |   {0x82, (interrupt_handler_t)TIM5_CAP_COM_IRQHandler}, /* irq14 - TIM5 Capture/Compare interrupt */
 46 | 	
 47 | #else /*STM8S208, STM8S207, STM8S105 or STM8S103 or STM8AF62Ax or STM8AF52Ax or STM8AF626x*/
 48 |   {0x82, (interrupt_handler_t)TIM2_UPD_OVF_BRK_IRQHandler}, /* irq13 - TIM2 Update/Overflow/Break interrupt  */
 49 |   {0x82, (interrupt_handler_t)TIM2_CAP_COM_IRQHandler}, /* irq14 - TIM2 Capture/Compare interrupt */
 50 | #endif /*STM8S903*/
 51 | 	
 52 | #if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S105) || \
 53 |     defined(STM8S005) ||  defined(STM8AF52Ax) || defined(STM8AF62Ax) || defined(STM8AF626x)
 54 |   {0x82, (interrupt_handler_t)TIM3_UPD_OVF_BRK_IRQHandler}, /* irq15 - TIM3 Update/Overflow/Break interrupt */
 55 |   {0x82, (interrupt_handler_t)TIM3_CAP_COM_IRQHandler}, /* irq16 - TIM3 Capture/Compare interrupt */
 56 | #else
 57 | 	{0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq15 - Reserved */
 58 | 	{0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq16 - Reserved */
 59 | #endif /*STM8S208, STM8S207, STM8S105 or STM8AF62Ax or STM8AF52Ax or STM8AF626x*/
 60 | 	
 61 | #if defined (STM8S105) || defined (STM8S005) || defined(STM8AF626x)
 62 | 	{0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq17 - Reserved */
 63 | 	{0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq18 - Reserved */
 64 | #else
 65 | 	{0x82, (interrupt_handler_t)UART1_TX_IRQHandler}, /* irq17 - UART1 Tx complete interrupt */
 66 | 	{0x82, (interrupt_handler_t)UART1_RX_IRQHandler}, /* irq18 - UART1 Rx interrupt */
 67 | #endif /*STM8S105 or STM8AF626x */
 68 | 	{0x82, (interrupt_handler_t)I2C_IRQHandler}, /* irq19 - I2C interrupt */
 69 | 
 70 | #if defined(STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8AF52Ax) || defined(STM8AF62Ax)
 71 | 
 72 | 	{0x82, (interrupt_handler_t)UART3_TX_IRQHandler}, /* irq20 - UART3 Tx interrupt */
 73 | 	{0x82, (interrupt_handler_t)UART3_RX_IRQHandler}, /* irq21 - UART3 Rx interrupt */
 74 | #elif defined (STM8S105) || defined (STM8S005) || defined (STM8AF626x)
 75 | 	{0x82, (interrupt_handler_t)UART2_TX_IRQHandler}, /* irq20 - UART2 Tx interrupt */
 76 | 	{0x82, (interrupt_handler_t)UART2_RX_IRQHandler}, /* irq21 - UART2 Rx interrupt */
 77 | 
 78 | #else /* STM8S103, STM8S903 */
 79 | 	{0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq20 - Reserved */
 80 | 	{0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq21 - Reserved */
 81 | #endif /* STM8S208, STM8S207, STM8AF52Ax or STM8AF62Ax */
 82 | 
 83 | #if defined(STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8AF52Ax) || defined(STM8AF62Ax)
 84 | 	{0x82, (interrupt_handler_t)ADC2_IRQHandler}, /* irq22 - ADC2 end of conversion interrupt */
 85 | #else /* STM8S105, STM8S103, STM8S903 */
 86 | 	{0x82, (interrupt_handler_t)ADC1_IRQHandler}, /* irq22 - ADC1 end of conversion/Analog watchdog interrupts */
 87 | 
 88 | #endif /* STM8S208, STM8S207, STM8AF52Ax or STM8AF62Ax */
 89 | 
 90 | #ifdef STM8S903
 91 | 	{0x82, (interrupt_handler_t)TIM6_UPD_OVF_TRG_IRQHandler}, /* irq23 - TIM6 Update/Overflow/Trigger interrupt */
 92 | #else
 93 | 	{0x82, (interrupt_handler_t)TIM4_UPD_OVF_IRQHandler}, /* irq23 - TIM4 Update/Overflow interrupt */
 94 | #endif /*STM8S903*/
 95 | 	{0x82, (interrupt_handler_t)EEPROM_EEC_IRQHandler},  /* irq24 - FLASH interrupt */
 96 | 	{0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq25 - Reserved */
 97 | 	{0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq26 - Reserved */
 98 | 	{0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq27 - Reserved */
 99 | 	{0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq28 - Reserved */
100 | 	{0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq29 - Reserved */
101 | 
102 | };
103 | 
104 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
105 | 
--------------------------------------------------------------------------------
/mcu/stm8s003f3.ini:
--------------------------------------------------------------------------------
1 | define emulator-reset-port-mcu
2 | target gdi -dll swim\stm_swim.dll -stlink3 -port $arg0 -mcuname $arg1
3 | mcuname -set $arg1
4 | end
5 | 
6 | emulator-reset-port-mcu usb://usb stm8s003f3
7 | quit
--------------------------------------------------------------------------------
/mcu/stm8s003f3.lsf:
--------------------------------------------------------------------------------
 1 | #==========================================================
 2 | #   File:   Linker Script File
 3 | #   Date:   2013-01-02
 4 | #	Denis Zheleznyakov aka ZiB @ ZiBlog.ru
 5 | #==========================================================
 6 | 
 7 | # флеш-память: программный код, константы
 8 | +seg .const -b 0x8480 -m 0x1f80 -n .const -it   
 9 | +seg .text -a .const  -n .text
10 | 
11 | # EEPROM
12 | +seg .eeprom -b 0x4000 -m 0x80  -n .eeprom
13 | 
14 | # ОЗУ: нулевая страница
15 | +seg .bsct -b 0x0 -m 0x100  -n .bsct
16 | +seg .ubsct -a .bsct  -n .ubsct
17 | +seg .bit -a .ubsct  -n .bit -id
18 | #+seg .share -a .bit  -n .share -is
19 | 
20 | # ОЗУ: 
21 | +seg .data -b 0x100 -m 0x100  -n .data
22 | +seg .in_ram -a .data -n .in_ram -ic
23 | +seg .bss -a .in_ram  -n .bss
24 | 
25 | #----------------------------------------------------------
26 | 
27 | # начальная инициализация 
28 | crtsi0.sm8
29 | 
30 | # исходники
31 | target/main.o
32 | target/usb.o
33 | target/macros.o
34 | target/stm8s_it.o
35 | target/stm8s_clk.o
36 | target/stm8s_tim1.o
37 | target/stm8s_tim2.o
38 | target/stm8s_tim4.o
39 | target/stm8s_uart1.o
40 | 
41 | # библиотеки
42 | libis0.sm8
43 | libm0.sm8
44 | 
45 | # таблица прерываний
46 | +seg .const -b 0x8000 -k
47 | target/stm8_interrupt_vector.o
48 | 
49 | +seg .text -b 0x8080
50 | target/usb_tx.o
51 | 
52 | +seg .text -b 0x8280
53 | target/usb_rx.o
54 | 
55 | # определения используются при начальной инициализации
56 | +def __endzp=@.ubsct
57 | +def __memory=@.bss
58 | +def __startmem=@.bss
59 | +def __endmem=0x1ff
60 | +def __stack=0x3ff 
61 | 
62 | 
--------------------------------------------------------------------------------
/mcu/stm8s_conf.h:
--------------------------------------------------------------------------------
  1 | /**
  2 |   ******************************************************************************
  3 |   * @file     stm8s_conf.h
  4 |   * @author   MCD Application Team
  5 |   * @version  V2.1.0
  6 |   * @date     18-November-2011
  7 |   * @brief    This file is used to configure the Library.
  8 |   ******************************************************************************
  9 |   * @attention
 10 |   *
 11 |   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 12 |   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 13 |   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 14 |   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 15 |   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 16 |   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 17 |   *
 18 |   * © COPYRIGHT 2011 STMicroelectronics
 19 |   ******************************************************************************
 20 |   */ 
 21 | 
 22 | /* Define to prevent recursive inclusion -------------------------------------*/
 23 | #ifndef __STM8S_CONF_H
 24 | #define __STM8S_CONF_H
 25 | 
 26 | /* Includes ------------------------------------------------------------------*/
 27 | #include "stm8s.h"
 28 | 
 29 | /* Uncomment the line below to enable peripheral header file inclusion */
 30 | #if defined(STM8S105) || defined(STM8S005) || defined(STM8S103) || defined(STM8S003) ||\
 31 |     defined(STM8S903) || defined (STM8AF626x)
 32 | #include "stm8s_adc1.h" 
 33 | #endif /* (STM8S105) ||(STM8S103) || (STM8S903) || STM8AF626x*/
 34 | #if defined(STM8S208) || defined(STM8S207) || defined(STM8S007) || defined (STM8AF52Ax) ||\
 35 |     defined (STM8AF62Ax)
 36 |  #include "stm8s_adc2.h"
 37 | #endif /* (STM8S208) || (STM8S207) || (STM8AF62Ax) || (STM8AF52Ax) */
 38 | #include "stm8s_awu.h"
 39 | #include "stm8s_beep.h"
 40 | #if defined (STM8S208) || defined (STM8AF52Ax)
 41 |  #include "stm8s_can.h"
 42 | #endif /* STM8S208 || STM8AF52Ax */
 43 | #include "stm8s_clk.h"
 44 | #include "stm8s_exti.h"
 45 | #include "stm8s_flash.h"
 46 | #include "stm8s_gpio.h"
 47 | #include "stm8s_i2c.h"
 48 | #include "stm8s_itc.h"
 49 | #include "stm8s_iwdg.h"
 50 | #include "stm8s_rst.h"
 51 | #include "stm8s_spi.h"
 52 | #include "stm8s_tim1.h"
 53 | #ifndef STM8S903
 54 |  #include "stm8s_tim2.h"
 55 | #endif /* STM8S903 */
 56 | #if defined(STM8S208) || defined(STM8S207) || defined(STM8S007) ||defined(STM8S105) ||\
 57 |     defined(STM8S005) ||  defined (STM8AF52Ax) || defined (STM8AF62Ax) || defined (STM8AF626x)
 58 |  #include "stm8s_tim3.h"
 59 | #endif /* (STM8S208) ||defined(STM8S207) || defined(STM8S007) ||defined(STM8S105) */ 
 60 | #ifndef STM8S903
 61 |  #include "stm8s_tim4.h"
 62 | #endif /* STM8S903 */
 63 | #ifdef STM8S903
 64 |  #include "stm8s_tim5.h"
 65 |  #include "stm8s_tim6.h"
 66 | #endif /* STM8S903 */
 67 | #if defined(STM8S208) ||defined(STM8S207) || defined(STM8S007) ||defined(STM8S103) ||\
 68 |     defined(STM8S003) || defined(STM8S903) || defined (STM8AF52Ax) || defined (STM8AF62Ax)
 69 |  #include "stm8s_uart1.h"
 70 | #endif /* STM8S208 || STM8S207 || STM8S103 ||STM8S903 || STM8AF52Ax || STM8AF62Ax */
 71 | #if defined(STM8S105) || defined(STM8S005) ||  defined (STM8AF626x)
 72 |  #include "stm8s_uart2.h"
 73 | #endif /* STM8S105 || STM8AF626x */
 74 | #if defined(STM8S208) ||defined(STM8S207) || defined(STM8S007) || defined (STM8AF52Ax) ||\
 75 |     defined (STM8AF62Ax)
 76 |  #include "stm8s_uart3.h"
 77 | #endif /* STM8S208 || STM8S207 || STM8AF52Ax || STM8AF62Ax */ 
 78 | #include "stm8s_wwdg.h"
 79 | 
 80 | /* Exported types ------------------------------------------------------------*/
 81 | /* Exported constants --------------------------------------------------------*/
 82 | /* Uncomment the line below to expanse the "assert_param" macro in the
 83 |    Standard Peripheral Library drivers code */
 84 | //#define USE_FULL_ASSERT    (1)
 85 | 
 86 | /* Exported macro ------------------------------------------------------------*/
 87 | #ifdef  USE_FULL_ASSERT
 88 | 
 89 | /**
 90 |   * @brief  The assert_param macro is used for function's parameters check.
 91 |   * @param expr: If expr is false, it calls assert_failed function
 92 |   *   which reports the name of the source file and the source
 93 |   *   line number of the call that failed.
 94 |   *   If expr is true, it returns no value.
 95 |   * @retval : None
 96 |   */
 97 | #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
 98 | /* Exported functions ------------------------------------------------------- */
 99 | void assert_failed(uint8_t* file, uint32_t line);
100 | #else
101 | #define assert_param(expr) ((void)0)
102 | #endif /* USE_FULL_ASSERT */
103 | 
104 | #endif /* __STM8S_CONF_H */
105 | 
106 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
107 | 
--------------------------------------------------------------------------------
/mcu/stm8s_it.c:
--------------------------------------------------------------------------------
  1 | /**
  2 |  ******************************************************************************
  3 |  * @file     stm8s_it.c
  4 |  * @author   MCD Application Team
  5 |  * @version  V2.1.0
  6 |  * @date     18-November-2011
  7 |  * @brief    Main Interrupt Service Routines.
  8 |  *           This file provides template for all peripherals interrupt service
  9 |  *           routine.
 10 |  ******************************************************************************
 11 |  * @attention
 12 |  *
 13 |  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 14 |  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 15 |  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 16 |  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 17 |  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 18 |  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 19 |  *
 20 |  * © COPYRIGHT 2011 STMicroelectronics
 21 |  ******************************************************************************
 22 |  */
 23 | 
 24 | /* Includes ------------------------------------------------------------------*/
 25 | #include "main.h"
 26 | #include "stm8s_it.h"
 27 | 
 28 | #ifdef _COSMIC_
 29 | INTERRUPT_HANDLER(NonHandledInterrupt)
 30 | {
 31 | }
 32 | #endif /*_COSMIC_*/
 33 | 
 34 | INTERRUPT_HANDLER_TRAP( TRAP_IRQHandler)
 35 | {
 36 | }
 37 | 
 38 | INTERRUPT_HANDLER( TLI_IRQHandler)
 39 | {
 40 | }
 41 | 
 42 | INTERRUPT_HANDLER( AWU_IRQHandler)
 43 | {
 44 | }
 45 | 
 46 | INTERRUPT_HANDLER( CLK_IRQHandler)
 47 | {
 48 | }
 49 | 
 50 | INTERRUPT_HANDLER( EXTI_PORTA_IRQHandler)
 51 | {
 52 | }
 53 | 
 54 | INTERRUPT_HANDLER( EXTI_PORTB_IRQHandler)
 55 | {
 56 | }
 57 | 
 58 | INTERRUPT_HANDLER( EXTI_PORTC_IRQHandler)
 59 | {
 60 | }
 61 | 
 62 | INTERRUPT_HANDLER( EXTI_PORTD_IRQHandler)
 63 | {
 64 | }
 65 | 
 66 | INTERRUPT_HANDLER( EXTI_PORTE_IRQHandler)
 67 | {
 68 | }
 69 | 
 70 | #ifdef STM8S903
 71 | INTERRUPT_HANDLER(EXTI_PORTF_IRQHandler)
 72 | {
 73 | }
 74 | #endif /*STM8S903*/
 75 | 
 76 | #if defined (STM8S208) || defined (STM8AF52Ax)
 77 | INTERRUPT_HANDLER(CAN_RX_IRQHandler)
 78 | {
 79 | }
 80 | 
 81 | INTERRUPT_HANDLER(CAN_TX_IRQHandler)
 82 | {
 83 | }
 84 | #endif /*STM8S208 || STM8AF52Ax */
 85 | 
 86 | INTERRUPT_HANDLER( SPI_IRQHandler)
 87 | {
 88 | }
 89 | 
 90 | INTERRUPT_HANDLER( TIM1_UPD_OVF_TRG_BRK_IRQHandler)
 91 | {
 92 | }
 93 | 
 94 | //INTERRUPT_HANDLER( TIM1_CAP_COM_IRQHandler)
 95 | //{
 96 | //}
 97 | 
 98 | #ifdef STM8S903
 99 | INTERRUPT_HANDLER(TIM5_UPD_OVF_BRK_TRG_IRQHandler)
100 | {
101 | }
102 | 
103 | INTERRUPT_HANDLER(TIM5_CAP_COM_IRQHandler)
104 | {
105 | }
106 | 
107 | #else /*STM8S208, STM8S207, STM8S105 or STM8S103 or STM8AF62Ax or STM8AF52Ax or STM8AF626x */
108 | INTERRUPT_HANDLER( TIM2_UPD_OVF_BRK_IRQHandler)
109 | {
110 | }
111 | 
112 | INTERRUPT_HANDLER( TIM2_CAP_COM_IRQHandler)
113 | {
114 | }
115 | #endif /*STM8S903*/
116 | 
117 | #if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S105) || \
118 |     defined(STM8S005) ||  defined (STM8AF62Ax) || defined (STM8AF52Ax) || defined (STM8AF626x)
119 | INTERRUPT_HANDLER(TIM3_UPD_OVF_BRK_IRQHandler)
120 | {
121 | }
122 | 
123 | INTERRUPT_HANDLER(TIM3_CAP_COM_IRQHandler)
124 | {
125 | }
126 | #endif /*STM8S208, STM8S207 or STM8S105 or STM8AF62Ax or STM8AF52Ax or STM8AF626x */
127 | 
128 | #if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S103) || \
129 |     defined(STM8S003) ||  defined (STM8AF62Ax) || defined (STM8AF52Ax) || defined (STM8S903)
130 | INTERRUPT_HANDLER( UART1_TX_IRQHandler)
131 | {
132 | }
133 | 
134 | INTERRUPT_HANDLER( UART1_RX_IRQHandler)
135 | {
136 | }
137 | #endif /*STM8S208 or STM8S207 or STM8S103 or STM8S903 or STM8AF62Ax or STM8AF52Ax */
138 | 
139 | INTERRUPT_HANDLER( I2C_IRQHandler)
140 | {
141 | }
142 | 
143 | #if defined(STM8S105) || defined(STM8S005) ||  defined (STM8AF626x)
144 | INTERRUPT_HANDLER(UART2_TX_IRQHandler)
145 | {
146 | }
147 | 
148 | INTERRUPT_HANDLER(UART2_RX_IRQHandler)
149 | {
150 | }
151 | #endif /* STM8S105 or STM8AF626x */
152 | 
153 | #if defined(STM8S207) || defined(STM8S007) || defined(STM8S208) || defined (STM8AF52Ax) || defined (STM8AF62Ax)
154 | INTERRUPT_HANDLER(UART3_TX_IRQHandler)
155 | {
156 | }
157 | 
158 | INTERRUPT_HANDLER(UART3_RX_IRQHandler)
159 | {
160 | }
161 | #endif /*STM8S208 or STM8S207 or STM8AF52Ax or STM8AF62Ax */
162 | 
163 | #if defined(STM8S207) || defined(STM8S007) || defined(STM8S208) || defined (STM8AF52Ax) || defined (STM8AF62Ax)
164 | INTERRUPT_HANDLER(ADC2_IRQHandler)
165 | {
166 | }
167 | #else /*STM8S105, STM8S103 or STM8S903 or STM8AF626x */
168 | INTERRUPT_HANDLER( ADC1_IRQHandler)
169 | {
170 | }
171 | #endif /*STM8S208 or STM8S207 or STM8AF52Ax or STM8AF62Ax */
172 | 
173 | #ifdef STM8S903
174 | INTERRUPT_HANDLER(TIM6_UPD_OVF_TRG_IRQHandler)
175 | {
176 | }
177 | #else /*STM8S208, STM8S207, STM8S105 or STM8S103 or STM8AF52Ax or STM8AF62Ax or STM8AF626x */
178 | /**
179 |  * @brief Timer4 Update/Overflow Interrupt routine.
180 |  * @param  None
181 |  * @retval None
182 |  */
183 | 
184 | INTERRUPT_HANDLER( TIM4_UPD_OVF_IRQHandler)
185 | {
186 | }
187 | #endif /*STM8S903*/
188 | 
189 | INTERRUPT_HANDLER( EEPROM_EEC_IRQHandler)
190 | {
191 | }
192 | 
193 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
194 | 
--------------------------------------------------------------------------------
/mcu/stm8s_it.h:
--------------------------------------------------------------------------------
  1 | /**
  2 |   ******************************************************************************
  3 |   * @file     stm8s_it.h
  4 |   * @author   MCD Application Team
  5 |   * @version  V2.1.0
  6 |   * @date     18-November-2011
  7 |   * @brief    This file contains the headers of the interrupt handlers
  8 |   ******************************************************************************
  9 |   * @attention
 10 |   *
 11 |   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 12 |   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 13 |   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 14 |   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 15 |   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 16 |   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 17 |   *
 18 |   * © COPYRIGHT 2011 STMicroelectronics
 19 |   ******************************************************************************
 20 |   */ 
 21 | 
 22 | /* Define to prevent recursive inclusion -------------------------------------*/
 23 | #ifndef __STM8S_IT_H
 24 | #define __STM8S_IT_H
 25 | 
 26 | /* Includes ------------------------------------------------------------------*/
 27 | #include "stm8s.h"
 28 | 
 29 | /* Exported types ------------------------------------------------------------*/
 30 | /* Exported constants --------------------------------------------------------*/
 31 | /* Exported macro ------------------------------------------------------------*/
 32 | /* Exported functions ------------------------------------------------------- */
 33 | #ifdef _COSMIC_
 34 |  void _stext(void); /* RESET startup routine */
 35 |  INTERRUPT void NonHandledInterrupt(void);
 36 | #endif /* _COSMIC_ */
 37 | 
 38 | #ifndef _RAISONANCE_
 39 |  INTERRUPT void TRAP_IRQHandler(void); /* TRAP */
 40 |  INTERRUPT void TLI_IRQHandler(void); /* TLI */
 41 |  INTERRUPT void AWU_IRQHandler(void); /* AWU */
 42 |  INTERRUPT void CLK_IRQHandler(void); /* CLOCK */
 43 |  INTERRUPT void EXTI_PORTA_IRQHandler(void); /* EXTI PORTA */
 44 |  INTERRUPT void EXTI_PORTB_IRQHandler(void); /* EXTI PORTB */
 45 |  INTERRUPT void EXTI_PORTC_IRQHandler(void); /* EXTI PORTC */
 46 |  INTERRUPT void EXTI_PORTD_IRQHandler(void); /* EXTI PORTD */
 47 |  INTERRUPT void EXTI_PORTE_IRQHandler(void); /* EXTI PORTE */
 48 | 
 49 | #ifdef STM8S903
 50 |  INTERRUPT void EXTI_PORTF_IRQHandler(void); /* EXTI PORTF */
 51 | #endif /*STM8S903*/
 52 | 
 53 | #if defined (STM8S208) || defined (STM8AF52Ax)
 54 |  INTERRUPT void CAN_RX_IRQHandler(void); /* CAN RX */
 55 |  INTERRUPT void CAN_TX_IRQHandler(void); /* CAN TX/ER/SC */
 56 | #endif /* STM8S208 || STM8AF52Ax */
 57 | 
 58 |  INTERRUPT void SPI_IRQHandler(void); /* SPI */
 59 |  INTERRUPT void TIM1_CAP_COM_IRQHandler(void); /* TIM1 CAP/COM */
 60 |  INTERRUPT void TIM1_UPD_OVF_TRG_BRK_IRQHandler(void); /* TIM1 UPD/OVF/TRG/BRK */
 61 | 
 62 | #ifdef STM8S903
 63 |  INTERRUPT void TIM5_UPD_OVF_BRK_TRG_IRQHandler(void); /* TIM5 UPD/OVF/BRK/TRG */
 64 |  INTERRUPT void TIM5_CAP_COM_IRQHandler(void); /* TIM5 CAP/COM */
 65 | #else /*STM8S208, STM8S207, STM8S105 or STM8S103 or STM8AF52Ax or STM8AF62Ax or STM8A626x*/
 66 |  INTERRUPT void TIM2_UPD_OVF_BRK_IRQHandler(void); /* TIM2 UPD/OVF/BRK */
 67 |  INTERRUPT void TIM2_CAP_COM_IRQHandler(void); /* TIM2 CAP/COM */
 68 | #endif /*STM8S903*/
 69 | 
 70 | #if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S105) || \
 71 |     defined(STM8S005) ||  defined (STM8AF52Ax) || defined (STM8AF62Ax) || defined (STM8AF626x)
 72 |  INTERRUPT void TIM3_UPD_OVF_BRK_IRQHandler(void); /* TIM3 UPD/OVF/BRK */
 73 |  INTERRUPT void TIM3_CAP_COM_IRQHandler(void); /* TIM3 CAP/COM */
 74 | #endif /*STM8S208, STM8S207 or STM8S105 or STM8AF52Ax or STM8AF62Ax or STM8A626x */
 75 | 
 76 | #if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S103) || \
 77 |     defined(STM8S003) ||  defined (STM8AF52Ax) || defined (STM8AF62Ax) || defined (STM8S903)
 78 |  INTERRUPT void UART1_TX_IRQHandler(void); /* UART1 TX */
 79 |  INTERRUPT void UART1_RX_IRQHandler(void); /* UART1 RX */
 80 | #endif /*STM8S208, STM8S207, STM8S903 or STM8S103 or STM8AF52Ax or STM8AF62Ax */
 81 | 
 82 |  INTERRUPT void I2C_IRQHandler(void); /* I2C */
 83 | 
 84 | #if defined(STM8S105) || defined(STM8S005) ||  defined (STM8AF626x)
 85 |  INTERRUPT void UART2_RX_IRQHandler(void); /* UART2 RX */
 86 |  INTERRUPT void UART2_TX_IRQHandler(void); /* UART2 TX */
 87 | #endif /* STM8S105 or STM8AF626x */
 88 | 
 89 | #if defined(STM8S207) || defined(STM8S007) || defined(STM8S208) || defined (STM8AF52Ax) || defined (STM8AF62Ax)
 90 |  INTERRUPT void UART3_RX_IRQHandler(void); /* UART3 RX */
 91 |  INTERRUPT void UART3_TX_IRQHandler(void); /* UART3 TX */
 92 | #endif /*STM8S207, STM8S208, STM8AF62Ax or STM8AF52Ax */
 93 | 
 94 | #if defined(STM8S207) || defined(STM8S007) || defined(STM8S208) || defined (STM8AF52Ax) || defined (STM8AF62Ax)
 95 |  INTERRUPT void ADC2_IRQHandler(void); /* ADC2 */
 96 | #else /*STM8S105, STM8S103 or STM8S903*/
 97 |  INTERRUPT void ADC1_IRQHandler(void); /* ADC1 */
 98 | #endif /*STM8S207, STM8S208, STM8AF62Ax or STM8AF52Ax */
 99 | 
100 | #ifdef STM8S903
101 |  INTERRUPT void TIM6_UPD_OVF_TRG_IRQHandler(void); /* TIM6 UPD/OVF/TRG */
102 | #else /*STM8S208, STM8S207, STM8S105 or STM8S103 or STM8AF62Ax or STM8AF52Ax or STM8AF626x */
103 |  INTERRUPT void TIM4_UPD_OVF_IRQHandler(void); /* TIM4 UPD/OVF */
104 | #endif /*STM8S903*/
105 |  INTERRUPT void EEPROM_EEC_IRQHandler(void); /* EEPROM ECC CORRECTION */
106 | #endif /* _RAISONANCE_ */
107 | 
108 | #endif /* __STM8S_IT_H */
109 | 
110 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
111 | 
--------------------------------------------------------------------------------
/target/target.s19:
--------------------------------------------------------------------------------
 1 | S01400007461726765742F7461726765742E736D3868
 2 | S123848012010001FF00000811223344556600000001090212000101008032090401000177
 3 | S10E84A0000000000705810308000A2B
 4 | S12384AEAE03FF9490CE84ABAE84ADF62720A5602717BF04EE03BF07BE04EE0190F6F75C76
 5 | S12384CE905C90B30726F5BE041C000520DDAE00002002F75CA3000A26F9AE01002002F7A2
 6 | S12384EE5CA3014126F9CD84F920FE9B35FF500335FF500835FF500D35FF501235FF501732
 7 | S123850E35FF501C725F500D725F500E353F500C725F500A725F5002725F5000725F5003E9
 8 | S123852E725F5004725F50C64B004B00AE01B4CD8891721E50C7854B00AE03E8894B005FFB
 9 | S123854ECD891A5B044B024B004B01AE0101CD893E5B03A660CD89B3A606CD89C0AE000431
10 | S123856ECD8A01AE0401CD899D9AAEA120CF0102AE0007CF0100CE0100BF00CE0102BF026B
11 | S123858ECE01021D0001CF01022407CE01005ACF0100BE0226E0BE0026DC35FF500235FFA4
12 | S12385AE500035FF500335FF5004CD882620FB893540500A35FF500D35FF500E35FF500CA9
13 | S12385CEA6806B01A65A6B0235020140965CCF012ECD81A19D9D9D9D9D9D725F500E725F85
14 | S12385EE500D353F500C8581893540500A35FF500D35FF500E35FF500CA6806B01A6D26BB6
15 | S123860E0235020140965CCF012ECD81A19D9D9D9D9D9D725F500E725F500D353F500C858F
16 | S123862E81C60131A02D2723A01E2603CC8706A00F2603CC8714A00F271BA05A275CA00FFC
17 | S123864E27F1A00F270A725F01048135010104813503010481C60105A10226363540500AA5
18 | S123866E35FF500D35FF500E35FF500CAE011B55012B0140CF012ECD81A19D9D9D9D9D9D0E
19 | S123868E725F500E725F500D353F500C350301052003CD85BD3502010481C601044A2658DB
20 | S12386AE550130010A550131010B550132010C550133010D550134010E550135010F5501CE
21 | S12386CE36011055013701115501380112550139011355013A011455013B011555013C017F
22 | S12386EE1655013D011755013E011855013F0119CD85F63501010581C60104A1032607CDDD
23 | S123870E85F6725D010581895204AEFFFF1F030F01203C1E05F65C1F055F97011804011898
24 | S123872E03011F03A6086B02201C7B04A5012712040306047B04A8016B047B03A8A06B0370
25 | S123874E2004040306047B020A024D26DD0C017B01110925BE1E03531F031E057B04F75CE8
26 | S123876E1F057B03F75B06818989A64B6B01CC881CA108252E350C012B3580011B7B01C710
27 | S123878E011CA6026B025F16039790F6905C1703D7011B0C027B02A10A25EB7B07A0086B2C
28 | S12387AE07203CAB04C7012B3580011B7B01C7011CA6026B0220137B025F16039790F69087
29 | S12387CE5C1703D7011B0C027B025F977B07905F9097BF0472A9000290B3042CDA0F07C6FC
30 | S12387EE012BA00488AE011DCD8715847B01A14B2604A6C32002A64B6B0135020105200778
31 | S123880EC60104A102260EC60105A10227F27B072703CC877F5B0481C601054A2650C6016B
32 | S123882E0C2727A0802647C6010DA1062640C6010FA10126074B12AE84802009A102262E8A
33 | S123884E4B09AE8492CD87768481C6010DA105261D55010E01063504012B3580011B354B41
34 | S123886E011C725F011D725F011E35020105818080808080808080808080808080808080AC
35 | S123888E808080895204AE04911F03C650C36B017B054A262D721250C57B09270672145080
36 | S12388AEC52004721550C57B06C750C420035A1F03720150C5041E0326F41E0326170F02F0
37 | S12388CE20177B092706721450C52004721550C57B06C750C4A6016B027B0A260C7B01A1FF
38 | S12388EEE12606721150C0201E7B0A260C7B01A1D22606721750C0200E7B0A260A7B01A11D
39 | S123890EB42604721150C17B025B0681897B06C752627B07C752639EC752609FC75261C6FB
40 | S123892E5250A48F1A05C752507B08C752648581899E4D26147B07887B06977B0395CD8A88
41 | S123894E11847B06CD89CD20447B01A10126147B07887B06977B0395CD8A41847B06CD89E8
42 | S123896EDA202AA10226147B07887B06977B0395CD8A71847B06CD89E720127B07887B06E8
43 | S123898E977B0395CD8AA1847B06CD89F48581899F4D27069ECA525420067B0143C45254CF
44 | S12389AEC75254858188C65252A48F1A01C75252848188C65252A4F81A01C75252848188E1
45 | S12389CEC65258A4F31A01C75258848188C65259A4F31A01C75259848188C6525AA4F31A20
46 | S12389EE01C7525A848188C6525BA4F31A01C7525B8481899F43C752557B0143A41EC75253
47 | S1238A0E568581897211525C887B0697A610429F1A036B01C65258A40C1A01C752587B0245
48 | S1238A2E27067212525C20047213525C7210525C5B0381897219525C887B0697A610429F66
49 | S1238A4E1A036B01C65259A40C1A01C752597B022706721A525C2004721B525C7218525C52
50 | S1238A6E5B0381897211525D887B0697A610429F1A036B01C6525AA40C1A01C7525A7B025D
51 | S1238A8E27067212525D20047213525D7210525D5B0381897219525D887B0697A610429F02
52 | S1238AAE1A036B01C6525BA40C1A01C7525B7B022706721A525D2004721B525D7218525DEB
53 | S1068ACE5B0381C2
54 | S1238000820084AE8200887E8200887F8200888082008881820088828200888382008884DB
55 | S123802082008885820088868200887D8200887D820088878200888882008329820088892B
56 | S12380408200888A8200887D8200887D8200888B8200888C8200888D8200887D8200887DAA
57 | S12380608200888E8200888F820088908200887D8200887D8200887D8200887D8200887D8E
58 | S12380809D9D4A26589D9D9D7253500A9D9DA606204B9D9D9D9D4A26519D9D9D7253500A68
59 | S12380A09D9DA60620449D9D9D4A264A9D9D9D9D7253500A9DA606203D9D9D9D9D9D4A2627
60 | S12380C0439D9D9D7253500A9D9DA60620369D9D7625AD7253500AA6069D9D9D9D7625B417
61 | S12380E07253500AA6069D9D9D9D7625BB7253500AA6069D9D9D7625C29D7253500AA60680
62 | S12381009D9D9D9D7625417253500AA6069D9D9D9D7625487253500AA6069D9D9D9D76250F
63 | S12381204F7253500AA6069D9D7625579D9D7253500AA6065C725A014026959D9D9D725F24
64 | S1238140500A819D9D9D9D9D9D9D4A26C49D9D9D7253500A9D9DA60620B79D9D9D9D4A262A
65 | S1238160BD9D9D9D7253500A9D9DA60620B09D9D4A26B69D9D9D9D9D7253500AA60620A98D
66 | S12381809D9D9D4A26AE725A01409D5C9DA6069D7253500A9D725D01402704AC0080D020E7
67 | S11281A09BCE012EA640C7500AA606AC0080D085
68 | S1238280906314040190F62604AC00830C18016B019D906314040190F6277118016B015CB6
69 | S12382A09D906314040190F6276218016B019D9D906314040190F6275318016B019D906322
70 | S12382C014040190F6274518016B019D906314040190F6273718016B010A02272F9063148F
71 | S12382E0040190F6272618016B019D906314040190F6271818016B01F7799063140401901E
72 | S1238300F6270918016B0120899D9D9D8484C7012DCD862F725F500F35FB52557211525083
73 | S1238320725F525E725F525F80AE833772BB525EA383592401FC809D9D9D9D9D9D9D9D9DCC
74 | S12383409D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DAE013090AE500B4C
75 | S10D8360A60E88A68088AC00828077
76 | S10684AB84AE0098
77 | S903FFFFFE
78 | 
--------------------------------------------------------------------------------
/utility/macros.c:
--------------------------------------------------------------------------------
 1 | /*
 2 |  *	File:	macros.c
 3 |  *	Date:	09.01.2012
 4 |  *	Denis Zheleznjakov @ ZiBlog.ru
 5 |  */
 6 | 
 7 | #include  "main.h"
 8 | 
 9 | static volatile uint16_t delay_count;
10 | static volatile _Bool delay_flag;
11 | static volatile uint16_t random;
12 | static _Bool is_ready;
13 | 
14 | void synchronization_10ms_refresh(void)
15 | {
16 | 	static uint8_t counter_0_5_ms;
17 | 
18 | 	if (is_ready == FALSE)
19 | 	{
20 | 		if (++counter_0_5_ms >= 20)
21 | 		{
22 | 			counter_0_5_ms = 0;
23 | 			is_ready = TRUE;
24 | 		}
25 | 	}
26 | }
27 | 
28 | _Bool time_synchronization_10ms(void)
29 | {
30 | 	if (is_ready == TRUE)
31 | 	{
32 | 		is_ready = FALSE;
33 | 		return TRUE;
34 | 	}
35 | 
36 | 	return FALSE;
37 | }
38 | 
39 | uint8_t get_random_byte(void)
40 | {
41 | 	random *= 5;
42 | 	random += 1;
43 | 	random %= 256;
44 | 
45 | 	return (uint8_t) random;
46 | }
47 | 
48 | void delay_ms(volatile uint16_t delay)
49 | {
50 | 	delay_count = delay << 1;
51 | 	delay_flag = TRUE;
52 | 
53 | 	while (delay_flag == TRUE)
54 | 	{
55 | 	}
56 | }
57 | 
58 | void delay_ms_refresh(void)
59 | {
60 | 	if (delay_flag == TRUE)
61 | 	{
62 | 		if (--delay_count == 0U)
63 | 		{
64 | 			delay_flag = FALSE;
65 | 		}
66 | 	}
67 | }
68 | 
--------------------------------------------------------------------------------
/utility/macros.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * File: macros.h
 3 |  * Date: 28.01.2011
 4 |  * Denis Zheleznjakov @ ZiBlog.ru
 5 |  */
 6 | 
 7 | #ifndef MACROS_H_
 8 | #define MACROS_H_
 9 | 
10 | #define BIT(NUMBER)            		(1UL << (NUMBER))
11 | 
12 | #define ARRAY_LENGHT(Value)			(sizeof(Value) / sizeof(Value[0]))
13 | 
14 | #define BYTES(value)    ((uint8_t *) & (value))
15 | 
16 | #define Bit_Set(Var, BitIdx)        ((Var) |=  BIT(BitIdx))
17 | #define Bit_Clr(Var, BitIdx)        ((Var) &= ~BIT(BitIdx))
18 | #define Bit_Get(Var, BitIdx)		((Var)  &  BIT(BitIdx))
19 | #define Bit_Inv(Var, BitIdx)		((Var) ^=  BIT(BitIdx))
20 | #define Bit_Is_Set(Var, BitIdx)		(Bit_Get(Var, BitIdx) == BIT(BitIdx))
21 | #define Bit_Is_Clr(Var, BitIdx)		(Bit_Get(Var, BitIdx) == 0x00)
22 | #define Set(FlagDef)				Bit_Set(FlagDef)
23 | #define Clr(FlagDef)				Bit_Clr(FlagDef)
24 | #define Get(FlagDef)           		Bit_Get(FlagDef)
25 | #define Inv(FlagDef)				Bit_Inv(FlagDef)
26 | #define Is_Set(FlagDef)        		Bit_Is_Set(FlagDef)
27 | #define Is_Clr(FlagDef)				Bit_Is_Clr(FlagDef)
28 | 
29 | #define Bits_Set(Var, Mask)        ((Var) |=  (Mask))
30 | #define Bits_Clr(Var, Mask)        ((Var) &= ~(Mask))
31 | #define Bits_Inv(Var, Mask)        ((Var) ^=  (Mask))
32 | 
33 | void delay_ms_refresh(void);
34 | void delay_ms(volatile uint16_t delay);
35 | uint8_t get_random_byte(void);
36 | void synchronization_10ms_refresh(void);
37 | _Bool time_synchronization_10ms(void);
38 | 
39 | #endif /* MACROS_H_ */
40 | 
--------------------------------------------------------------------------------