/********************************************************************************
* DCC Wagen Decoder Software V1.0 *
* Copyright 2011 Toralf Wilhelm *
* *
* private Nutzung erwünscht, gewerbliche Nutzung erfordert zwingend meine Zustimmung! *
* Datei: init_m8wagdec.inc *
* Kontakt: toralfwilhelm@web.de *
* Webseite: www.toralfwilhelm.de *
* Version: 01/2011 Version 1 Start *
* Beschreibung: Initialisiert die mega8 Hardware *
********************************************************************************/
#include "definitionen.h"
/***************
* Timer1 init *
***************/
// Timer1 initialisieren:
init_timer1_m8:
// Timer/Counter1 Control Register TCCR1A -> 10bit fast pwm mode7 Ausgang noch getrennt für StepDown Wandler
ldi w,0b00000011
out TCCR1A,w
ldi w,0b00001001
out TCCR1B,w
clr w
out TCNT1H,w
out TCNT1L,w
clr w
out OCR1AH,w
out OCR1AL,w
clr w
out OCR1BH,w
out OCR1BL,w
clr w
out ICR1H,w
out ICR1L,w
in w,TIMSK ; holen da beim m8 für alle 3 Timer zuständig
cbr w,(1<<OCIE1A)+(1<<OCIE1B)+(1<<TOIE1)+(1<<TICIE1)
out TIMSK,w
; Timer/Counter Interrupt Flag Register TIFR: Falsche Verwendung!
in w,TIFR ; holen da beim m8 für alle 3 Timer zuständig
sbr w,(1<<OCF1B)+(1<<OCF1A)+(1<<ICF1)+(1<<TOV1)
out TIFR,w
ret
/******************
* m8 Timer2 init *
******************/
// Timer2 macht alle 10us ein interrupt zum DCC Pin einlesen
// dazu Timer mit ck im CTC mode bis 80 zählen lassen
init_timer2_m8:
clr w
out TCNT2,w
ldi w,80 // mit 80 Tackten laden (falsch! Nach 81 Takten!!)
out OCR2,w
// timer mit Teiler auf ck/1 starten, CTC Mode, OC2 nicht verbunden
ldi w,0b00001001
out TCCR2,w
// Asynchronous Status Register ASSR nur für Takt über externen keramikschwinger wichtig
// Falsch! Da hängt allenfalls ein 32-KHz-Uhrenquarz dran! Hier nichts.
ldi w,0
out ASSR,w
in w,TIMSK
sbr w,(1<<OCIE2)
out TIMSK,w
// Timer/Counter Interrupt Flag Register TIFR: lösche Timer2 OCF Interuptflag
// Übelrichender Kode: Falsche Verwendung!
in w,TIFR
cbr w,(1<<OCF2)
out TIFR,w
clr w
out SFIOR,w // unnötig, ist bereits 0
ret
/************
* ADC init *
************/
// ADC initialisieren: free running, Vorteiler 64, interrupt, Vref=AVCC, linksbündig, PC6
init_adc_m8:
ldi w,0b11100110
out ADMUX, w
ldi w,0b10101110
out ADCSRA, w
ret
Detected encoding: UTF-8 | 0
|