Hallo,
laut Datenblatt und Headerdifinitionen hat der genennte Controller einen
TIM2. Im folgenden Sourcecode versuche ich diesen im Sekundentakt einen
Interrupt erzeugen zu lassen. Ein Code mit TIM1 funktioniert. Übersehe
ich eine Eigenart der STM8?
PORTD.0 ist eine LED und es handelt sich um ein STM8 Discoveryboard.
1 | #include "stm8s.h"
|
2 | #include "stm8.h"
|
3 | #include "bool.h"
|
4 |
|
5 | #define F_PER ((uint32_t)128000)
|
6 | #define F_CPU ((uint32_t)32000)
|
7 |
|
8 | _Bool bVal = false;
|
9 | INTERRUPT_HANDLER(TIM1_UPD_OVF_TRG_BRK_IRQHandler, 11)
|
10 | {
|
11 | TIM1->SR1 &= ~TIM1_SR1_UIF;
|
12 |
|
13 | if(bVal){
|
14 | bVal = false;
|
15 | CLR(GPIOD, 0);
|
16 | }
|
17 | else{
|
18 | bVal = true;
|
19 | SET(GPIOD, 0);
|
20 | }
|
21 | }
|
22 |
|
23 | main()
|
24 | {
|
25 | uint16_t i;
|
26 |
|
27 | CLK->ICKR |= CLK_ICKR_LSIEN; //LSI aktivieren
|
28 | while(!(CLK->ICKR & CLK_ICKR_LSIRDY)); //Auf LSI warten
|
29 | CLK->SWCR |= CLK_SWCR_SWEN; //Switchen
|
30 | CLK->SWR = 0xD2; //LSi auswählen
|
31 | while(CLK->SWCR & CLK_SWCR_SWBSY); //Auf Auswahl warten
|
32 | CLK->ICKR &= ~CLK_ICKR_HSIEN; //HSI deaktivieren
|
33 | CLK->CKDIVR |= 0x02; //128 / 4 = 32kHz CPU clock
|
34 |
|
35 | PINCONFIG(GPIOD, 0, T_OUTPUT, T_PUSHPULL, T_2MHZ);
|
36 |
|
37 | CLK->PCKENR1 |= CLK_PCKENR1_TIM1;
|
38 | TIM1->PSCRH = 0;
|
39 | TIM1->PSCRL = 1;
|
40 | *(uint16_t*)&TIM1->ARRH = (uint16_t)(F_PER / 2);
|
41 | TIM1->IER |= TIM1_IER_UIE;
|
42 | TIM1->CR1 = TIM1_CR1_CEN;
|
43 |
|
44 | enableInterrupts();
|
45 |
|
46 | while (1){
|
47 | }
|
48 | }
|