diff options
Diffstat (limited to 'can.c')
-rw-r--r-- | can.c | 82 |
1 files changed, 6 insertions, 76 deletions
@@ -1,29 +1,3 @@ -#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 }; - -#include "uart.c" - -#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 - -#include "dali2.c" - #define spi_ss(x) PORTB = ((x) << B_SS) | 0x3; static volatile bool canint = false; @@ -179,14 +153,8 @@ static void can_int(void) spi_perform(MCP2515_WRITE, A_CANINTF, 0x00); } -int main(void) +static void can_preinit(void) { - uint8_t status; - - uart_init(); - - DDRD |= (1 << D_LED1) | (1 << D_LED2 ) | (1 << D_TXD) | (1 << D_DALIO); - spi_ss(1); DDRB = (1 << B_SCK) | (1 << B_MOSI) | (1 << B_SS); @@ -197,59 +165,21 @@ int main(void) EICRA = (1 << ISC01); EIMSK = (1 << INT0); - sei(); - - uart_puts("\nspi: init ok\n"); - _delay_ms(25); - - dali_init(); - _delay_ms(25); + _delay_ms(5); + /* chip reset */ spi_ss(0); spi_wrrd(0xc0); spi_ss(1); - _delay_ms(50); + _delay_ms(5); + spi_ss(0); spi_wrrd(0xb0); - status = spi_wrrd(0xff); + uint8_t status = spi_wrrd(0xff); spi_ss(1); uart_puts("can: status "); uart_puthex(status); uart_puts("\n"); - - can_init(); - can_CANSTAT(); - - dali_send(0xff08); - while (dali_queue_busy()) - ; - dali_send(0xff08); - - for (int i = 0; i < 40; i++) - _delay_ms(25); - - uint8_t ctr = 0; - while (1) { - if (canint) { - canint = false; - can_int(); - } - _delay_ms(40); - ctr++; - if (ctr == 40) - dali_send(0xff91); - if (ctr == 80) - dali_send(0xff99); - if (ctr == 120) - dali_send(0xffa0); - if (ctr == 160) { - dali_send(0xff90); - ctr = 0; - } - } } -void __do_copy_data(void) __attribute__((naked, section (".init4"), used)); -void __do_copy_data(void) { } - |