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