diff --git a/lib/CPUs/MIPS/tools/src/flashgen.c b/lib/CPUs/MIPS/tools/src/flashgen.c index 4b75814..cc775a7 100644 --- a/lib/CPUs/MIPS/tools/src/flashgen.c +++ b/lib/CPUs/MIPS/tools/src/flashgen.c @@ -17,6 +17,36 @@ #define SDRAM_BASE 0x40000000 #define FLASH_OFFSET 0x00000000 +UINT32 conv_endian32(UINT32 src) +{ + UINT32 dst; + + dst = (0xFF000000 & (src << 24)) + | (0x00FF0000 & (src << 8)) + | (0x0000FF00 & (src >> 8)) + | (0x000000FF & (src >> 24)); + + return dst; +}; + +UINT32 to_big_endian32(UINT32 src) +{ +#ifndef NATIVE_IS_BIG_ENDIAN + return conv_endian32(src); +#else + return src; +#endif +} + +UINT32 from_big_endian32(UINT32 src) +{ +#ifndef NATIVE_IS_BIG_ENDIAN + return conv_endian32(src); +#else + return src; +#endif +} + // -------------------------------------------------------------- typedef struct _sflash_img_hdr_t { @@ -102,11 +132,17 @@ int main(int argc, char *argv[]) img_hdr.magic[1] = 'F'; img_hdr.magic[2] = 'I'; img_hdr.magic[3] = '1'; +#ifdef TARGET_IS_BIG_ENDIAN + img_hdr.target_addr = to_big_endian32(SDRAM_BASE); + img_hdr.img_size = to_big_endian32(filesize); + img_hdr.img_offset = to_big_endian32(FLASH_OFFSET + sizeof(flash_img_hdr_t)); + img_hdr.hdr_next = to_big_endian32(FLASH_OFFSET); +#else img_hdr.target_addr = SDRAM_BASE; img_hdr.img_size = filesize; img_hdr.img_offset = FLASH_OFFSET + sizeof(flash_img_hdr_t); img_hdr.hdr_next = FLASH_OFFSET; - +#endif fwrite(&img_hdr, sizeof(flash_img_hdr_t), 1, pFile); fwrite(pBuf, 1, filesize, pFile);