📄 burst.c
字号:
// Please Note://// These are not standard C macros, and they are not implemented in the// standard fashion. None the less, they are useful in specific cases.//// Also, these macros only support 16-byte aligned addresses!// If you try to burst to any non-16-byte aligned address, the data should// arrive correctly, but it will *not* be bursted. It will be broken up into// several smaller single accesses (between 4 and 6) by the CPU.#include "common.h"#include "mem_map.h"#include "burst.h"volatile tWORD _BURST_ADDR;volatile tWORD _BURST_DATA0;volatile tWORD _BURST_DATA1;volatile tWORD _BURST_DATA2;volatile tWORD _BURST_DATA3;int test_data[] = { 0x00112233, 0x44556677, 0x8899AABB, 0xCCDDEEFF, 0x00112233, 0x44556677, 0x8899AABB, 0xCCDDEEFF, 0x00112233, 0x44556677, 0x8899AABB, 0xCCDDEEFF, 0x00112233, 0x44556677, 0x8899AABB, 0xCCDDEEFF, 0x00001111, 0x22223333, 0x44445555, 0x66667777, 0x88889999, 0xAAAABBBB, 0xCCCCDDDD, 0xEEEEFFFF, 0x00000000, 0x11111111, 0x22222222, 0x33333333, 0x44444444, 0x55555555, 0x66666666, 0x77777777, 0x11111111, 0x22222222, 0x44444444, 0x88888888, 0xAAAAAAAA, 0x55555555, 0x99999999, 0x66666666, 0xEEEEEEEE, 0x77777777, 0xFFFFFFFF, 0x00000000, 0x33333333, 0xCCCCCCCC, 0xDEADBEEF, 0xFEEDFACE };/********************************************************************/voidburst_writes(int dest, int lines){ int i, j; for (i = 0; i < lines; i+=16) mcf5xxx_move_line((ADDRESS)&test_data[0], dest + i);}void BURST_W32(addr,data0,data1,data2,data3){ _BURST_ADDR = addr; _BURST_DATA0 = data0; _BURST_DATA1 = data1; _BURST_DATA2 = data2; _BURST_DATA3 = data3; asm(MOVE.L D0,-(SP)); asm(MOVE.L D1,-(SP)); asm(MOVE.L D2,-(SP)); asm(MOVE.L D3,-(SP)); asm(MOVE.L A0,-(SP)); asm(MOVE.L _BURST_ADDR,A0); asm(MOVE.L _BURST_DATA0,D0); asm(MOVE.L _BURST_DATA1,D1); asm(MOVE.L _BURST_DATA2,D2); asm(MOVE.L _BURST_DATA3,D3); asm(MOVEM.L D0-D3,(A0)); asm(MOVE.L (SP)+,A0); asm(MOVE.L (SP)+,D3); asm(MOVE.L (SP)+,D2); asm(MOVE.L (SP)+,D1); asm(MOVE.L (SP)+,D0);}void BURST_RE32(tWORD addr, tWORD data0, tWORD data1, tWORD data2, tWORD data3){ _BURST_ADDR = addr; asm(MOVE.L D0,-(SP)); asm(MOVE.L D1,-(SP)); asm(MOVE.L D2,-(SP)); asm(MOVE.L D3,-(SP)); asm(MOVE.L A0,-(SP)); asm(MOVE.L _BURST_ADDR,A0); asm(MOVEM.L (A0),D0-D3); asm(MOVE.L D0,_BURST_DATA0); asm(MOVE.L D1,_BURST_DATA1); asm(MOVE.L D2,_BURST_DATA2); asm(MOVE.L D3,_BURST_DATA3); asm(MOVE.L (SP)+,A0); asm(MOVE.L (SP)+,D3); asm(MOVE.L (SP)+,D2); asm(MOVE.L (SP)+,D1); asm(MOVE.L (SP)+,D0);#if 0 if(_BURST_DATA0 == data0) printf("succes\n");//SUCCESS_3((tWORD)(CPRINT_S_RE32), (tWORD)(addr+0x0), (tWORD)(_BURST_DATA0), (tWORD)(data0)); else printf("fail\n");//FAIL_3((tWORD)(CPRINT_E_RE32), (tWORD)(addr+0x0), (tWORD)(_BURST_DATA0), (tWORD)(data0)); if(_BURST_DATA1 == data1) printf("succes\n");//SUCCESS_3((tWORD)(CPRINT_S_RE32), (tWORD)(addr+0x4), (tWORD)(_BURST_DATA1), (tWORD)(data1)); else printf("fail\n");//FAIL_3((tWORD)(CPRINT_E_RE32), (tWORD)(addr+0x4), (tWORD)(_BURST_DATA1), (tWORD)(data1)); if(_BURST_DATA2 == data2) printf("succes\n");//SUCCESS_4((tWORD)(CPRINT_S_RE32), (tWORD)(addr+0x8), (tWORD)(_BURST_DATA2), (tWORD)(data2), 1); else printf("fail\n");//FAIL_3((tWORD)(CPRINT_E_RE32), (tWORD)(addr+0x8), (tWORD)(_BURST_DATA2), (tWORD)(data2)); if(_BURST_DATA3 == data3) printf("succes\n");//SUCCESS_3((tWORD)(CPRINT_S_RE32), (tWORD)(addr+0xc), (tWORD)(_BURST_DATA3), (tWORD)(data3)); else printf("fail\n");//FAIL_3((tWORD)(CPRINT_E_RE32), (tWORD)(addr+0xc), (tWORD)(_BURST_DATA3), (tWORD)(data3));#endif }void BURST_WR32(tWORD addr, tWORD data0, tWORD data1, tWORD data2, tWORD data3){ _BURST_ADDR = addr; _BURST_DATA0 = data0; _BURST_DATA1 = data1; _BURST_DATA2 = data2; _BURST_DATA3 = data3; asm(MOVE.L D0,-(SP)); asm(MOVE.L D1,-(SP)); asm(MOVE.L D2,-(SP)); asm(MOVE.L D3,-(SP)); asm(MOVE.L A0,-(SP)); asm(MOVE.L _BURST_ADDR,A0); asm(MOVE.L _BURST_DATA0,D0); asm(MOVE.L _BURST_DATA1,D1); asm(MOVE.L _BURST_DATA2,D2); asm(MOVE.L _BURST_DATA3,D3); asm(MOVEM.L D0-D3,(A0)); asm(MOVEM.L (A0),D0-D3); asm(MOVE.L D0,_BURST_DATA0); asm(MOVE.L D1,_BURST_DATA1); asm(MOVE.L D2,_BURST_DATA2); asm(MOVE.L D3,_BURST_DATA3); asm(MOVE.L (SP)+,A0); asm(MOVE.L (SP)+,D3); asm(MOVE.L (SP)+,D2); asm(MOVE.L (SP)+,D1); asm(MOVE.L (SP)+,D0);#if 0 if(_BURST_DATA0 == data0) printf("success\n");//SUCCESS_3((tWORD)(CPRINT_S_WR32), (tWORD)(addr+0x0), (tWORD)(data0), (tWORD)(_BURST_DATA0)); else printf("fail\n");//FAIL_3((tWORD)(CPRINT_E_WR32), (tWORD)(addr+0x0), (tWORD)(data0), (tWORD)(_BURST_DATA0)); if(_BURST_DATA1 == data1) printf("success\n");//SUCCESS_3((tWORD)(CPRINT_S_WR32), (tWORD)(addr+0x4), (tWORD)(data1), (tWORD)(_BURST_DATA1)); else printf("fail\n");//FAIL_3((tWORD)(CPRINT_E_WR32), (tWORD)(addr+0x4), (tWORD)(data1), (tWORD)(_BURST_DATA1)); if(_BURST_DATA2 == data2) printf("success\n");//SUCCESS_3((tWORD)(CPRINT_S_WR32), (tWORD)(addr+0x8), (tWORD)(data2), (tWORD)(_BURST_DATA2)); else printf("fail\n");//FAIL_3((tWORD)(CPRINT_E_WR32), (tWORD)(addr+0x8), (tWORD)(data2), (tWORD)(_BURST_DATA2)); if(_BURST_DATA3 == data3) printf("success\n");//SUCCESS_3((tWORD)(CPRINT_S_WR32), (tWORD)(addr+0xc), (tWORD)(data3), (tWORD)(_BURST_DATA3)); else printf("fail\n");//FAIL_3((tWORD)(CPRINT_E_WR32), (tWORD)(addr+0xc), (tWORD)(data3), (tWORD)(_BURST_DATA3));#endif}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -