Files
kunlun/mfgtool/pic/main.c

73 lines
1.9 KiB
C
Raw Permalink Normal View History

2024-09-28 14:24:04 +08:00
typedef unsigned int uint32_t;
typedef unsigned char uint8_t;
typedef void (*rom_t)(unsigned char fboot);
int main(int argc, char *argv[])
{
(void)argv;
uint32_t timer_start;
uint32_t cur_pc = (uint32_t)argc;
rom_t rom = (rom_t)0x20000;
uint8_t *uart_fifo = (uint8_t*)0x44001000;
uint32_t *gtmr_reg = (uint32_t *)0x40020000;
char flag = '3';
/* kl1 0x00fc1000, kl2 0x0ffd9000, kl3 0x10000800*/
if (0 == cur_pc >> 24) {
rom = (rom_t)0x30000;
uart_fifo = (uint8_t*)0x44001000;
gtmr_reg = (uint32_t*)0x44003000;
flag = '1';
/* apb enable */
*((uint32_t*)0x44000004) |= 0x1 << 2;
gtmr_reg[2] = 0xffffffff;
gtmr_reg[1] |= 0x1 << 4;
gtmr_reg[1] |= 0x1 << 1;
} else if (0xf == cur_pc >> 24) {
rom = (rom_t)0x30000;
uart_fifo = (uint8_t*)0x44001000;
gtmr_reg = (uint32_t*)0x44003000;
flag = '2';
gtmr_reg[2] = 0xffffffff;
gtmr_reg[1] |= 0x1 << 4;
gtmr_reg[1] |= 0x1 << 1;
} else if (0x10 == cur_pc >> 24) {
rom = (rom_t)0x20000;
uart_fifo = (uint8_t*)0x40010000;
gtmr_reg = (uint32_t*)0x40020000;
flag = '3';
} else {
/* 无法判断时默认kl3 */
rom = (rom_t)0x20000;
uart_fifo = (uint8_t*)0x40010000;
gtmr_reg = (uint32_t*)0x40020000;
flag = '3';
}
timer_start = gtmr_reg[4];
while(1000 * 1000 > gtmr_reg[4] - timer_start);
/* 串口发送数据 */
uart_fifo[0] = '\r';
uart_fifo[0] = '\n';
uart_fifo[0] = 'K';
uart_fifo[0] = 'L';
uart_fifo[0] = flag;
/* version */
uart_fifo[0] = '-';
uart_fifo[0] = 'V';
uart_fifo[0] = '1';
uart_fifo[0] = '.';
uart_fifo[0] = '0';
/* 等待串口发送完成 */
timer_start = gtmr_reg[4];
while(1000 * 1000 > gtmr_reg[4] - timer_start);
rom(0);
}