FreeCalypso > hg > fc-tourmaline
diff src/cs/system/bootloader/inc/target.h @ 0:4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 16 Oct 2020 06:23:26 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cs/system/bootloader/inc/target.h Fri Oct 16 06:23:26 2020 +0000 @@ -0,0 +1,148 @@ +/****************************************************************************** + * FLUID (Flash Loader Utility Independent of Device) + * + * (C) Delta Technologies 2001. + * Cleanup, modifications and extensions by Mads Meisner-Jensen, mmj@ti.com. + * + * Target common definitions + * + * $Id: target.h,v 1.3 2003/07/10 17:50:21 rlendenmann Exp $ + * + ******************************************************************************/ +#ifndef __TARGET_H__ +#define __TARGET_H__ +#include "protocol.h" + + +/****************************************************************************** + * Typedefs and Prototypes + ******************************************************************************/ + +#ifndef RIVIERA_INCLUDED +typedef unsigned char UBYTE; +typedef unsigned short UINT16; +typedef unsigned long UINT32; +typedef signed char INT8; +typedef signed short INT16; +typedef signed long INT32; +#endif + +typedef unsigned char uint8; +typedef unsigned short uint16; +typedef unsigned long uint32; +typedef signed char int8; +typedef signed short int16; +typedef signed long int32; + +typedef union { + UINT32 i; // integer value + UBYTE b[4]; // byte array +} union32_t; + +typedef union { + UINT16 i; // integer value + UBYTE b[2]; // byte array +} union16_t; + +typedef struct { + char (*init)(uint32 addr); + char (*erase)(uint32 *addr, int size); + char (*program)(uint32 addr, uint16 *buf, int size); + uint8 (*getchar)(void); + void (*putchar)(uint8 ch); + void (*debug_putstr)(uint32 uart, char *string); + void (*debug_putnum)(uint32 uart, unsigned int number); + uint32 uart_base; +} method_table_t; + +// Prototypes for functions in debug.c +void debug_putstr(uint32 uart, char *string); +void debug_putnum(uint32 uart, unsigned int number); + + +/****************************************************************************** + * Macros + ******************************************************************************/ + +#define REGISTER_8_READ(addr) (*((volatile uint8 *) (addr))) +#define REGISTER_8_WRITE(addr, data) (*((volatile uint8 *) (addr)) = data) +#define REGISTER_16_READ(addr) (*((volatile uint16 *) (addr))) +#define REGISTER_16_WRITE(addr, data) (*((volatile uint16 *) (addr)) = data) + +#define BIT_SET(reg, bit) (*((volatile UINT16 *) (reg)) |= (1 << (bit))) +#define BIT_CLR(reg, bit) (*((volatile UINT16 *) (reg)) &= ~(1 << (bit))) + +#define FLASH_READ(addr) (*(volatile uint16 *) (addr)) +#define FLASH_WRITE(addr, data) (*(volatile uint16 *) (addr)) = data + +#define PUTCHAR_FUNCTION_CODE(uart) \ + while (!(REGISTER_8_READ(uart + UART_LSR) & STAT_TXRDY)) ; \ + REGISTER_8_WRITE(uart + UART_THR, ch); + +#define GETCHAR_FUNCTION_CODE(uart) \ + while (!(REGISTER_8_READ(uart + UART_LSR) & STAT_RXRDY)) ; \ + return (uint8) REGISTER_8_READ(uart + UART_RHR); + + +/****************************************************************************** + * Debug Macros + ******************************************************************************/ + +#define DEBUG_PUTSTR(uart, text) ((method_table_t *)(my_addr))->debug_putstr(uart, text); +#define DEBUG_PUTNUM(uart, num) ((method_table_t *)(my_addr))->debug_putnum(uart, num); + + +/****************************************************************************** + * Hardware Definitions + ******************************************************************************/ + +#define UART_BASE_MODEM (0xFFFF5800) +#define UART_BASE_IRDA (0xFFFF5000) + +// ROM/Flash Config register +#define WS_REG_ROM 0x400000 + +// UART register definitions. +#define UART_RHR (0x00) /* Receive Holding Register */ +#define UART_THR (0x00) /* Transmit Holding Register */ +#define UART_FCR (0x02) /* FIFO Control Register */ +#define UART_LCR (0x03) /* Line Control Register */ +#define UART_LSR (0x05) /* Line Status Register */ +#define UART_MDR1 (0x08) /* Mode Definition Register 1 */ +#define UART_EFR (0x02) /* Enhanced Feature Register */ +#define UART_DLL (0x00) /* Divisor Latches */ +#define UART_DLH (0x01) /* Divisor Latches */ +#define UART_UIR (0xFFFF6000) /* UART Interface Register */ + +// UART status bit definitions. +#define STAT_RXRDY (0x01) +#define STAT_TXRDY (0x20) +#define STAT_TX_E (0x40) + +// UART_UIR bit definitions. +#define UART_ACCESS (0) +#define UART_MASK_IT (1) + +// UART_EFR bit definitions. +#define ENHANCED_EN (4) + +// UART command bit definitions. +#define CMD_UART_RESET (0x07) +#define CMD_EFR_EN (0xBF) +#define CMD_FCR_MCR_EN (0x80) +#define CMD_FIFO_EN (0x07) +#define CMD_UART_MODE (0x00) +#define CMD_CHAR8_STOP1_NOPAR (0x03) + +// UART ??? +#define BAUD_38400 (0x15) +#define BAUD_115200 (0x07) +#define BAUD_406250 (0x02) +#define BAUD_812500 (0x01) + + +// Enable/Disable ROM/Flash write strobe +#define ROM_WRITE_ENABLE() *((volatile uint16*) WS_REG_ROM) |= 0x80; +#define ROM_WRITE_DISABLE() *((volatile uint16*) WS_REG_ROM) &= ~0x80; + +#endif /* __TARGET_H__ */