diff options
Diffstat (limited to 'lightctrl.c')
-rw-r--r-- | lightctrl.c | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/lightctrl.c b/lightctrl.c new file mode 100644 index 0000000..c36f035 --- /dev/null +++ b/lightctrl.c @@ -0,0 +1,85 @@ +#define F_CPU 8000000 +#include <stdint.h> +#include <stdbool.h> +#include <avr/io.h> +#include <avr/interrupt.h> +#include <avr/pgmspace.h> +#include <util/delay.h> + +const uint8_t __signature[3] __attribute__((section (".signature"), used)) = + { SIGNATURE_2, SIGNATURE_1, SIGNATURE_0 }; + +#define B_SCK 5 +#define B_MISO 4 +#define B_MOSI 3 +#define B_SS 2 + +#define D_TXD 1 +#define D_DALII 3 +#define D_DALIO 4 +#define D_LED1 5 +#define D_LED2 6 +#define D_TAST 7 + +#include "uart.c" +#include "dali2.c" +#include "dali_ctl.c" +#include "dim.c" +#include "can.c" + +int main(void) +{ + DDRD |= (1 << D_LED1) | (1 << D_LED2 ) | (1 << D_TXD) | (1 << D_DALIO); + PORTD |= (1 << D_LED1) | (1 << D_TAST); + PORTD &= ~(1 << D_LED1); + + uart_init(); + can_preinit(); + dali_init(); + dim_init(); + + sei(); + uart_puts("\ninit done\n"); + + can_init(); + can_CANSTAT(); + + dali_search(); + + uint8_t ctr = 0; + while (1) { + if (canint) { + canint = false; + can_int(); + } + _delay_ms(5); + do_tick(); + + ctr++; + if (ctr % 64 == 0) { + dali_send(0xffa0); + if (dali_rx_avail) { + uart_puts("ll "); + uart_puthex(dali_rx); + uart_puts("\n"); + } else + uart_puts("ll noans\n"); + } + + if (ctr == 255) { + uart_puts("dali stats: "); + uart_puthex16(dalistat_rxok); + uart_puts(" ok "); + uart_puthex16(dalistat_falsestart); + uart_puts(" f-start "); + uart_puthex16(dalistat_noise); + uart_puts(" noise "); + uart_puthex16(dalistat_manchester); + uart_puts(" mch-err\n"); + } + } +} + +void __do_copy_data(void) __attribute__((naked, section (".init4"), used)); +void __do_copy_data(void) { } + |