| Author |
Message
|
mgradzki Poziom 15

Joined: 13 Dec 2005 Posts: 255 Location: Warszawa
|
#1
06 Sep 2008 23:09 [ATMEGA8][avr gcc] Timer1 |
|
|
|
Witam
Napisałem kilka linijek kodu, który ma działać jako generator częstotliwości z częstotliwością regulowaną przez SPI przez inny procesor.
Mam zadeklarowaną zmienną globalną:
| Code: |
| unsigned int tim_reg_Val=3030 |
i zainicjowany timer1:
| Code: |
TIMSK=(1<<TOIE1);
TCNT1=tim_reg_Val;
TCCR1B=0b011;
sei();
|
Przełączanie stanu wyjścia załatwiam w obsłudze przerwania:
| Code: |
SIGNAL (SIG_OVERFLOW1)
{
TCNT1=tim_reg_Val; //regulacja czasu przełączenia
PORTC^=_BV(5); //przełączenie wyjścia
}
|
Zmienna tim_reg_Val przychodzi po SPI (na pewno przychodzi, bo wyrzuciłem sobie jej wartość na UART). Po otrzymaniu zmiennej generator nie zmienia częstotliwości - w procedurze obsługi przerwania od timera1 do TCNT1 zawsze wpisywane jest ustalone na początku 3030
Próbowałem nawet mało subtelnie zmienić wartość zmiennej tim_reg_Val w taki sposób:
| Code: |
int main(void)
{
...
...
while(1)
{
tim_reg_Val=60000;
...
}
}
|
ale dalej bez zmian.
Co zrobić, aby przy każdym uruchomieniu obsługi przerwania od timera1 do TCNT1 wpisyawna była aktualna wartość zmiennej tim_reg_Val ??
|
|
| Back to top |
|
 |
Google

|
#
06 Sep 2008 23:09 |
|
|
|
|
|
| Back to top |
|
 |
acid12 Poziom 17

Joined: 23 Sep 2007 Posts: 387 Location: Katowice
|
#2
06 Sep 2008 23:35 Re: [ATMEGA8][avr gcc] Timer1 |
|
|
|
spr dodać 'volatile' przy deklaracji zmiennej, możliwe że kompilator optymalizując wpisuje na stałe wartość zadeklarowaną na początku, w przerwaniu jej wartość się nie zmienia, dla kompilatora jest ona w tym miejscu jako stała ...
|
|
| Back to top |
|
 |
Google

|
#
06 Sep 2008 23:35 |
|
|
|
|
|
| Back to top |
|
 |
mgradzki Poziom 15

Joined: 13 Dec 2005 Posts: 255 Location: Warszawa
|
#3
07 Sep 2008 00:19 Re: [ATMEGA8][avr gcc] Timer1 |
|
|
|
| acid12 wrote: |
| spr dodać 'volatile' przy deklaracji zmiennej, możliwe że kompilator optymalizując wpisuje na stałe wartość zadeklarowaną na początku, w przerwaniu jej wartość się nie zmienia, dla kompilatora jest ona w tym miejscu jako stała ... |
:spoko:
Kojarzyłem, że chodzi o dadonie tego słowa kluczowego w deklaracji zmiennej, tylko nie mogłem sobie go przypomnieć. Już planowałem podziałać na wskaźnikach.
|
|
| Back to top |
|
 |