Commit de7b0e404c28136d77832e3145e7ce947ce8a38d
authorKonstantin Begun <kostic2000@gmail.com>
Wed, 10 May 2017 22:54:52 +0000 (23:54 +0100)
committerMichel Pollet <github.com@pollet.net>
Thu, 11 May 2017 06:59:48 +0000 (07:59 +0100)
20 files changed:
simavr/cores/sim_90usb162.c
simavr/cores/sim_mega128.c
simavr/cores/sim_mega1280.c
simavr/cores/sim_mega1281.c
simavr/cores/sim_mega128rfa1.c
simavr/cores/sim_mega128rfr2.c
simavr/cores/sim_mega169.c
simavr/cores/sim_mega2560.c
simavr/cores/sim_megax.c
simavr/cores/sim_megax.h
simavr/cores/sim_megax4.c
simavr/cores/sim_megax4.h
simavr/cores/sim_megax8.c
simavr/cores/sim_megax8.h
simavr/cores/sim_tiny13.c
simavr/cores/sim_tiny2313.c
simavr/cores/sim_tinyx4.c
simavr/cores/sim_tinyx4.h
simavr/cores/sim_tinyx5.c
simavr/cores/sim_tinyx5.h

index bd3f1363f3fa613b79c65defc59e4c849526842d..9a45d15df0e8e61d8b834e6c0c07705839e7cc34 100644 (file)
@@ -31,6 +31,7 @@
 #include "avr_timer.h"
 #include "avr_spi.h"
 #include "avr_usb.h"
+#include "avr_acomp.h"
 
 void usb162_init(struct avr_t * avr);
 void usb162_reset(struct avr_t * avr);
@@ -50,6 +51,7 @@ const struct mcu_t {
        avr_timer_t             timer0,timer1;
        avr_spi_t               spi;
        avr_usb_t               usb;
+       avr_acomp_t             acomp;
 } mcu_usb162 = {
        .core = {
                .mmcu = "at90usb162",
@@ -212,6 +214,22 @@ const struct mcu_t {
                .usb_com_vect=USB_COM_vect,
                .usb_gen_vect=USB_GEN_vect,
        },
+       .acomp = {
+               .r_acsr = ACSR,
+               .acis = { AVR_IO_REGBIT(ACSR, ACIS0), AVR_IO_REGBIT(ACSR, ACIS1) },
+               .acic = AVR_IO_REGBIT(ACSR, ACIC),
+               .aco = AVR_IO_REGBIT(ACSR, ACO),
+               .acbg = AVR_IO_REGBIT(ACSR, ACBG),
+               .disabled = AVR_IO_REGBIT(ACSR, ACD),
+
+               .timer_name = '1',
+
+               .ac = {
+                       .enable = AVR_IO_REGBIT(ACSR, ACIE),
+                       .raised = AVR_IO_REGBIT(ACSR, ACI),
+                       .vector = ANALOG_COMP_vect,
+               }
+       }
 };
 
 static avr_t * make()
@@ -240,6 +258,7 @@ void usb162_init(struct avr_t * avr)
        avr_timer_init(avr, &mcu->timer1);
        avr_spi_init(avr, &mcu->spi);
        avr_usb_init(avr, &mcu->usb);
+       avr_acomp_init(avr, &mcu->acomp);
 }
 
 void usb162_reset(struct avr_t * avr)
index 4236b67288608390ae69136cc908d7153cbe2f6b..3b11f2ae771ce3e96796556d865b6bbe3f5a47bf 100644 (file)
@@ -31,6 +31,7 @@
 #include "avr_timer.h"
 #include "avr_spi.h"
 #include "avr_twi.h"
+#include "avr_acomp.h"
 
 void m128_init(struct avr_t * avr);
 void m128_reset(struct avr_t * avr);
