Hallo zusammen,
ich stehe momentan auf der Leitung, sehe den Wald vor lauter Bäumen nicht, ......
Ein Timer Interrupt löst nicht so aus wie ich mir das vorstelle
Prinzipielle Vorgangsweise:
CodeBox Assembler
In der Interrupt vector table steht die Sprungadresse für den Timerinterrupt an 12 Stelle.
Er wird nicht ausgelöst.
Nun habe ich die Sprungadresse für den Timerinterrupt in der Tabelle an die 24. Stelle geschrieben. Also Faktor 2. Nun hab ich eine Auslösung für den Timerinterrupt an jener Stelle die eigentlich für den PORTC vorgesehen wäre.
CodeBox Assembler
Wo ist mein Gedankenfehler. Es ist peinlich. Ich komm nicht drauf
Achja: ATmega809
ich stehe momentan auf der Leitung, sehe den Wald vor lauter Bäumen nicht, ......
Ein Timer Interrupt löst nicht so aus wie ich mir das vorstelle
Prinzipielle Vorgangsweise:
- Capture/Compare Wert setzen
- Prescaler setzen
- starten/enablen
- Interrupt freigen
CodeBox Assembler
; TCB - Timer konfigurieren und starten. ldi TEMP1, 0x32 ; Capture/compare Wert L-Byte. 100ns/Takt Abtastrate für Rückmeldekontakte 5µs 50 Takte 0x0032 L-Byte ist 0x32 sts TCB0_CCMPL, TEMP1 ldi TEMP1, 0x00 ; Capture/compare Wert H-Byte. 100ns/Takt Abtastrate für Rückmeldekontakte 5µs 50 Takte 0x0032 H-Byte ist 0x00 sts TCB0_CCMPH, TEMP1 ldi TEMP1, 1<<TCB_CLKSEL0_bp ; CLK_PER / 2 ... TCB läuft somit mit 10MHz ... 100ns/Takt ori TEMP1, 1<<TCB_ENABLE_bp ; TCB starten. Nach 5µs tritt ein Interrupt auf. sts TCB0_CTRLA, TEMP1 ldi TEMP1, 1<<TCB_CAPT_bp ; TCB capture Interrupt freigeben sts TCB0_INTCTRL, TEMP1 ; Interrupts allgemein freigeben sei
In der Interrupt vector table steht die Sprungadresse für den Timerinterrupt an 12 Stelle.
Er wird nicht ausgelöst.
Nun habe ich die Sprungadresse für den Timerinterrupt in der Tabelle an die 24. Stelle geschrieben. Also Faktor 2. Nun hab ich eine Auslösung für den Timerinterrupt an jener Stelle die eigentlich für den PORTC vorgesehen wäre.
CodeBox Assembler
.org 0x0000 rjmp init .org CRCSCAN_NMI_vect reti ; NMI - Non-Maskable Interrupt from CRC .org BOD_VLM_vect reti ; VLM - Voltage Level Monitor .org RTC_CNT_vect reti ; RTC - Overflow or compare match .org RTC_PIT_vect reti ; PIT - Periodic interrupt .org CCL_CCL_vect reti ; CCL - Configurable Custom Logic .org PORTA_PORT_vect reti ; PORTA - External interrupt .org TCA0_LUNF_vect reti ; TCA0 - Overflow .org TCA0_HUNF_vect reti ; TCA0 - Underflow (Split mode) .org TCA0_CMP0_vect reti ; TCA0 - Compare channel 0 .org TCA0_CMP1_vect reti ; TCA0 - Compare channel 1 .org TCA0_CMP2_vect reti ; TCA0 - Compare channel 2 .org TCB0_INT_vect rjmp rm_einlesen ; TCB0 - Capture .org TCB1_INT_vect reti ; TCB1 - Capture .org TWI0_TWIS_vect reti ; TWI0 - Slave .org TWI0_TWIM_vect reti ; TWI0 - Master .org SPI0_INT_vect reti ; SPI0 - Serial Peripheral Interface 0 .org USART0_RXC_vect reti ; USART0 - Receive Complete .org USART0_DRE_vect reti ; USART0 - Data Register Empty .org USART0_TXC_vect reti ; USART0 - Transmit Complete .org PORTD_PORT_vect reti ; PORTD - External interrupt .org AC0_AC_vect reti ; AC0 – Compare .org ADC0_RESRDY_vect reti ; ADC0 – Result Ready .org ADC0_WCOMP_vect reti ; ADC0 - Window Compare .org PORTC_PORT_vect rjmp rm_einlesen ; PORTC - External interrupt .org TCB2_INT_vect reti ; TCB2 - Capture
Wo ist mein Gedankenfehler. Es ist peinlich. Ich komm nicht drauf
Achja: ATmega809
Zuletzt bearbeitet: