#define F_CPU 8000000 #include #include #include #include #include #include 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" static void can_rx_exec(void) { if (can_rx_addr.b[0] == 0xcc && (can_rx_addr.b[1] & 0xfb) == 0x08 && can_rx_addr.b[2] == 0x04 && can_rx_addr.b[3] == 0x7f && (can_rx_dlc & 0x4f) == 1) { uart_puts("-- SET\n"); if (!can_rx_data[0]) { dim_state = 0; dali_send(DALI_ADDR | 0x100); } else { if (!dim_state && can_rx_data[0]) dali_send(DALI_ADDR | 0x108); dim_state = can_rx_data[0]; dali_send(DALI_ADDR | dim_state); } } } 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(); if (can_rx_addr.b[0]) { can_rx_exec(); can_rx_addr.u = 0; } } _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"); can_send(0xaa800000, 1, (uint8_t *)&dali_rx); } 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) { }