first commit
This commit is contained in:
+499
@@ -0,0 +1,499 @@
|
||||
#include "calIn8M.h"
|
||||
#include "Config.h"
|
||||
#include "ls1x_pmu.h"
|
||||
#include "ls1x_clock.h"
|
||||
#include "ls1x_common.h"
|
||||
#include "ls1x_uart.h"
|
||||
#include "ls1x_wdg.h"
|
||||
#include "ls1x_string.h"
|
||||
#include "UserGpio.h"
|
||||
extern void wakeup_reset(void);
|
||||
extern int do_d1(int argc,void *argv[]);
|
||||
extern int do_d4(int argc,void *argv[]);
|
||||
extern int do_m1(int argc,void *argv[]);
|
||||
extern int do_m4(int argc,void *argv[]);
|
||||
extern int v_play(int argc,void *argv[]);
|
||||
extern int hpet(int argc,void *argv[]);
|
||||
extern int latimer(int argc,void *argv[]);
|
||||
extern int delay(int argc, void *argv[]);
|
||||
extern int wakeup(int argc, void *argv[]);
|
||||
extern int date(int argc, void* argv[]);
|
||||
extern int touch_test(int argc, void *argv[]);
|
||||
extern int watch_dog(int argc, void *argv[]);
|
||||
extern int i2cp (int argc, void *argv[]);
|
||||
extern int i2cw (int argc, void *argv[]);
|
||||
extern int i2cr (int argc, void *argv[]);
|
||||
extern int adc(int argc, void* argv[]);
|
||||
extern int batdet(int argc, void* argv[]);
|
||||
extern int tmp(int argc, void* argv[]);
|
||||
extern int uart_init (int argc, void *argv[]);
|
||||
extern int spi_init(int argc, void* argv[]);
|
||||
extern int spi_erase(int argc, void* argv[]);
|
||||
extern int spi_write(int argc, void* argv[]);
|
||||
extern int spi_read(int argc, void* argv[]);
|
||||
extern int spi_flash(int argc, void* argv[]);
|
||||
extern int gpio_int(int argc, void* argv[]);
|
||||
extern int do_nothing();
|
||||
extern int copy();
|
||||
extern int copy_iram(int argc, void *argv[]);
|
||||
extern unsigned int str2num(unsigned char);
|
||||
// add
|
||||
int do_help(int argc, void *argv[]);
|
||||
int do_exit(int argc, void *argv[]);
|
||||
|
||||
unsigned int nmi_caller;
|
||||
|
||||
static struct cmd_struct {
|
||||
const char *cmdname;
|
||||
int (*func)(int, void *[]);
|
||||
const char *usage;
|
||||
const char *expression;
|
||||
} cmd[] __attribute__((section(".rodata"))) = {
|
||||
{"exit", do_exit, "[exit]", ""},
|
||||
{"d1", do_d1, "[d1 <addr> <num>]", "--dump address byte"},
|
||||
{"d4", do_d4, "[d4 <addr> <num>]", "--dump address word"},
|
||||
{"help", do_help, "[help <command>]", "--cmd list"},
|
||||
{"m1", do_m1, "[m1 <addr> <value>]", "--modify address byte"},
|
||||
{"m4", do_m4, "[m4 <addr> <value>]", "--modify address word"},
|
||||
{"v", v_play, "[v]", "--v1"},
|
||||
{"touch", touch_test, "[touch]", "--v1"},
|
||||
{"hpet", hpet, "[timer test]", "--v1"},
|
||||
{"latimer", latimer, "[core timer test]", "--v1"},
|
||||
{"delay", delay, "[delay test]", "--v1"},
|
||||
{"wakeup", wakeup, "[wakeup test]", "--v1"},
|
||||
{"date", date, "[rtc test]", "--v1"},
|
||||
{"wdg", watch_dog, "[wdg test]", "--v1"},
|
||||
{"i2cp", i2cp, "[i2cp <prescale>]", "--i2c prescale"},
|
||||
{"i2cw", i2cw, "[i2cw <chipaddr> <regaddr> <wdata>]", "--i2c write"},
|
||||
{"i2cr", i2cr, "[i2cr <chipaddr> <regaddr>]", "--i2c read"},
|
||||
{"adc", adc, "[adc]", "--adc"},
|
||||
{"batdet", batdet, "[batdet <n>]", "--v1"},
|
||||
{"copy", copy, "[spi_flash=>in_flash]", "--v1"},
|
||||
{"copy_iram", copy_iram, "[copy]", "--batdet <n>"},
|
||||
{"uinit", uart_init, "[uart init]", "--v1"},
|
||||
{"spinit", spi_init, "[spi_init]", "--v1"},
|
||||
{"sperase", spi_erase, "[spi_erase]", "--v1"},
|
||||
{"spwr", spi_write, "[spi_write]", "--v1"},
|
||||
{"sprd", spi_read, "[spi_read]", "--v1"},
|
||||
{"sflash", spi_flash, "[spi_flash]", "--v1"},
|
||||
{"gpio_int", gpio_int, "[exti]", "--v1"},
|
||||
{"t", tmp, "[exti]", "--v1"},
|
||||
//add
|
||||
{"NULL", do_nothing, "[NULL]", "NULL"}
|
||||
};
|
||||
|
||||
int do_exit(int argc, void *argv[])
|
||||
{
|
||||
}
|
||||
|
||||
int do_help(int argc, void *argv[])
|
||||
{
|
||||
unsigned int i;
|
||||
char *s;
|
||||
switch(argc)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
printf("\ncommands:\n\n");
|
||||
for(i=0;strcmp("NULL", cmd[i].cmdname)!=0; i++)
|
||||
{
|
||||
printf("\t %2d:%s\n\r",i+1, cmd[i].cmdname);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
{
|
||||
s = (char *)argv[1];
|
||||
for(i=0; strcmp("NULL", cmd[i].cmdname)!=0; i++)
|
||||
{
|
||||
if(strcmp(s, cmd[i].cmdname)==0)
|
||||
{
|
||||
printf("\n\t%s\t%s\t%s\n", cmd[i].cmdname, cmd[i].usage, cmd[i].expression);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(strcmp("NULL", cmd[i].cmdname)==0)
|
||||
{
|
||||
printf("\n\tERROR: undefine command!!!\n");
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
printf("\n usage: help <cmd>\n\r");
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cmdline(void)
|
||||
{
|
||||
char c;
|
||||
char cmdbuffer[80];
|
||||
char cmdpara[8][30];
|
||||
int (*op)(int argc, void *argv[]);
|
||||
char *p[8];
|
||||
char *cmdptr;
|
||||
short cp, i, j, k, num;
|
||||
short h = 0;
|
||||
int tmp = 11;
|
||||
char history_str[13][80];
|
||||
for(j=0;j<13;j++)
|
||||
{
|
||||
for(i=0; i<80; i++)
|
||||
{
|
||||
history_str[j][i] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
while(1)
|
||||
{
|
||||
START:
|
||||
for(i=0; i<80; i++)
|
||||
{
|
||||
cmdbuffer[i] = '\0';
|
||||
}
|
||||
printf("\n$ ");
|
||||
cmdptr = cmdpara[0];
|
||||
cp = 0;
|
||||
while(1)
|
||||
{
|
||||
c = getchar();
|
||||
if((c>0x1f)&&(c<0x7f))
|
||||
{
|
||||
if(h > 0)
|
||||
{
|
||||
for(i=0; i<h ; i++)
|
||||
{
|
||||
cmdbuffer[cp-i] = cmdbuffer[cp-i-1];
|
||||
}
|
||||
cmdbuffer[cp-h] = c;
|
||||
cp++;
|
||||
for(i=h; i>=0; i--)
|
||||
{
|
||||
putchar(cmdbuffer[cp-i]);
|
||||
}
|
||||
for(i=0; i<cp-1; i++)
|
||||
{
|
||||
putchar(0x8);
|
||||
putchar(0x20);
|
||||
putchar(0x8);
|
||||
}
|
||||
for(i=0; cmdbuffer[i]; i++)
|
||||
{
|
||||
putchar(cmdbuffer[i]);
|
||||
}
|
||||
for(i=h; i>0; i--)
|
||||
{
|
||||
putchar(0x08);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cmdbuffer[cp++] = c;
|
||||
putchar(c);
|
||||
}
|
||||
}
|
||||
else if(c == 0x8)
|
||||
{
|
||||
if((h != 0) && (cp-h > 0))
|
||||
{
|
||||
for(i=h; i>=0; i--)
|
||||
{
|
||||
putchar(cmdbuffer[cp-i]);
|
||||
}
|
||||
for(i=0; i<cp; i++)
|
||||
{
|
||||
putchar(0x8);
|
||||
putchar(0x20);
|
||||
putchar(0x8);
|
||||
}
|
||||
for(i=h; i>0 ; i--)
|
||||
{
|
||||
cmdbuffer[cp-i-1] = cmdbuffer[cp-i];
|
||||
}
|
||||
cmdbuffer[--cp] = '\0';
|
||||
for(i=0; cmdbuffer[i]; i++)
|
||||
{
|
||||
putchar(cmdbuffer[i]);
|
||||
}
|
||||
for(i=h; i>0; i--)
|
||||
{
|
||||
putchar(0x08);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if((cp != 0) && (h == 0))
|
||||
{
|
||||
cmdbuffer[--cp] = '\0';
|
||||
putchar(0x8);
|
||||
putchar(0x20);
|
||||
putchar(0x8);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if((c==0xa) || (c==0xd))
|
||||
{
|
||||
if(cmdbuffer[0] == '\0')
|
||||
{
|
||||
goto START;
|
||||
}
|
||||
h = 0;
|
||||
tmp = 11;
|
||||
for(j=0;cmdbuffer[j];j++)
|
||||
{
|
||||
history_str[11][j] = cmdbuffer[j];
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
|
||||
else if(c==0x1b)
|
||||
{
|
||||
c = getchar();
|
||||
if(c==0x5b)
|
||||
{
|
||||
c = getchar();
|
||||
switch(c)
|
||||
{
|
||||
case 0x44:
|
||||
if(h < cp)
|
||||
{
|
||||
putchar(0x8);
|
||||
h++;
|
||||
}
|
||||
else
|
||||
h = cp;
|
||||
break;
|
||||
case 0x41:
|
||||
if(tmp>=1)
|
||||
{
|
||||
if(tmp==1)
|
||||
{
|
||||
tmp = 1;
|
||||
break;
|
||||
}
|
||||
else
|
||||
tmp--;
|
||||
for(; h != 0; h--)
|
||||
{
|
||||
putchar(cmdbuffer[cp-h]);
|
||||
}
|
||||
if((cmdbuffer[0] != 0)||(cp == 0))
|
||||
{
|
||||
for(i=0;cmdbuffer[i];i++)
|
||||
{
|
||||
putchar(0x8);
|
||||
putchar(0x20);
|
||||
putchar(0x8);
|
||||
cmdbuffer[i] = '\0';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for(i=0;history_str[tmp+1][i];i++)
|
||||
{
|
||||
putchar(0x8);
|
||||
putchar(0x20);
|
||||
putchar(0x8);
|
||||
}
|
||||
}
|
||||
for(j=0;history_str[tmp][j];j++)
|
||||
{
|
||||
cmdbuffer[j] = history_str[tmp][j];
|
||||
putchar(cmdbuffer[j]);
|
||||
}
|
||||
}
|
||||
cp = j;
|
||||
break;
|
||||
case 0x43:
|
||||
if(h > 0)
|
||||
{
|
||||
putchar(cmdbuffer[cp-h]);
|
||||
h--;
|
||||
}
|
||||
else
|
||||
h = 0;
|
||||
break;
|
||||
case 0x42:
|
||||
if(tmp <= 11)
|
||||
{
|
||||
if(tmp == 11)
|
||||
{
|
||||
tmp = 11;
|
||||
break;
|
||||
}
|
||||
else
|
||||
tmp++;
|
||||
for(; h != 0; h--)
|
||||
{
|
||||
putchar(cmdbuffer[cp-h]);
|
||||
}
|
||||
if((cmdbuffer[0] != 0)||(cp == 0))
|
||||
{
|
||||
for(i=0;cmdbuffer[i];i++)
|
||||
{
|
||||
putchar(0x8);
|
||||
putchar(0x20);
|
||||
putchar(0x8);
|
||||
cmdbuffer[i] = '\0';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for(i=0;history_str[tmp-1][i];i++)
|
||||
{
|
||||
putchar(0x8);
|
||||
putchar(0x20);
|
||||
putchar(0x8);
|
||||
}
|
||||
}
|
||||
for(j=0;history_str[tmp][j];j++)
|
||||
{
|
||||
cmdbuffer[j] = history_str[tmp][j];
|
||||
putchar(cmdbuffer[j]);
|
||||
}
|
||||
}
|
||||
cp = j;
|
||||
break;
|
||||
default :
|
||||
break;
|
||||
}
|
||||
}
|
||||
c = 0;
|
||||
}
|
||||
|
||||
/***********************************************************************/
|
||||
}
|
||||
/***********************************************************************/
|
||||
if(tmp == 11)
|
||||
{
|
||||
for(j=1;j<12;j++)
|
||||
{
|
||||
for(i=0;i<30;i++)
|
||||
history_str[j][i]=history_str[j+1][i];
|
||||
}
|
||||
for(i=0; i<30; i++)
|
||||
{
|
||||
history_str[11][i] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
/***********************************************************************/
|
||||
if(cp == 0)
|
||||
{
|
||||
goto START;
|
||||
}
|
||||
else
|
||||
{
|
||||
for(i=0; i<8; i++)
|
||||
for(j=0; j<30; j++)
|
||||
cmdpara[i][j] = '\0';
|
||||
num = 0; //argc
|
||||
// printf("\ncmd:%s\n", cmdbuffer);
|
||||
|
||||
for(j = 0,i=0; i<cp; i++) //xpj
|
||||
{
|
||||
if(cmdbuffer[i] == 0x20) //space
|
||||
{
|
||||
if((cmdbuffer[i+1] != 0x20) && ((cmdbuffer[i+1] != '\0')))
|
||||
{
|
||||
j = 0;
|
||||
num++;
|
||||
cmdptr = cmdpara[num];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
*(cmdptr + j) = cmdbuffer[i];
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
cmdptr = cmdpara[0];
|
||||
if(strcmp(cmdptr, cmd[0].cmdname)==0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
for(k=1; strcmp("NULL", cmd[k].cmdname)!=0; k++)
|
||||
{
|
||||
if(strcmp(cmdptr, cmd[k].cmdname)==0)
|
||||
{
|
||||
op = cmd[k].func;
|
||||
for(j=0; j<=num; j++)
|
||||
{
|
||||
p[j] = (char *)(cmdpara[j]);
|
||||
// printf("cmdpara[%d]: %s\n", j, cmdpara[j]);
|
||||
}
|
||||
op(j, (void *)p);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(strcmp("NULL", cmd[k].cmdname)==0)
|
||||
{
|
||||
printf("\n\tERROR: undefine command!!!\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int attest=0;
|
||||
|
||||
|
||||
int main(void)
|
||||
{
|
||||
INT8U rstSrc = (PMU_CMDSTS >> 26) & 0x3;
|
||||
if ((rstSrc == 0x03) && ((PMU_CMDSTS & 0x01ff0000) == 0x00010000) ) // ??PMU_CmdSts?????24:16λ?е?16λ?1???????0??????????????μ?1??????????????ι????????NB?????
|
||||
{
|
||||
//休眠定时唤醒
|
||||
}
|
||||
else
|
||||
{
|
||||
if(rstSrc == 0x0)
|
||||
{
|
||||
//外部复位:需要等待内部32k稳定
|
||||
delay_ms(1000);
|
||||
}
|
||||
else if(rstSrc == 0x03)
|
||||
{
|
||||
//休眠唤醒
|
||||
}
|
||||
else
|
||||
{
|
||||
//看门狗复位
|
||||
}
|
||||
}
|
||||
/*Clock Init*/
|
||||
SystemClockInit(); //时钟等系统配置
|
||||
/*IoRemap Init*/
|
||||
//GPIOInit(); //io配置
|
||||
/*WDT Init*/
|
||||
WdgInit(); //看门狗配置
|
||||
/*Cal In8M*/
|
||||
int g_f = cal_in8m_touch(); //计算内部8M时钟频率
|
||||
/*Uart Init*/
|
||||
Uart0_init_buad(g_f*1000); //串口配置
|
||||
|
||||
//EnableInt(); //开总中断
|
||||
PMU_GPIOA_OE|=(0x01<<20);
|
||||
attest=0;
|
||||
while(1){
|
||||
PMU_GPIOA_O|=(0x01<<20);
|
||||
delay_ms(500);
|
||||
PMU_GPIOA_O&=~(0x01<<20);
|
||||
delay_ms(500);
|
||||
WDG_DogFeed();
|
||||
attest++;
|
||||
printf("test....\n");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user