parent
							
								
									f961a639f4
								
							
						
					
					
						commit
						f064bc6fb6
					
				@ -0,0 +1,85 @@ | 
				
			|||||||
 | 
					//
 | 
				
			||||||
 | 
					// Created by MightyPork on 2017/02/10.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <stm8s.h> | 
				
			||||||
 | 
					#include "bootstrap.h" | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** Global time base */ | 
				
			||||||
 | 
					volatile uint32_t time_ms; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Putchar for printf | 
				
			||||||
 | 
					 * @param c - char to print | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					void putchar(char c) | 
				
			||||||
 | 
					{ | 
				
			||||||
 | 
						while ((UART1->SR & UART1_SR_TXE) == 0); | 
				
			||||||
 | 
						UART1->DR = (u8)c; | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Init for the chinese STM8 board | 
				
			||||||
 | 
					 * - enable LED | 
				
			||||||
 | 
					 * - enable UART @ 115200 | 
				
			||||||
 | 
					 * - set up UART rx irq | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					void SimpleInit(void) | 
				
			||||||
 | 
					{ | 
				
			||||||
 | 
						// Disable default div/8 HSI prescaller
 | 
				
			||||||
 | 
						CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// LED
 | 
				
			||||||
 | 
						GPIO_Init(GPIOB, GPIO_PIN_5, GPIO_MODE_OUT_PP_HIGH_FAST); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// UART init & enable IRQ
 | 
				
			||||||
 | 
						UART_SimpleInit(UART_BAUD_115200); | 
				
			||||||
 | 
						UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Timebase generation counter
 | 
				
			||||||
 | 
						TIM4_UpdateRequestConfig(TIM4_UPDATESOURCE_REGULAR); | 
				
			||||||
 | 
						TIM4_PrescalerConfig(TIM4_PRESCALER_128, TIM4_PSCRELOADMODE_IMMEDIATE); | 
				
			||||||
 | 
						TIM4_SetAutoreload(0xFF); | 
				
			||||||
 | 
						TIM4_ARRPreloadConfig(ENABLE); | 
				
			||||||
 | 
						TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE); | 
				
			||||||
 | 
						TIM4_Cmd(ENABLE); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						enableInterrupts(); | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @brief Timer4 Update/Overflow Interrupt routine. | 
				
			||||||
 | 
					 * @param  None | 
				
			||||||
 | 
					 * @retval None | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23) | 
				
			||||||
 | 
					{ | 
				
			||||||
 | 
						time_ms++; | 
				
			||||||
 | 
						TIM4_ClearITPendingBit(TIM4_IT_UPDATE); | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** Delay ms */ | 
				
			||||||
 | 
					void Delay(uint16_t ms) | 
				
			||||||
 | 
					{ | 
				
			||||||
 | 
						uint32_t start = time_ms; | 
				
			||||||
 | 
						while ((time_ms - start) < ms); | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * UART1 RX Interrupt routine. | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18) | 
				
			||||||
 | 
					{ | 
				
			||||||
 | 
						if (UART1->SR & UART1_SR_RXNE) { | 
				
			||||||
 | 
							UART_HandleRx(UART1->DR); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Comment out if custom rx handler is added
 | 
				
			||||||
 | 
					#if 1 | 
				
			||||||
 | 
					void UART_HandleRx(char c) | 
				
			||||||
 | 
					{ | 
				
			||||||
 | 
						// echo
 | 
				
			||||||
 | 
						putchar(c); | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					#endif | 
				
			||||||
@ -0,0 +1,58 @@ | 
				
			|||||||
 | 
					//
 | 
				
			||||||
 | 
					// Created by MightyPork on 2017/02/10.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef STM8S_STDINIT_H | 
				
			||||||
 | 
					#define STM8S_STDINIT_H | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** Global timebase */ | 
				
			||||||
 | 
					extern volatile uint32_t time_ms; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** Uart IRQ handler */ | 
				
			||||||
 | 
					void UART1_RX_IRQHandler(void) INTERRUPT(18); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** SysTick handler */ | 
				
			||||||
 | 
					void TIM4_UPD_OVF_IRQHandler(void) INTERRUPT(23); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** putchar, used by the SDCC stdlib */ | 
				
			||||||
 | 
					void putchar(char c); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Simple init (UART, LED, timebase) | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					void SimpleInit(void); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Millisecond delay | 
				
			||||||
 | 
					 * | 
				
			||||||
 | 
					 * @param ms - nr of milliseconds | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					void Delay(uint16_t ms); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * User UART rx handler | 
				
			||||||
 | 
					 * | 
				
			||||||
 | 
					 * If adding custom handler, comment out the defualt echo impl in bootstrap.c | 
				
			||||||
 | 
					 * | 
				
			||||||
 | 
					 * @param c | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					extern void UART_HandleRx(char c); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** Toggle indicator LED */ | 
				
			||||||
 | 
					inline void LED_Toggle(void) | 
				
			||||||
 | 
					{ | 
				
			||||||
 | 
						GPIOB->ODR ^= GPIO_PIN_5; | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** Set indicator LED */ | 
				
			||||||
 | 
					inline void LED_Set(bool state) | 
				
			||||||
 | 
					{ | 
				
			||||||
 | 
						if (state) { | 
				
			||||||
 | 
							GPIOB->ODR &= ~GPIO_PIN_5; | 
				
			||||||
 | 
						} else { | 
				
			||||||
 | 
							GPIOB->ODR |= GPIO_PIN_5; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif //STM8S_DEBUG_H
 | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue