picstick
An AVR based programming adapter for PIC microcontrollers.
/** USI UART Config **/
#define SYSTEM_CLOCK F_CPU
#define TIMER_PRESCALER 1
#define PRESCALECMD (1<<CS00)
#define BAUDRATE 76800
// Buffer size must be a power of 2
#define UART_RX_BUFFER_SIZE 4
#define UART_TX_BUFFER_SIZE 4
/** USI UART Functions **/
void uuart_init(void);
void uuart_flush_buffers(void);
void uuart_tx_init(void);
void uuart_tx_byte(unsigned char);
void uuart_tx_bytes(unsigned char *buf, unsigned char len);
unsigned char uuart_rx_byte(void);
unsigned char uuart_rx_bytes(unsigned char *buf, unsigned char len);
unsigned char uuart_rx_bytes_until(unsigned char sep, unsigned char *buf, unsigned char len);
unsigned char uuart_rx_data_available(void);
void uuart_print(char *str); // transmit a string
void uuart_showbits(int byte); // show binary value
void uuart_showhex(int byte);
/** Chip Specific Defines **/
// #ifdef __AVR_ATtiny44__
#define TIFR TIFR0
#define TIMSK TIMSK0
#define PCIF PCIF0
#define PCIE PCIE0
#define PCMSK PCMSK0
#define PSR0 PSR10
#define USI_DDR DDRA
#define USI_OUTPUT PORTA
#define USI_INPUT PINA
#define USI_DI_PIN PA6
#define USI_DO_PIN PA5
// #endif
/** (Mostly) Static Defines **/
#define TRUE 1
#define FALSE 0
#define DATA_BITS 8
#define START_BIT 1
#define STOP_BIT 1
#define HALF_FRAME 5
#define USI_COUNTER_MAX_COUNT 16
#define USI_COUNTER_SEED_TRANSMIT (USI_COUNTER_MAX_COUNT - HALF_FRAME)
#define INTERRUPT_STARTUP_DELAY (0x11 / TIMER_PRESCALER)
#define TIMER0_SEED (256 - ( (SYSTEM_CLOCK / BAUDRATE) / TIMER_PRESCALER )) // has round off error
// #define TIMER0_SEED (256 - ( (SYSTEM_CLOCK / BAUDRATE) / TIMER_PRESCALER ))-2
#if ( (( (SYSTEM_CLOCK / BAUDRATE) / TIMER_PRESCALER ) * 3/2) > (256 - INTERRUPT_STARTUP_DELAY) )
#define INITIAL_TIMER0_SEED ( 256 - (( (SYSTEM_CLOCK / BAUDRATE) / TIMER_PRESCALER ) * 1/2) )
#define USI_COUNTER_SEED_RECEIVE ( USI_COUNTER_MAX_COUNT - (START_BIT + DATA_BITS) )
#else
#define INITIAL_TIMER0_SEED ( 256 - (( (SYSTEM_CLOCK / BAUDRATE) / TIMER_PRESCALER ) * 3/2) )
#define USI_COUNTER_SEED_RECEIVE (USI_COUNTER_MAX_COUNT - DATA_BITS)
#endif
#define UART_RX_BUFFER_MASK ( UART_RX_BUFFER_SIZE - 1 )
#if ( UART_RX_BUFFER_SIZE & UART_RX_BUFFER_MASK )
#error RX buffer size is not a power of 2
#endif
#define UART_TX_BUFFER_MASK ( UART_TX_BUFFER_SIZE - 1 )
#if ( UART_TX_BUFFER_SIZE & UART_TX_BUFFER_MASK )
#error TX buffer size is not a power of 2
#endif