Jörg Hohensohn | 6a4e4c8 | 2003-11-30 11:37:43 +0000 | [diff] [blame] | 1 | #ifndef NULL |
| 2 | #define NULL ((void*)0) |
| 3 | #endif |
| 4 | |
| 5 | #define TRUE 1 |
| 6 | #define FALSE 0 |
| 7 | |
| 8 | // scalar types |
| 9 | typedef unsigned char UINT8; |
| 10 | typedef unsigned short UINT16; |
| 11 | typedef unsigned long UINT32; |
| 12 | typedef int BOOL; |
| 13 | |
| 14 | typedef void(*tpFunc)(void); // type for execute |
| 15 | typedef int(*tpMain)(void); // type for start vector to main() |
| 16 | |
| 17 | |
| 18 | // structure of an image in the flash |
| 19 | typedef struct |
| 20 | { |
| 21 | UINT32* pDestination; // address to copy it to |
| 22 | UINT32 size; // how many bytes of payload (to the next header) |
| 23 | tpFunc pExecute; // entry point |
| 24 | UINT32 flags; // uncompressed or compressed |
| 25 | // end of header, now comes the payload |
| 26 | UINT32 image[]; // the binary image starts here |
| 27 | // after the payload, the next header may follow, all 0xFF if none |
| 28 | } tImage; |
| 29 | |
| 30 | // flags valid for image header |
| 31 | #define IF_NONE 0x00000000 |
| 32 | #define IF_UCL_2E 0x00000001 // image is compressed with UCL, algorithm 2e |
| 33 | |
| 34 | |
| 35 | // resolve platform dependency of F1 button check |
| 36 | #if defined PLATFORM_PLAYER |
Jens Arnold | b8b94f1 | 2004-11-19 23:49:21 +0000 | [diff] [blame] | 37 | #define F1_MASK 0x0001 // Player has no F1 button, so we use "-" |
| 38 | #define F2_MASK 0x0008 // Player has no F2 button, so we use "Play" |
| 39 | #define F3_MASK 0x0004 // Player has no F3 button, so we use "+" |
| 40 | |
Jörg Hohensohn | 6a4e4c8 | 2003-11-30 11:37:43 +0000 | [diff] [blame] | 41 | #elif defined PLATFORM_RECORDER |
Jens Arnold | b8b94f1 | 2004-11-19 23:49:21 +0000 | [diff] [blame] | 42 | #define USE_ADC |
Jörg Hohensohn | 6a4e4c8 | 2003-11-30 11:37:43 +0000 | [diff] [blame] | 43 | #define CHANNEL 4 |
| 44 | #define F1_LOWER 250 |
| 45 | #define F1_UPPER 499 |
| 46 | #define F2_LOWER 500 |
| 47 | #define F2_UPPER 699 |
| 48 | #define F3_LOWER 900 |
| 49 | #define F3_UPPER 1023 |
Jens Arnold | b8b94f1 | 2004-11-19 23:49:21 +0000 | [diff] [blame] | 50 | |
Jörg Hohensohn | 6a4e4c8 | 2003-11-30 11:37:43 +0000 | [diff] [blame] | 51 | #elif defined PLATFORM_FM |
Jens Arnold | b8b94f1 | 2004-11-19 23:49:21 +0000 | [diff] [blame] | 52 | #define USE_ADC |
Jörg Hohensohn | 6a4e4c8 | 2003-11-30 11:37:43 +0000 | [diff] [blame] | 53 | #define CHANNEL 4 |
| 54 | #define F1_LOWER 150 |
| 55 | #define F1_UPPER 384 |
| 56 | #define F2_LOWER 385 |
| 57 | #define F2_UPPER 544 |
| 58 | #define F3_LOWER 700 |
| 59 | #define F3_UPPER 1023 |
Jens Arnold | b8b94f1 | 2004-11-19 23:49:21 +0000 | [diff] [blame] | 60 | |
Jörg Hohensohn | 4e42310 | 2004-09-29 21:54:29 +0000 | [diff] [blame] | 61 | #elif defined PLATFORM_ONDIO |
Jens Arnold | b8b94f1 | 2004-11-19 23:49:21 +0000 | [diff] [blame] | 62 | #define USE_ADC |
Jörg Hohensohn | 4e42310 | 2004-09-29 21:54:29 +0000 | [diff] [blame] | 63 | #define CHANNEL 4 |
| 64 | #define F1_LOWER 0x2EF // Ondio has no F1 button, |
Jens Arnold | b8b94f1 | 2004-11-19 23:49:21 +0000 | [diff] [blame] | 65 | #define F1_UPPER 0x3FF // so we use "Left". |
Jörg Hohensohn | 4e42310 | 2004-09-29 21:54:29 +0000 | [diff] [blame] | 66 | #define F2_LOWER 0x19D // Ondio has no F2 button, |
| 67 | #define F2_UPPER 0x245 // so we use "Up". |
| 68 | #define F3_LOWER 0x246 // Ondio has no F3 button, |
Jens Arnold | b8b94f1 | 2004-11-19 23:49:21 +0000 | [diff] [blame] | 69 | #define F3_UPPER 0x2EE // so we use "Right". |
| 70 | |
Jörg Hohensohn | 6a4e4c8 | 2003-11-30 11:37:43 +0000 | [diff] [blame] | 71 | #else |
| 72 | #error ("No platform given!") |
| 73 | #endif |
| 74 | |
Jens Arnold | b8b94f1 | 2004-11-19 23:49:21 +0000 | [diff] [blame] | 75 | |
Jörg Hohensohn | 6a4e4c8 | 2003-11-30 11:37:43 +0000 | [diff] [blame] | 76 | #define FLASH_BASE 0x02000000 // start of the flash memory |
| 77 | #define FW_VERSION *(unsigned short*)(FLASH_BASE + 0xFE) // firmware version |
| 78 | |
| 79 | |
| 80 | // prototypes |
| 81 | void _main(void) __attribute__ ((section (".startup"))); |
| 82 | int main(void); |
| 83 | void PlatformInit(void); |
| 84 | void DramInit(void); |
| 85 | int ucl_nrv2e_decompress_8(const UINT8 *src, UINT8 *dst, UINT32* dst_len); |
| 86 | void DecompressStart(tImage* pImage); |
Jens Arnold | b8b94f1 | 2004-11-19 23:49:21 +0000 | [diff] [blame] | 87 | #ifdef USE_ADC |
Jörg Hohensohn | 6a4e4c8 | 2003-11-30 11:37:43 +0000 | [diff] [blame] | 88 | int ReadADC(int channel); |
Jens Arnold | b8b94f1 | 2004-11-19 23:49:21 +0000 | [diff] [blame] | 89 | #endif |
Jörg Hohensohn | 6a4e4c8 | 2003-11-30 11:37:43 +0000 | [diff] [blame] | 90 | int ButtonPressed(void); |
| 91 | tImage* GetStartImage(int nPreferred); |
| 92 | // test functions |
| 93 | void SetLed(BOOL bOn); |
| 94 | void UartInit(void); |
| 95 | UINT8 UartRead(void); |
| 96 | void UartWrite(UINT8 byte); |
| 97 | void MiniMon(void); |
| 98 | |
| 99 | |
| 100 | // minimon commands |
| 101 | #define BAUDRATE 0x00 // followed by BRR value; response: command byte |
| 102 | #define ADDRESS 0x01 // followed by 4 bytes address; response: command byte |
| 103 | #define BYTE_READ 0x02 // response: 1 byte content |
| 104 | #define BYTE_WRITE 0x03 // followed by 1 byte content; response: command byte |
| 105 | #define BYTE_READ16 0x04 // response: 16 bytes content |
| 106 | #define BYTE_WRITE16 0x05 // followed by 16 bytes; response: command byte |
| 107 | #define BYTE_FLASH 0x06 // followed by 1 byte content; response: command byte |
| 108 | #define BYTE_FLASH16 0x07 // followed by 16 bytes; response: command byte |
| 109 | #define HALFWORD_READ 0x08 // response: 2 byte content |
| 110 | #define HALFWORD_WRITE 0x09 // followed by 2 byte content; response: command byte |
| 111 | #define EXECUTE 0x0A // response: command byte if call returns |
| 112 | #define VERSION 0x0B // response: version |
| 113 | |
| 114 | |
| 115 | // linker symbols |
| 116 | extern UINT32 begin_text[]; |
| 117 | extern UINT32 end_text[]; |
| 118 | extern UINT32 begin_data[]; |
| 119 | extern UINT32 end_data[]; |
| 120 | extern UINT32 begin_bss[]; |
| 121 | extern UINT32 end_bss[]; |
| 122 | extern UINT32 begin_stack[]; |
| 123 | extern UINT32 end_stack[]; |
| 124 | extern UINT32 begin_iramcopy[]; |
| 125 | extern UINT32 total_size[]; |