#include "stm32f10x.h"
volatile uint32_t main_counter, mask=1<<7;
int main() {
//--- Independent Watchdog
IWDG->KR = 0x5555;
IWDG->PR = 2;
IWDG->RLR = 0xFFF;
//--- 4 ---- uruchom Watchdoga
IWDG->KR = 0xCCCC;
//--- RCC - Reset Clock Control
RCC->APB2ENR |= (1<<3)|(1<<2); //wlacz sygnal zegarowy portow GPIO A i B
RCC->APB1ENR |= (1<<0); //wlacz sygnal zegarowy timer TIM2
//--- Konfiguracja portow IO
GPIOA->CRL = 0x44444444; // mlodsze 8 linii portu A - wejscia
GPIOA->CRH = 0x22222222; // starsze 8 linii portu A - wyjscia
GPIOB->CRL = 0x22222222; // caly port B - wyjscia
GPIOB->CRH = 0x22222222;
//--- NVIC Nested Vectored Interrupt Controller
//--- 2 ----
NVIC->ISER[0] |= ( 1<< 6); //wlacz przerwanie zewnetrzne EXTI0
NVIC->ISER[0] |= ( 1<< 28); //wlacz przerwanie od timera TIM2
//--- 3 ----
NVIC->IP[6] = 0x90;
NVIC->IP[28] = 0x10;
//--- EXTI External Interrupt Controller
EXTI->IMR |= 1;
EXTI->RTSR |= 1;
//--- Konfiguracja timera TIM2
//--- 1 ----
TIM2->PSC = 998; // preskaler
TIM2->ARR = 999; // pojemnosc licznika (Auto Reload)
TIM2->DIER |= 1; // wlacz generowanie przerwan w chwili pzepelnienia licznika
TIM2->CR1 |= 1; // wlacz timer
//--- Petla glowna
for(;;){
//--- 5 ----
//potencjalne miejsce przeladowania Watchdoga
IWDG->KR = 0xAAAA;
main_counter++;
while (GPIOA->IDR & 128);
}
}
//--- Procedura obslugi przerwania timera
void TIM2_IRQHandler(void) {
TIM2->SR &= ~1;
//--- 5 ----
//potencjalne miejsce przeladowania Watchdoga
mask = ((mask << 1) | (mask >> 7)) & 0xFF;
GPIOB->ODR &= 0xFF00;
GPIOB->ODR |= mask;
}
//--- Procedura obslugi przerwania zewnetrznego linia - A0
void EXTI0_IRQHandler(void){
EXTI->PR |= 1;
//--- 5 ----
//potencjalne miejsce przeladowania Watchdoga
while (GPIOA->IDR & 1) GPIOA->ODR |= 0xFF00;
GPIOA->ODR &= 0x00FF;
}
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}