| #ifndef NULL |
| #define NULL ((void*)0) |
| #endif |
| |
| #define TRUE 1 |
| #define FALSE 0 |
| |
| // scalar types |
| typedef unsigned char UINT8; |
| typedef unsigned short UINT16; |
| typedef unsigned long UINT32; |
| typedef int BOOL; |
| |
| typedef void(*tpFunc)(void); // type for execute |
| typedef int(*tpMain)(void); // type for start vector to main() |
| |
| |
| // structure of an image in the flash |
| typedef struct |
| { |
| UINT32* pDestination; // address to copy it to |
| UINT32 size; // how many bytes of payload (to the next header) |
| tpFunc pExecute; // entry point |
| UINT32 flags; // uncompressed or compressed |
| // end of header, now comes the payload |
| UINT32 image[]; // the binary image starts here |
| // after the payload, the next header may follow, all 0xFF if none |
| } tImage; |
| |
| // flags valid for image header |
| #define IF_NONE 0x00000000 |
| #define IF_UCL_2E 0x00000001 // image is compressed with UCL, algorithm 2e |
| |
| |
| // resolve platform dependency of F1 button check |
| #if defined PLATFORM_PLAYER |
| #define CHANNEL 1 |
| #define F1_LOWER 0 // this is the "Menu" key |
| #define F1_UPPER 384 |
| #define F2_LOWER 1024 // not present |
| #define F2_UPPER 1024 |
| #define F3_LOWER 1024 |
| #define F3_UPPER 1024 |
| #elif defined PLATFORM_RECORDER |
| #define CHANNEL 4 |
| #define F1_LOWER 250 |
| #define F1_UPPER 499 |
| #define F2_LOWER 500 |
| #define F2_UPPER 699 |
| #define F3_LOWER 900 |
| #define F3_UPPER 1023 |
| #elif defined PLATFORM_FM |
| #define CHANNEL 4 |
| #define F1_LOWER 150 |
| #define F1_UPPER 384 |
| #define F2_LOWER 385 |
| #define F2_UPPER 544 |
| #define F3_LOWER 700 |
| #define F3_UPPER 1023 |
| #elif defined PLATFORM_ONDIO |
| #define CHANNEL 4 |
| #define F1_LOWER 0x2EF // Ondio has no F1 button, |
| #define F1_UPPER 0x3FF // so we use "Right". |
| #define F2_LOWER 0x19D // Ondio has no F2 button, |
| #define F2_UPPER 0x245 // so we use "Up". |
| #define F3_LOWER 0x246 // Ondio has no F3 button, |
| #define F3_UPPER 0x2EE // so we use "Left". |
| #else |
| #error ("No platform given!") |
| #endif |
| |
| #define FLASH_BASE 0x02000000 // start of the flash memory |
| #define FW_VERSION *(unsigned short*)(FLASH_BASE + 0xFE) // firmware version |
| |
| |
| // prototypes |
| void _main(void) __attribute__ ((section (".startup"))); |
| int main(void); |
| void PlatformInit(void); |
| void DramInit(void); |
| int ucl_nrv2e_decompress_8(const UINT8 *src, UINT8 *dst, UINT32* dst_len); |
| void DecompressStart(tImage* pImage); |
| int ReadADC(int channel); |
| int ButtonPressed(void); |
| tImage* GetStartImage(int nPreferred); |
| // test functions |
| void SetLed(BOOL bOn); |
| void UartInit(void); |
| UINT8 UartRead(void); |
| void UartWrite(UINT8 byte); |
| void MiniMon(void); |
| |
| |
| // minimon commands |
| #define BAUDRATE 0x00 // followed by BRR value; response: command byte |
| #define ADDRESS 0x01 // followed by 4 bytes address; response: command byte |
| #define BYTE_READ 0x02 // response: 1 byte content |
| #define BYTE_WRITE 0x03 // followed by 1 byte content; response: command byte |
| #define BYTE_READ16 0x04 // response: 16 bytes content |
| #define BYTE_WRITE16 0x05 // followed by 16 bytes; response: command byte |
| #define BYTE_FLASH 0x06 // followed by 1 byte content; response: command byte |
| #define BYTE_FLASH16 0x07 // followed by 16 bytes; response: command byte |
| #define HALFWORD_READ 0x08 // response: 2 byte content |
| #define HALFWORD_WRITE 0x09 // followed by 2 byte content; response: command byte |
| #define EXECUTE 0x0A // response: command byte if call returns |
| #define VERSION 0x0B // response: version |
| |
| |
| // linker symbols |
| extern UINT32 begin_text[]; |
| extern UINT32 end_text[]; |
| extern UINT32 begin_data[]; |
| extern UINT32 end_data[]; |
| extern UINT32 begin_bss[]; |
| extern UINT32 end_bss[]; |
| extern UINT32 begin_stack[]; |
| extern UINT32 end_stack[]; |
| extern UINT32 begin_iramcopy[]; |
| extern UINT32 total_size[]; |