#ifndef __LM8_H__ #define __LM8_H__ #include // These are universal for all memory models ('int' is always 16-bit) typedef unsigned char uint8_t; typedef signed char int8_t; typedef unsigned short uint16_t; typedef signed short int16_t; typedef unsigned long uint32_t; typedef signed long int32_t; /* * Function arguments are always passed directly in * r0-r7 for the first 8 bytes - stack there after. * * Return code are always passed in r0-r3. * * Small register reservations: * r14 - universal stack pointer * r15 - current frame pointer * * Medium register reservations: * r8-r9 - universal stack pointer * r10-r11 - current frame pointer * r13 - page pointer * * Large register reservations: * r24-r27 - universal stack pointer * r28-r31 - current frame pointer * r13-r15 - page pointer * * Both the stack and frame pointers grow downward */ #define lm8_interrupt_global_disable() __asm__ volatile ("clri") #define lm8_interrupt_global_enable() __asm__ volatile ("seti") #define MICO8_PROGRAM_IM(X) __asm__ volatile ("wcsr im, %0" : : "r" (X)) #define MICO8_READ_IM(X) __asm__ volatile ("rcsr %0, im" : "=r" (X)) #define MICO8_PROGRAM_IP(X) __asm__ volatile ("wcsr ip, %0" : : "r" (X)) #define MICO8_READ_IP(X) __asm__ volatile ("rcsr %0, ip" : "=r" (X)) void lm8_interrupt_disable (uint8_t level); void lm8_interrupt_enable (uint8_t level); void usleep (uint16_t us); void msleep (uint16_t ms); extern uint8_t get_ip (void); extern void set_ip (uint8_t ip); extern void lm8_uart_init (uint8_t idx, size_t base, uint8_t irq); extern char lm8_uart_getc (uint8_t idx); extern void lm8_uart_putc (uint8_t idx, char ch); extern void lm8_uart_isr (uint8_t idx); extern void simple_putc (char ch); #endif