Files
kunlun/mfgtool/pic/main.c
2024-09-28 14:24:04 +08:00

73 lines
1.9 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
}