@@ -50,6 +51,7 @@ const struct mcu_t {
        avr_extint_t    extint;
        avr_ioport_t    porta, portb, portc, portd, porte, portf, portg;
        avr_uart_t              uart0,uart1;
+       avr_acomp_t             acomp;
        avr_adc_t               adc;
        avr_timer_t             timer0,timer1,timer2,timer3;
        avr_spi_t               spi;
@@ -89,6 +91,29 @@ const struct mcu_t {
        AVR_UARTX_DECLARE(0, 0, 0),
        AVR_UARTX_DECLARE(1, 0, 0),
 
+       .acomp = {
+               .mux_inputs = 8,
+               .mux = { AVR_IO_REGBIT(ADMUX, MUX0), AVR_IO_REGBIT(ADMUX, MUX1),
+                               AVR_IO_REGBIT(ADMUX, MUX2) },
+               .aden = AVR_IO_REGBIT(ADCSRA, ADEN),
+               .acme = AVR_IO_REGBIT(SFIOR, ACME),
+
+               .r_acsr = ACSR,
+               .acis = { AVR_IO_REGBIT(ACSR, ACIS0), AVR_IO_REGBIT(ACSR, ACIS1) },
+               .acic = AVR_IO_REGBIT(ACSR, ACIC),
+               .aco = AVR_IO_REGBIT(ACSR, ACO),
+               .acbg = AVR_IO_REGBIT(ACSR, ACBG),
+               .disabled = AVR_IO_REGBIT(ACSR, ACD),
+
+               .timer_name = '1',
+
+               .ac = {
+                       .enable = AVR_IO_REGBIT(ACSR, ACIE),
+                       .raised = AVR_IO_REGBIT(ACSR, ACI),
+                       .vector = ANALOG_COMP_vect,
+               }
+       },
+
        .adc = {
                .r_admux = ADMUX,
                .mux = { AVR_IO_REGBIT(ADMUX, MUX0), AVR_IO_REGBIT(ADMUX, MUX1),
@@ -421,6 +446,7 @@ void m128_init(struct avr_t * avr)
        avr_ioport_init(avr, &mcu->portg);
        avr_uart_init(avr, &mcu->uart0);
        avr_uart_init(avr, &mcu->uart1);
+       avr_acomp_init(avr, &mcu->acomp);
        avr_adc_init(avr, &mcu->adc);
        avr_timer_init(avr, &mcu->timer0);
        avr_timer_init(avr, &mcu->timer1);
index 84a26a80fb95752484c63a5534e08c7459c2edf1..cff44a10191e4542e8e5b555529dca755c435cf9 100644 (file)
@@ -31,6 +31,7 @@
 #include "avr_timer.h"
 #include "avr_spi.h"
 #include "avr_twi.h"
+#include "avr_acomp.h"
 
 void m1280_init(struct avr_t * avr);
 void m1280_reset(struct avr_t * avr);
@@ -54,6 +55,7 @@ const struct mcu_t {
        avr_ioport_t    porta, portb, portc, portd, porte, portf, portg, porth, portj, portk, portl;
        avr_uart_t              uart0,uart1;
        avr_uart_t              uart2,uart3;
+       avr_acomp_t             acomp;
        avr_adc_t               adc;
        avr_timer_t             timer0,timer1,timer2,timer3,timer4,timer5;
        avr_spi_t               spi;
@@ -106,6 +108,30 @@ const struct mcu_t {
        AVR_UARTX_DECLARE(2, PRR1, PRUSART2),
        AVR_UARTX_DECLARE(3, PRR1, PRUSART3),
 
+       .acomp = {
+               .mux_inputs = 16,
+               .mux = { AVR_IO_REGBIT(ADMUX, MUX0), AVR_IO_REGBIT(ADMUX, MUX1),
+                               AVR_IO_REGBIT(ADMUX, MUX2), AVR_IO_REGBIT(ADCSRB, MUX5) },
+               .pradc = AVR_IO_REGBIT(PRR0, PRADC),
+               .aden = AVR_IO_REGBIT(ADCSRA, ADEN),
+               .acme = AVR_IO_REGBIT(ADCSRB, ACME),
+
+               .r_acsr = ACSR,
+               .acis = { AVR_IO_REGBIT(ACSR, ACIS0), AVR_IO_REGBIT(ACSR, ACIS1) },
+               .acic = AVR_IO_REGBIT(ACSR, ACIC),
+               .aco = AVR_IO_REGBIT(ACSR, ACO),
+               .acbg = AVR_IO_REGBIT(ACSR, ACBG),
+               .disabled = AVR_IO_REGBIT(ACSR, ACD),
+
+               .timer_name = '1',
+
+               .ac = {
+                       .enable = AVR_IO_REGBIT(ACSR, ACIE),
+                       .raised = AVR_IO_REGBIT(ACSR, ACI),
+                       .vector = ANALOG_COMP_vect,
+               }
+       },
+
        .adc = {
                .r_admux = ADMUX,
                .mux = { AVR_IO_REGBIT(ADMUX, MUX0), AVR_IO_REGBIT(ADMUX, MUX1),
@@ -652,6 +678,7 @@ void m1280_init(struct avr_t * avr)
        avr_uart_init(avr, &mcu->uart1);
        avr_uart_init(avr, &mcu->uart2);
        avr_uart_init(avr, &mcu->uart3);
+       avr_acomp_init(avr, &mcu->acomp);
        avr_adc_init(avr, &mcu->adc);
        avr_timer_init(avr, &mcu->timer0);
        avr_timer_init(avr, &mcu->timer1);
index 7c534d1ad0e879dda871ae65bb37b901bcee8125..3bf28a0dc478f0f016bb3493195ff132cff4fcfc 100644 (file)
@@ -31,6 +31,7 @@
 #include "avr_timer.h"
 #include "avr_spi.h"
 #include "avr_twi.h"
+#include "avr_acomp.h"
 
 void m1281_init(struct avr_t * avr);
 void m1281_reset(struct avr_t * avr);
@@ -50,6 +51,7 @@ const struct mcu_t {
        avr_extint_t    extint;
        avr_ioport_t    porta, portb, portc, portd, porte, portf, portg;
        avr_uart_t              uart0,uart1;
+       avr_acomp_t             acomp;
        avr_adc_t               adc;
        avr_timer_t             timer0,timer1,timer2,timer3;
        avr_spi_t               spi;
@@ -96,6 +98,30 @@ const struct mcu_t {
        AVR_UARTX_DECLARE(0, PRR0, PRUSART0),
        AVR_UARTX_DECLARE(1, PRR1, PRUSART1),
 
+       .acomp = {
+               .mux_inputs = 8,
+               .mux = { AVR_IO_REGBIT(ADMUX, MUX0), AVR_IO_REGBIT(ADMUX, MUX1),
+                               AVR_IO_REGBIT(ADMUX, MUX2) },
+               .pradc = AVR_IO_REGBIT(PRR0, PRADC),
+               .aden = AVR_IO_REGBIT(ADCSRA, ADEN),
+               .acme = AVR_IO_REGBIT(ADCSRB, ACME),
+
+               .r_acsr = ACSR,
+               .acis = { AVR_IO_REGBIT(ACSR, ACIS0), AVR_IO_REGBIT(ACSR, ACIS1) },
+               .acic = AVR_IO_REGBIT(ACSR, ACIC),
+               .aco = AVR_IO_REGBIT(ACSR, ACO),
+               .acbg = AVR_IO_REGBIT(ACSR, ACBG),
+               .disabled = AVR_IO_REGBIT(ACSR, ACD),
+
+               .timer_name = '1',
+
+               .ac = {
+                       .enable = AVR_IO_REGBIT(ACSR, ACIE),
+                       .raised = AVR_IO_REGBIT(ACSR, ACI),
+                       .vector = ANALOG_COMP_vect,
+               }
+       },
+
        .adc = {
                .r_admux = ADMUX,
                .mux = { AVR_IO_REGBIT(ADMUX, MUX0), AVR_IO_REGBIT(ADMUX, MUX1),
@@ -460,6 +486,7 @@ void m1281_init(struct avr_t * avr)
        avr_ioport_init(avr, &mcu->portg);
        avr_uart_init(avr, &mcu->uart0);
        avr_uart_init(avr, &mcu->uart1);
+       avr_acomp_init(avr, &mcu->acomp);
        avr_adc_init(avr, &mcu->adc);
        avr_timer_init(avr, &mcu->timer0);
        avr_timer_init(avr, &mcu->timer1);
index 6f433eeb95a3ce51a816cc1b4646dc21ca73444d..5fa61413c201983684e349b0bc3b3f743c173e25 100644 (file)
@@ -33,6 +33,7 @@
 #include "avr_timer.h"
 #include "avr_spi.h"
 #include "avr_twi.h"
+#include "avr_acomp.h"
 
 void m128rfa1_init(struct avr_t * avr);
 void m128rfa1_reset(struct avr_t * avr);
@@ -52,6 +53,7 @@ const struct mcu_t {
        avr_extint_t    extint;
        avr_ioport_t    portb, portd, porte, portf, portg;
        avr_uart_t              uart0,uart1;
+       avr_acomp_t             acomp;
        avr_adc_t               adc;
        avr_timer_t             timer0,timer1,timer2,timer3;
        avr_spi_t               spi;
@@ -104,6 +106,30 @@ const struct mcu_t {
        AVR_UARTX_DECLARE(0, PRR0, PRUSART0),
        AVR_UARTX_DECLARE(1, PRR1, PRUSART1),
 
+       .acomp = {
+               .mux_inputs = 8,
+               .mux = { AVR_IO_REGBIT(ADMUX, MUX0), AVR_IO_REGBIT(ADMUX, MUX1),
+                               AVR_IO_REGBIT(ADMUX, MUX2), AVR_IO_REGBIT(ADCSRB, MUX5) },
+               .pradc = AVR_IO_REGBIT(PRR0, PRADC),
+               .aden = AVR_IO_REGBIT(ADCSRA, ADEN),
+               .acme = AVR_IO_REGBIT(ADCSRB, ACME),
+
+               .r_acsr = ACSR,
+               .acis = { AVR_IO_REGBIT(ACSR, ACIS0), AVR_IO_REGBIT(ACSR, ACIS1) },
+               .acic = AVR_IO_REGBIT(ACSR, ACIC),
+               .aco = AVR_IO_REGBIT(ACSR, ACO),
+               .acbg = AVR_IO_REGBIT(ACSR, ACBG),
+               .disabled = AVR_IO_REGBIT(ACSR, ACD),
+
+               .timer_name = '1',
+
+               .ac = {
+                       .enable = AVR_IO_REGBIT(ACSR, ACIE),
+                       .raised = AVR_IO_REGBIT(ACSR, ACI),
+                       .vector = ANALOG_COMP_vect,
+               }
+       },
+
        .adc = {
                .r_admux = ADMUX,
                .mux = { AVR_IO_REGBIT(ADMUX, MUX0), AVR_IO_REGBIT(ADMUX, MUX1),
@@ -487,6 +513,7 @@ void m128rfa1_init(struct avr_t * avr)
        avr_ioport_init(avr, &mcu->portg);
        avr_uart_init(avr, &mcu->uart0);
        avr_uart_init(avr, &mcu->uart1);
+       avr_acomp_init(avr, &mcu->acomp);
        avr_adc_init(avr, &mcu->adc);
        avr_timer_init(avr, &mcu->timer0);
        avr_timer_init(avr, &mcu->timer1);
index c69907d78816d41da129a4b8223239db3c71fc75..1eb844bb256612ae21e56f329cdaf15c93ba4c95 100644 (file)
@@ -33,6 +33,7 @@
 #include "avr_timer.h"
 #include "avr_spi.h"
 #include "avr_twi.h"
+#include "avr_acomp.h"
 
 void m128rfr2_init(struct avr_t * avr);
 void m128rfr2_reset(struct avr_t * avr);
@@ -78,6 +79,7 @@ const struct mcu_t {
        avr_extint_t    extint;
        avr_ioport_t    portb, portd, porte, portf, portg;
        avr_uart_t              uart0,uart1;
+       avr_acomp_t             acomp;
        avr_adc_t               adc;
        avr_timer_t             timer0,timer1,timer2,timer3;
        avr_spi_t               spi;
@@ -130,6 +132,30 @@ const struct mcu_t {
        AVR_UARTX_DECLARE(0, PRR0, PRUSART0),
        AVR_UARTX_DECLARE(1, PRR1, PRUSART1),
 
+       .acomp = {
+               .mux_inputs = 8,
+               .mux = { AVR_IO_REGBIT(ADMUX, MUX0), AVR_IO_REGBIT(ADMUX, MUX1),
+                               AVR_IO_REGBIT(ADMUX, MUX2), AVR_IO_REGBIT(ADCSRB, MUX5) },
+               .pradc = AVR_IO_REGBIT(PRR0, PRADC),
+               .aden = AVR_IO_REGBIT(ADCSRA, ADEN),
+               .acme = AVR_IO_REGBIT(ADCSRB, ACME),
+
+               .r_acsr = ACSR,
+               .acis = { AVR_IO_REGBIT(ACSR, ACIS0), AVR_IO_REGBIT(ACSR, ACIS1) },
+               .acic = AVR_IO_REGBIT(ACSR, ACIC),
+               .aco = AVR_IO_REGBIT(ACSR, ACO),
+               .acbg = AVR_IO_REGBIT(ACSR, ACBG),
+               .disabled = AVR_IO_REGBIT(ACSR, ACD),
+
+               .timer_name = '1',
+
+               .ac = {
+                       .enable = AVR_IO_REGBIT(ACSR, ACIE),
+                       .raised = AVR_IO_REGBIT(ACSR, ACI),
+                       .vector = ANALOG_COMP_vect,
+               }
+       },
+
        .adc = {
                .r_admux = ADMUX,
                .mux = { AVR_IO_REGBIT(ADMUX, MUX0), AVR_IO_REGBIT(ADMUX, MUX1),
@@ -496,6 +522,7 @@ void m128rfr2_init(struct avr_t * avr)
        avr_ioport_init(avr, &mcu->portg);
        avr_uart_init(avr, &mcu->uart0);
        avr_uart_init(avr, &mcu->uart1);
+       avr_acomp_init(avr, &mcu->acomp);
        avr_adc_init(avr, &mcu->adc);
        avr_timer_init(avr, &mcu->timer0);
        avr_timer_init(avr, &mcu->timer1);
index c72e96ea2a751bf88c2c68b0b811347836430975..81c53190a8ccb280c4671e516f8580d04546b8e9 100644 (file)
@@ -14,6 +14,7 @@
 #include "avr_timer.h"
 #include "avr_spi.h"
 #include "avr_twi.h"
+#include "avr_acomp.h"
 
 void m169p_init(struct avr_t * avr);
 void m169p_reset(struct avr_t * avr);
@@ -37,6 +38,7 @@ const struct mcu_t {
        avr_extint_t    extint;
        avr_ioport_t    porta, portb, portc, portd, porte, portf, portg;
        avr_uart_t              uart0;
+       avr_acomp_t             acomp;
        avr_adc_t               adc;
        avr_timer_t             timer0,timer1,timer2;
        avr_spi_t               spi;
@@ -79,6 +81,30 @@ const struct mcu_t {
 
        AVR_UARTX_DECLARE(0, PRR, PRUSART0),
 
+       .acomp = {
+               .mux_inputs = 8,
+               .mux = { AVR_IO_REGBIT(ADMUX, MUX0), AVR_IO_REGBIT(ADMUX, MUX1),
+                               AVR_IO_REGBIT(ADMUX, MUX2) },
+               .pradc = AVR_IO_REGBIT(PRR, PRADC),
+               .aden = AVR_IO_REGBIT(ADCSRA, ADEN),
+               .acme = AVR_IO_REGBIT(ADCSRB, ACME),
+
+               .r_acsr = ACSR,
+               .acis = { AVR_IO_REGBIT(ACSR, ACIS0), AVR_IO_REGBIT(ACSR, ACIS1) },
+               .acic = AVR_IO_REGBIT(ACSR, ACIC),
+               .aco = AVR_IO_REGBIT(ACSR, ACO),
+               .acbg = AVR_IO_REGBIT(ACSR, ACBG),
+               .disabled = AVR_IO_REGBIT(ACSR, ACD),
+
+               .timer_name = '1',
+
+               .ac = {
+                       .enable = AVR_IO_REGBIT(ACSR, ACIE),
+                       .raised = AVR_IO_REGBIT(ACSR, ACI),
+                       .vector = ANALOG_COMP_vect,
+               }
+       },
+
        .adc = {
                .r_admux = ADMUX,
                .mux = { AVR_IO_REGBIT(ADMUX, MUX0), AVR_IO_REGBIT(ADMUX, MUX1),
@@ -322,6 +348,7 @@ void m169p_init(struct avr_t * avr)
        avr_ioport_init(avr, &mcu->portg);
 
        avr_uart_init(avr, &mcu->uart0);
+       avr_acomp_init(avr, &mcu->acomp);
        avr_adc_init(avr, &mcu->adc);
        avr_timer_init(avr, &mcu->timer0);
        avr_timer_init(avr, &mcu->timer1);
index 8e09e71323979200917ffe1e5b9806582aa0536d..fc3812eb93631fd362c0f257dbb1afa80a571c57 100644 (file)
@@ -32,6 +32,7 @@
 #include "avr_timer.h"
 #include "avr_spi.h"
 #include "avr_twi.h"
+#include "avr_acomp.h"
 
 void m2560_init(struct avr_t * avr);
 void m2560_reset(struct avr_t * avr);
@@ -55,6 +56,7 @@ const struct mcu_t {
        avr_ioport_t    porta, portb, portc, portd, porte, portf, portg, porth, portj, portk, portl;
        avr_uart_t              uart0,uart1;
        avr_uart_t              uart2,uart3;
+       avr_acomp_t             acomp;
        avr_adc_t               adc;
        avr_timer_t             timer0,timer1,timer2,timer3,timer4,timer5;
        avr_spi_t               spi;
@@ -108,6 +110,30 @@ const struct mcu_t {
        AVR_UARTX_DECLARE(2, PRR1, PRUSART2),
        AVR_UARTX_DECLARE(3, PRR1, PRUSART3),
 
+       .acomp = {
+               .mux_inputs = 16,
+               .mux = { AVR_IO_REGBIT(ADMUX, MUX0), AVR_IO_REGBIT(ADMUX, MUX1),
+                               AVR_IO_REGBIT(ADMUX, MUX2), AVR_IO_REGBIT(ADCSRB, MUX5) },
+               .pradc = AVR_IO_REGBIT(PRR0, PRADC),
+               .aden = AVR_IO_REGBIT(ADCSRA, ADEN),
+               .acme = AVR_IO_REGBIT(ADCSRB, ACME),
+
+               .r_acsr = ACSR,
+               .acis = { AVR_IO_REGBIT(ACSR, ACIS0), AVR_IO_REGBIT(ACSR, ACIS1) },
+               .acic = AVR_IO_REGBIT(ACSR, ACIC),
+               .aco = AVR_IO_REGBIT(ACSR, ACO),
+               .acbg = AVR_IO_REGBIT(ACSR, ACBG),
+               .disabled = AVR_IO_REGBIT(ACSR, ACD),
+
+               .timer_name = '1',
+
+               .ac = {
+                       .enable = AVR_IO_REGBIT(ACSR, ACIE),
+                       .raised = AVR_IO_REGBIT(ACSR, ACI),
+                       .vector = ANALOG_COMP_vect,
+               }
+       },
+
        .adc = {
                .r_admux = ADMUX,
                .mux = { AVR_IO_REGBIT(ADMUX, MUX0), AVR_IO_REGBIT(ADMUX, MUX1),
index c9077fa067f1770022111a877eefc9eb5229cfc1..2af1e53421cb266487ff8343ab6d8cac8368e88f 100644 (file)
@@ -38,6 +38,7 @@ void mx_init(struct avr_t * avr)
        avr_ioport_init(avr, &mcu->portc);
        avr_ioport_init(avr, &mcu->portd);
        avr_uart_init(avr, &mcu->uart);
+       avr_acomp_init(avr, &mcu->acomp);
        avr_adc_init(avr, &mcu->adc);
        avr_timer_init(avr, &mcu->timer0);
        avr_timer_init(avr, &mcu->timer1);
index 81c26f5bc31d87b77aa4bef4a768e8bf98888b0f..20363947e87707ba383c4e47f2b652567b437990 100644 (file)
@@ -33,6 +33,8 @@
 #include "avr_timer.h"
 #include "avr_spi.h"
 #include "avr_twi.h"
+#include "avr_acomp.h"
+
 
 void mx_init(struct avr_t * avr);
 void mx_reset(struct avr_t * avr);
@@ -48,6 +50,7 @@ struct mcu_t {
        avr_extint_t    extint;
        avr_ioport_t    portb, portc, portd;
        avr_uart_t              uart;
+       avr_acomp_t             acomp;
        avr_adc_t               adc;
        avr_timer_t             timer0,timer1,timer2;
        avr_spi_t               spi;
@@ -102,6 +105,29 @@ const struct mcu_t SIM_CORENAME = {
        //no PRUSART, upe=PE, no reg/bit name index, 'C' in RX/TX vector names
        AVR_UART_DECLARE(0, 0, PE, , C),
 
+       .acomp = {
+               .mux_inputs = 8,
+               .mux = { AVR_IO_REGBIT(ADMUX, MUX0), AVR_IO_REGBIT(ADMUX, MUX1),
+                               AVR_IO_REGBIT(ADMUX, MUX2) },
+               .aden = AVR_IO_REGBIT(ADCSRA, ADEN),
+               .acme = AVR_IO_REGBIT(SFIOR, ACME),
+
+               .r_acsr = ACSR,
+               .acis = { AVR_IO_REGBIT(ACSR, ACIS0), AVR_IO_REGBIT(ACSR, ACIS1) },
+               .acic = AVR_IO_REGBIT(ACSR, ACIC),
+               .aco = AVR_IO_REGBIT(ACSR, ACO),
+               .acbg = AVR_IO_REGBIT(ACSR, ACBG),
+               .disabled = AVR_IO_REGBIT(ACSR, ACD),
+
+               .timer_name = '1',
+
+               .ac = {
+                       .enable = AVR_IO_REGBIT(ACSR, ACIE),
+                       .raised = AVR_IO_REGBIT(ACSR, ACI),
+                       .vector = ANA_COMP_vect,
+               }
+       },
+
        .adc = {
                .r_admux = ADMUX,
                .mux = { AVR_IO_REGBIT(ADMUX, MUX0), AVR_IO_REGBIT(ADMUX, MUX1),
index 2d12208683de4141a01185f8ca5708ed7c775a85..15e87d8177f71c506103cc42ccd8cbfe490343ba 100644 (file)
@@ -37,6 +37,7 @@ void mx4_init(struct avr_t * avr)
        avr_ioport_init(avr, &mcu->portd);
        avr_uart_init(avr, &mcu->uart0);
        avr_uart_init(avr, &mcu->uart1);
+       avr_acomp_init(avr, &mcu->acomp);
        avr_adc_init(avr, &mcu->adc);
        avr_timer_init(avr, &mcu->timer0);
        avr_timer_init(avr, &mcu->timer1);
index 26886927da114d479ddb557a340d7281fb7d2207..10384b7e84522bcf28e2a5bb27122ca2af9074cc 100644 (file)
@@ -34,6 +34,7 @@
 #include "avr_timer.h"
 #include "avr_spi.h"
 #include "avr_twi.h"
+#include "avr_acomp.h"
 
 void mx4_init(struct avr_t * avr);
 void mx4_reset(struct avr_t * avr);
@@ -49,6 +50,7 @@ struct mcu_t {
        avr_extint_t    extint;
        avr_ioport_t    porta, portb, portc, portd;
        avr_uart_t              uart0,uart1;
+       avr_acomp_t             acomp;
        avr_adc_t               adc;
        avr_timer_t             timer0,timer1,timer2;
        avr_timer_t     timer3;
@@ -131,6 +133,30 @@ const struct mcu_t SIM_CORENAME = {
        AVR_UARTX_DECLARE(0, PRR0, PRUSART0),
        AVR_UARTX_DECLARE(1, PRR0, PRUSART1),
 
+       .acomp = {
+               .mux_inputs = 8,
+               .mux = { AVR_IO_REGBIT(ADMUX, MUX0), AVR_IO_REGBIT(ADMUX, MUX1),
+                               AVR_IO_REGBIT(ADMUX, MUX2) },
+               .pradc = AVR_IO_REGBIT(PRR0, PRADC),
+               .aden = AVR_IO_REGBIT(ADCSRA, ADEN),
+               .acme = AVR_IO_REGBIT(ADCSRB, ACME),
+
+               .r_acsr = ACSR,
+               .acis = { AVR_IO_REGBIT(ACSR, ACIS0), AVR_IO_REGBIT(ACSR, ACIS1) },
+               .acic = AVR_IO_REGBIT(ACSR, ACIC),
+               .aco = AVR_IO_REGBIT(ACSR, ACO),
+               .acbg = AVR_IO_REGBIT(ACSR, ACBG),
+               .disabled = AVR_IO_REGBIT(ACSR, ACD),
+
+               .timer_name = '1',
+
+               .ac = {
+                       .enable = AVR_IO_REGBIT(ACSR, ACIE),
+                       .raised = AVR_IO_REGBIT(ACSR, ACI),
+                       .vector = ANALOG_COMP_vect,
+               }
+       },
+
        .adc = {
        //      .disabled = AVR_IO_REGBIT(PRR0,PRADC),
                .r_admux = ADMUX,
index 46a3519cf240379f4fe753c568da17918e7b51a0..ba84d002b4fa8af7b5c005bdf300fded17544b85 100644 (file)
@@ -35,6 +35,7 @@ void mx8_init(struct avr_t * avr)
        avr_ioport_init(avr, &mcu->portc);
        avr_ioport_init(avr, &mcu->portd);
        avr_uart_init(avr, &mcu->uart);
+       avr_acomp_init(avr, &mcu->acomp);
        avr_adc_init(avr, &mcu->adc);
        avr_timer_init(avr, &mcu->timer0);
        avr_timer_init(avr, &mcu->timer1);
index f9661ab15ed44e1877939f9d0207e10c6c7ce7d3..c4e19946c45003cf98cec0c8edcdd06d278aa53e 100644 (file)
@@ -34,6 +34,7 @@
 #include "avr_timer.h"
 #include "avr_spi.h"
 #include "avr_twi.h"
+#include "avr_acomp.h"
 
 void mx8_init(struct avr_t * avr);
 void mx8_reset(struct avr_t * avr);
@@ -49,6 +50,7 @@ struct mcu_t {
        avr_extint_t    extint;
        avr_ioport_t    portb,portc,portd;
        avr_uart_t              uart;
+       avr_acomp_t             acomp;
        avr_adc_t               adc;
        avr_timer_t             timer0,timer1,timer2;
        avr_spi_t               spi;
@@ -120,6 +122,29 @@ const struct mcu_t SIM_CORENAME = {
        //PRR/PRUSART0, upe=UPE, reg/bit name index=0, no 'C' in RX/TX vector names
        AVR_UART_DECLARE(PRR, PRUSART0, UPE, 0, ),
 
+       .acomp = {
+               .mux_inputs = 8,
+               .mux = { AVR_IO_REGBIT(ADMUX, MUX0), AVR_IO_REGBIT(ADMUX, MUX1),
+                               AVR_IO_REGBIT(ADMUX, MUX2) },
+               .pradc = AVR_IO_REGBIT(PRR, PRADC),
+               .aden = AVR_IO_REGBIT(ADCSRA, ADEN),
+               .acme = AVR_IO_REGBIT(ADCSRB, ACME),
+
+               .r_acsr = ACSR,
+               .acis = { AVR_IO_REGBIT(ACSR, ACIS0), AVR_IO_REGBIT(ACSR, ACIS1) },
+               .acic = AVR_IO_REGBIT(ACSR, ACIC),
+               .aco = AVR_IO_REGBIT(ACSR, ACO),
+               .acbg = AVR_IO_REGBIT(ACSR, ACBG),
+               .disabled = AVR_IO_REGBIT(ACSR, ACD),
+
+               .timer_name = '1',
+
+               .ac = {
+                       .enable = AVR_IO_REGBIT(ACSR, ACIE),
+                       .raised = AVR_IO_REGBIT(ACSR, ACI),
+                       .vector = ANALOG_COMP_vect,
+               }
+       },
        .adc = {
                .r_admux = ADMUX,
                .mux = { AVR_IO_REGBIT(ADMUX, MUX0), AVR_IO_REGBIT(ADMUX, MUX1),
index 469926c30fda0804eea956d5467abb28e669bf0c..34b439ead6f70fdf67e465ac88c177faaa1ce246 100644 (file)
@@ -28,6 +28,7 @@
 #include "avr_ioport.h"
 #include "avr_timer.h"
 #include "avr_adc.h"
+#include "avr_acomp.h"
 
 #define _AVR_IO_H_
 #define __ASSEMBLER__
@@ -44,6 +45,7 @@ static const struct mcu_t {
        avr_extint_t    extint;
        avr_ioport_t    portb;
        avr_timer_t             timer0;
+       avr_acomp_t             acomp;
        avr_adc_t       adc;
 } mcu = {
        .core = {
@@ -119,6 +121,26 @@ static const struct mcu_t {
                        }
                }
        },
+
+       .acomp = {
+               .mux_inputs = 4,
+               .mux = { AVR_IO_REGBIT(ADMUX, MUX0), AVR_IO_REGBIT(ADMUX, MUX1) },
+               .aden = AVR_IO_REGBIT(ADCSRA, ADEN),
+               .acme = AVR_IO_REGBIT(ADCSRB, ACME),
+
+               .r_acsr = ACSR,
+               .acis = { AVR_IO_REGBIT(ACSR, ACIS0), AVR_IO_REGBIT(ACSR, ACIS1) },
+               .aco = AVR_IO_REGBIT(ACSR, ACO),
+               .acbg = AVR_IO_REGBIT(ACSR, ACBG),
+               .disabled = AVR_IO_REGBIT(ACSR, ACD),
+
+               .ac = {
+                       .enable = AVR_IO_REGBIT(ACSR, ACIE),
+                       .raised = AVR_IO_REGBIT(ACSR, ACI),
+                       .vector = ANA_COMP_vect,
+               }
+       },
+
        .adc = {
                .r_admux = ADMUX,
                .mux = { AVR_IO_REGBIT(ADMUX, MUX0),
@@ -185,6 +207,7 @@ static void init(struct avr_t * avr)
        avr_extint_init(avr, &mcu->extint);
        avr_ioport_init(avr, &mcu->portb);
        avr_timer_init(avr, &mcu->timer0);
+       avr_acomp_init(avr, &mcu->acomp);
        avr_adc_init(avr, &mcu->adc);
 }
 
index 6cb836609c374022fe165d6d43eb774d488bd4b3..537401b58e12b8f41078e1dc93bbf1addd4caa0e 100644 (file)
@@ -26,6 +26,7 @@
 #include "avr_ioport.h"
 #include "avr_uart.h"
 #include "avr_timer.h"
+#include "avr_acomp.h"
 
 static void init(struct avr_t * avr);
 static void reset(struct avr_t * avr);
@@ -45,6 +46,7 @@ static const struct mcu_t {
        avr_ioport_t    porta, portb, portd;
        avr_uart_t              uart;
        avr_timer_t             timer0,timer1;
+       avr_acomp_t             acomp;
 } mcu = {
        .core = {
                .mmcu = "attiny2313",
@@ -178,7 +180,25 @@ static const struct mcu_t {
                                }
                        }
                }
-       }
+       },
+
+       .acomp = {
+               .r_acsr = ACSR,
+               .acis = { AVR_IO_REGBIT(ACSR, ACIS0), AVR_IO_REGBIT(ACSR, ACIS1) },
+               .acic = AVR_IO_REGBIT(ACSR, ACIC),
+               .aco = AVR_IO_REGBIT(ACSR, ACO),
+               .acbg = AVR_IO_REGBIT(ACSR, ACBG),
+               .disabled = AVR_IO_REGBIT(ACSR, ACD),
+
+               .timer_name = '1',
+
+               .ac = {
+                       .enable = AVR_IO_REGBIT(ACSR, ACIE),
+                       .raised = AVR_IO_REGBIT(ACSR, ACI),
+                       .vector = ANA_COMP_vect,
+               }
+       },
+
 };
 
 static avr_t * make()
@@ -204,6 +224,7 @@ static void init(struct avr_t * avr)
        avr_uart_init(avr, &mcu->uart);
        avr_timer_init(avr, &mcu->timer0);
        avr_timer_init(avr, &mcu->timer1);
+       avr_acomp_init(avr, &mcu->acomp);
 }
 
 static void reset(struct avr_t * avr)
index 33d44c68d241e3ea673a5cf72887e63a876b2a9a..510c4c03261ac0c9a61c57399cc2c586bdd8398f 100644 (file)
@@ -33,6 +33,7 @@ void tx4_init(struct avr_t * avr)
     avr_extint_init(avr, &mcu->extint);
     avr_ioport_init(avr, &mcu->porta);
     avr_ioport_init(avr, &mcu->portb);
+    avr_acomp_init(avr, &mcu->acomp);
     avr_adc_init(avr, &mcu->adc);
     avr_timer_init(avr, &mcu->timer0);
     avr_timer_init(avr, &mcu->timer1);
index 3ee8929f195d4fa132c68cb4732d14e914735c69..f19617ae6dbcc432eea9edfad8c683c0914daa08 100644 (file)
@@ -31,6 +31,7 @@
 #include "avr_ioport.h"
 #include "avr_adc.h"
 #include "avr_timer.h"
+#include "avr_acomp.h"
 
 void tx4_init(struct avr_t * avr);
 void tx4_reset(struct avr_t * avr);
@@ -44,6 +45,7 @@ struct mcu_t {
     avr_watchdog_t    watchdog;
     avr_extint_t    extint;
     avr_ioport_t    porta, portb;
+    avr_acomp_t                acomp;
     avr_adc_t        adc;
     avr_timer_t    timer0, timer1;
 };
@@ -88,6 +90,29 @@ const struct mcu_t SIM_CORENAME = {
         },
         .r_pcint = PCMSK1,
     },
+       .acomp = {
+               .mux_inputs = 8,
+               .mux = { AVR_IO_REGBIT(ADMUX, MUX0), AVR_IO_REGBIT(ADMUX, MUX1),
+                               AVR_IO_REGBIT(ADMUX, MUX2) },
+               .pradc = AVR_IO_REGBIT(PRR, PRADC),
+               .aden = AVR_IO_REGBIT(ADCSRA, ADEN),
+               .acme = AVR_IO_REGBIT(ADCSRB, ACME),
+
+               .r_acsr = ACSR,
+               .acis = { AVR_IO_REGBIT(ACSR, ACIS0), AVR_IO_REGBIT(ACSR, ACIS1) },
+               .acic = AVR_IO_REGBIT(ACSR, ACIC),
+               .aco = AVR_IO_REGBIT(ACSR, ACO),
+               .acbg = AVR_IO_REGBIT(ACSR, ACBG),
+               .disabled = AVR_IO_REGBIT(ACSR, ACD),
+
+               .timer_name = '1',
+
+               .ac = {
+                       .enable = AVR_IO_REGBIT(ACSR, ACIE),
+                       .raised = AVR_IO_REGBIT(ACSR, ACI),
+                       .vector = ANA_COMP_vect,
+               }
+       },
     .adc = {
         .r_admux = ADMUX,
         .mux = { AVR_IO_REGBIT(ADMUX, MUX0), AVR_IO_REGBIT(ADMUX, MUX1),
index d698caa4486f1ba9d355c688591479faa7c870db..28776db17c5b19d7349eaac935c34f576f43bd50 100644 (file)
@@ -32,6 +32,7 @@ void tx5_init(struct avr_t * avr)
        avr_watchdog_init(avr, &mcu->watchdog);
        avr_extint_init(avr, &mcu->extint);
        avr_ioport_init(avr, &mcu->portb);
+       avr_acomp_init(avr, &mcu->acomp);
        avr_adc_init(avr, &mcu->adc);
        avr_timer_init(avr, &mcu->timer0);
        avr_timer_init(avr, &mcu->timer1);
index cc88196259c68aab2b7d2202a6d177b0e9d9e235..37d9f7763765d0b4c139a45226aae2bd26ae8837 100644 (file)
@@ -31,6 +31,7 @@
 #include "avr_ioport.h"
 #include "avr_adc.h"
 #include "avr_timer.h"
+#include "avr_acomp.h"
 
 void tx5_init(struct avr_t * avr);
 void tx5_reset(struct avr_t * avr);
@@ -44,6 +45,7 @@ struct mcu_t {
        avr_watchdog_t  watchdog;
        avr_extint_t    extint;
        avr_ioport_t    portb;
+       avr_acomp_t             acomp;
        avr_adc_t               adc;
        avr_timer_t     timer0, timer1;
 };
@@ -79,6 +81,26 @@ const struct mcu_t SIM_CORENAME = {
                },
                .r_pcint = PCMSK,
        },
+       .acomp = {
+               .mux_inputs = 4,
+               .mux = { AVR_IO_REGBIT(ADMUX, MUX0), AVR_IO_REGBIT(ADMUX, MUX1),
+                               AVR_IO_REGBIT(ADMUX, MUX2), AVR_IO_REGBIT(ADMUX, MUX3) },
+               .pradc = AVR_IO_REGBIT(PRR, PRADC),
+               .aden = AVR_IO_REGBIT(ADCSRA, ADEN),
+               .acme = AVR_IO_REGBIT(ADCSRB, ACME),
+
+               .r_acsr = ACSR,
+               .acis = { AVR_IO_REGBIT(ACSR, ACIS0), AVR_IO_REGBIT(ACSR, ACIS1) },
+               .aco = AVR_IO_REGBIT(ACSR, ACO),
+               .acbg = AVR_IO_REGBIT(ACSR, ACBG),
+               .disabled = AVR_IO_REGBIT(ACSR, ACD),
+
+               .ac = {
+                       .enable = AVR_IO_REGBIT(ACSR, ACIE),
+                       .raised = AVR_IO_REGBIT(ACSR, ACI),
+                       .vector = ANA_COMP_vect,
+               }
+       },
        .adc = {
                .r_admux = ADMUX,
                .mux = { AVR_IO_REGBIT(ADMUX, MUX0), AVR_IO_REGBIT(ADMUX, MUX1),