diff --git a/case/SHT-31/1c102_dev_SHT31.c b/case/SHT-31/1c102_dev_SHT31.c new file mode 100644 index 0000000..ce87814 --- /dev/null +++ b/case/SHT-31/1c102_dev_SHT31.c @@ -0,0 +1,67 @@ +#include "ls1x.h" +#include "Config.h" +#include "1c102_myI2C.h" +#include "1c102_dev_SHT31.h" + +/* + * CRC-8 formula from page 14 of SHT spec pdf + * Test data 0xBE, 0xEF should yield 0x92 + * Initialization data 0xFF + * Polynomial 0x31 (x8 + x5 +x4 +1) + * Final XOR 0x00 + */ +uint8_t CRC_8(const uint8_t *data, int len) +{ + const uint8_t POLYNOMIAL = 0x31; + uint8_t crc = 0xFF; + int j; + int i; + + for(j = len; j; --j) + { + crc ^= *data++; + + for(i = 8; i; --i) + { + crc = (crc&0x80)? (crc << 1)^POLYNOMIAL:(crc << 1); + } + } + + return crc; +} + +void Get_TandRH() +{ + uint8_t buf[10]; + int buf_len = 0; + uint8_t cmd[2] = {0x24, 0x0B}; + uint32_t temp, rh = 0; + + myI2C_write_mult(SHT31_INTERFACE_ADDR, SHT31_DEFAULT_ADDR, cmd, 2); + buf_len = myI2C_read_mult(SHT31_INTERFACE_ADDR, SHT31_DEFAULT_ADDR, buf); + + printf("buf_len = %d\n", buf_len); + if(buf_len >= 6) + { + temp = (buf[0]&0xFF)<<8 | buf[1]; + rh = (buf[3]&0xFF)<<8 | buf[4]; + + printf("Temp=0x%02x, RH=0x%02x.\n", temp, rh); + + temp = (175*(temp/0xFFFF))-45; + rh = 100*(rh/0xFFFF); + } + + + return; +} + +void Get_RegValue() +{ + return; +} + +void Set_RegValue() +{ + return; +} \ No newline at end of file diff --git a/case/SHT-31/1c102_dev_SHT31.h b/case/SHT-31/1c102_dev_SHT31.h new file mode 100644 index 0000000..6e50d83 --- /dev/null +++ b/case/SHT-31/1c102_dev_SHT31.h @@ -0,0 +1,36 @@ +#ifndef LS1X_MASTER_V0_4_1C102_DEV_SHT31_H +#define LS1X_MASTER_V0_4_1C102_DEV_SHT31_H + +#define SHT31_INTERFACE_ADDR 1 +#define SHT31_DEFAULT_ADDR 0x44 +#define SHT31_READ_SERIALNO 0x3780 +#define SHT31_MEAS_HIGHREP_STRETCH 0x2C06 // Doesn't work on PI +#define SHT31_MEAS_MEDREP_STRETCH 0x2C0D // Seems to work on PI but shouldn't +#define SHT31_MEAS_LOWREP_STRETCH 0x2C10 // Seems to work on PI but shouldn't +#define SHT31_MEAS_HIGHREP 0x2400 // Doesn't work on PI +#define SHT31_MEAS_MEDREP 0x240B +#define SHT31_MEAS_LOWREP 0x2416 +#define SHT31_READSTATUS 0xF32D +#define SHT31_CLEARSTATUS 0x3041 +#define SHT31_SOFTRESET 0x30A2 +#define SHT31_HEATER_ENABLE 0x306D +#define SHT31_HEATER_DISABLE 0x3066 + +#define SHT32_DEFAULT_READ SHT31_MEAS_MEDREP +#define SHT31D_FIX_INITIAL_FAIL 1 + +typedef enum +{ + SHT31_OK = 0, + SHT31_CRC_CHECK_FAILED = 1, + SHT31_BAD = 2, + SHT31_READ_FAILED = 3, + SHT31_WRITE_FAILED = 4 +} sht31rtn; + +uint8_t CRC_8(const uint8_t *data, int len); + +void Get_TandRH(); +void Get_RegValue(); +void Set_RegValue(); +#endif //LS1X_MASTER_V0_4_1C102_DEV_SHT31_H diff --git a/private/ls1c102/1c102_myGPIO.c b/private/ls1c102/1c102_myGPIO.c new file mode 100644 index 0000000..360b866 --- /dev/null +++ b/private/ls1c102/1c102_myGPIO.c @@ -0,0 +1,43 @@ +#include "ls1x.h" +#include "Config.h" +#include "UserGpio.h" +#include "ls1x_gpio.h" +#include "1c102_myGPIO.h" + +/* + * + */ +void Set_gpio_value(unsigned char GPIOx, unsigned char mode, unsigned char value) +{ + unsigned char data = 0; + + assert_param(IS_GPIO_PIN(GPIOx)); + if(mode) + { + data = (mode<<1) | value; + PMU_GPIOBit(GPIOx) = data; + } + + return; +} + +void remap_gpio(unsigned char gpio_NO, GPIOFunc_TypeDef gpio_fun) +{ + switch(gpio_NO/16) + { + case 0: + AFIO_RemapConfig(AFIOA, 0x1<<(gpio_NO%16), gpio_fun); + break; + case 1: + AFIO_RemapConfig(AFIOB, 0x1<<(gpio_NO%16), gpio_fun); + break; + case 2: + AFIO_RemapConfig(AFIOC, 0x1<<(gpio_NO%16), gpio_fun); + break; + case 3: + AFIO_RemapConfig(AFIOD, 0x1<<(gpio_NO%16), gpio_fun); + break; + default: + break; + } +} \ No newline at end of file diff --git a/private/ls1c102/1c102_myGPIO.h b/private/ls1c102/1c102_myGPIO.h new file mode 100644 index 0000000..b308ad0 --- /dev/null +++ b/private/ls1c102/1c102_myGPIO.h @@ -0,0 +1,6 @@ +#ifndef LS1X_MASTER_V0_4_1C102_MYGPIO_H +#define LS1X_MASTER_V0_4_1C102_MYGPIO_H + +void Set_gpio_value(unsigned char GPIOx, unsigned char mode, unsigned char value); +void remap_gpio(unsigned char gpio_NO, GPIOFunc_TypeDef gpio_fun); +#endif //LS1X_MASTER_V0_4_1C102_MYGPIO_H diff --git a/private/ls1c102/1c102_myI2C.c b/private/ls1c102/1c102_myI2C.c new file mode 100644 index 0000000..37ab0b8 --- /dev/null +++ b/private/ls1c102/1c102_myI2C.c @@ -0,0 +1,242 @@ +#include "Config.h" +#include "ls1x.h" +#include "ls1x_latimer.h" +#include "ls1x_clock.h" +#include "ls1x_gpio.h" +#include "1c102_myGPIO.h" +#include "1c102_myI2C.h" + +/**初始化部分**/ +void MY_I2C_StructInit(I2C_InitTypeDef *I2C_InitStruct) +{ + /*---------------- Reset I2C init structure parameters values ----------------*/ + /* initialize the I2C_ClockSpeed member */ + I2C_InitStruct->I2C_ClockSpeed = 100000; + /* Initialize the I2C_Mode member */ + I2C_InitStruct->I2C_Mode = I2C_Mode_Master; + // I2C_InitStruct->I2C_Mode = I2C_Mode_Slave; + /* Initialize the I2C_OwnAddress1 member */ + I2C_InitStruct->I2C_OwnAddress1 = 0x2A; + /* Initialize the I2C_Buslock Check */ + I2C_InitStruct->I2C_BuslockCheckEn = I2C_Buslock_Check_Enable; + /* Initialize the I2C_Slave_Autoreset */ + I2C_InitStruct->I2C_SlvAutoresetEn = I2C_Slv_Autoreset_Disable; +} + +void MY_I2C_Init(I2C_TypeDef* I2Cx, I2C_InitTypeDef* I2C_InitStruct) +{ + uint32_t tmp = 0; + uint32_t pclk1 = SystemFreq; + + /*---------------------------- I2Cx Configuration ------------------------*/ + I2Cx->CTRL = 0x20; //访问分频寄存器 + tmp = pclk1/I2C_InitStruct->I2C_ClockSpeed; + tmp = (tmp>>2)-1; + I2Cx->PRERL = tmp; + I2Cx->PRERH = tmp >> 8; + + /* Enable the selected I2C peripheral */ + I2Cx->CTRL = 0x80|(I2C_InitStruct->I2C_Mode)|(I2C_InitStruct->I2C_BuslockCheckEn)|(I2C_InitStruct->I2C_SlvAutoresetEn); + if (I2C_InitStruct->I2C_BuslockCheckEn) + { + I2Cx->CR_SR = 0x04; + } + + I2Cx->SADDR = I2C_InitStruct->I2C_OwnAddress1; + I2C_wait(I2C); + + return; +} + +void MY_I2C_InitTask() +{ + remap_gpio(MYI2C_SDA_GPIO_INDEX, GPIO_FUNC_MAIN); + remap_gpio(MYI2C_SCL_GPIO_INDEX, GPIO_FUNC_MAIN); + + I2C_InitTypeDef My_I2C_InitStruct; + MY_I2C_StructInit(&My_I2C_InitStruct); + My_I2C_InitStruct.I2C_ClockSpeed = MYI2C_CLOCK_FAST_SPEED; + I2C_Init(I2C, &My_I2C_InitStruct); + delay_ms(500); + + return; +} + +/**工具部分*/ +void myI2C_write_signal(unsigned char dev_addr, unsigned char reg_addr, unsigned char w_data) +{ + //unsigned int v = SaveDisableInt(); + + I2C_GenerateSTART(I2C,ENABLE); + I2C_wait(I2C); + + I2C_Send7bitAddress(I2C, dev_addr & 0xff, I2C_Direction_Transmitter); + I2C_wait(I2C); + if(I2C->CR_SR & 0x80) + { + printf("I2C send 7 bit address failed\n"); + goto exit_point; + } + + I2C_SendData(I2C, reg_addr); + I2C_wait(I2C); + if(I2C->CR_SR & 0x80) + { + printf("I2C send reg address failed\n"); + goto exit_point; + } + + I2C_SendData(I2C, w_data); + I2C_wait(I2C); + if(I2C->CR_SR & 0x80) + { + printf("I2C send data failed\n"); + goto exit_point; + } + + I2C_GenerateSTOP(I2C,ENABLE); + I2C_wait(I2C); + + exit_point: + //recvEnableInt(v); + return; +} + +void myI2C_write_mult(uint8_t dev_addr, uint8_t reg_addr, uint8_t *w_data, uint8_t num) +{ + int i=0; + + I2C_GenerateSTART(I2C,ENABLE); + I2C_wait(I2C); + + I2C_Send7bitAddress(I2C, dev_addr & 0xff, I2C_Direction_Transmitter); + I2C_wait(I2C); + if(I2C->CR_SR & 0x80) + { + printf("I2C send 7 bit address failed\n"); + goto exit_point; + } + + I2C_SendData(I2C, reg_addr); + I2C_wait(I2C); + if(I2C->CR_SR & 0x80) + { + printf("I2C send reg address failed\n"); + goto exit_point; + } + + for(i=0; iCR_SR & 0x80) + { + printf("I2C send data failed\n"); + goto exit_point; + } + } + + I2C_GenerateSTOP(I2C,ENABLE); + I2C_wait(I2C); + + exit_point: + //recvEnableInt(v); + return; +} + +unsigned char myI2C_read_signal(unsigned char dev_addr, unsigned char reg_addr) +{ + //unsigned int v = SaveDisableInt(); + unsigned char ret = 0xff; + + I2C_GenerateSTART(I2C,ENABLE); + I2C_wait(I2C); + + I2C_Send7bitAddress(I2C, dev_addr & 0xff, I2C_Direction_Transmitter); + I2C_wait(I2C); + if(I2C->CR_SR & 0x80) + { + printf("I2C send 7 bit address failed\n"); + goto exit_point; + } + + I2C_SendData(I2C,reg_addr); + I2C_wait(I2C); + if(I2C->CR_SR & 0x80) + { + printf("I2C send reg address failed\n"); + goto exit_point; + } + + I2C_Send7bitAddress(I2C, dev_addr & 0xff, I2C_Direction_Receiver); + I2C_wait(I2C); + if(I2C->CR_SR & 0x80) + { + printf("I2C send 7 bit address failed\n"); + goto exit_point; + } + + I2C_ReceiveData(I2C,I2C_NACK,I2C_STOP); + I2C_wait(I2C); + ret = (uint8_t)I2C->DR; + + exit_point: + //recvEnableInt(v); + return ret; +} + +unsigned char myI2C_read_mult(uint8_t dev_addr, uint8_t reg_addr, uint8_t *rece_data) +{ + unsigned char i = 0; + unsigned char ret = 0xFF; + + I2C_GenerateSTART(I2C,ENABLE); + I2C_wait(I2C); + + I2C_Send7bitAddress(I2C, dev_addr & 0xff, I2C_Direction_Transmitter); + I2C_wait(I2C); + if(I2C->CR_SR & 0x80) + { + printf("I2C send 7 bit address failed\n"); + goto exit_point; + } + + I2C_SendData(I2C,reg_addr); + I2C_wait(I2C); + if(I2C->CR_SR & 0x80) + { + printf("I2C send reg address failed\n"); + goto exit_point; + } + + I2C_Send7bitAddress(I2C, dev_addr&0xFF, I2C_Direction_Receiver); + I2C_wait(I2C); + if(I2C->CR_SR & 0x80) + { + printf("I2C send 7 bit address failed\n"); + goto exit_point; + } + + unsigned char chk = 0; + while (!chk) + { + if(I2C->CR_SR && 0x80){ + I2C_ReceiveData(I2C, I2C_NACK, I2C_STOP); + I2C_wait(I2C); + ret = (uint8_t)I2C->DR; + chk = 1; + } + else{ + I2C_ReceiveData(I2C,I2C_ACK,I2C_NSTOP); + I2C_wait(I2C); + ret = (uint8_t)I2C->DR; + chk = 0; + } + rece_data[i++] = ret; + } + rece_data[i] = '\0'; + + exit_point: + //recvEnableInt(v); + return i; +} \ No newline at end of file diff --git a/private/ls1c102/1c102_myI2C.h b/private/ls1c102/1c102_myI2C.h new file mode 100644 index 0000000..459c446 --- /dev/null +++ b/private/ls1c102/1c102_myI2C.h @@ -0,0 +1,19 @@ +#ifndef LS1X_MASTER_V0_4_1C102_MYI2C_H +#define LS1X_MASTER_V0_4_1C102_MYI2C_H +#include "ls1c102_i2c.h" + +//INDEX的定义统一按照GPIO序号定义 +#define MYI2C_SDA_GPIO_INDEX 5 +#define MYI2C_SCL_GPIO_INDEX 4 +//I2C总线速率 +#define MYI2C_CLOCK_FAST_SPEED 400000 +#define MYI2C_CLOCK_SPEED 100000 + +void MY_I2C_StructInit(I2C_InitTypeDef *I2C_InitStruct); +void MY_I2C_Init(I2C_TypeDef* I2Cx, I2C_InitTypeDef* I2C_InitStruct); +void MY_I2C_InitTask(); +void myI2C_write_signal(unsigned char dev_addr, unsigned char reg_addr, unsigned char w_data); +void myI2C_write_mult(uint8_t dev_addr, uint8_t reg_addr, uint8_t *w_data, uint8_t num); +unsigned char myI2C_read_signal(unsigned char dev_addr, unsigned char reg_addr); +unsigned char myI2C_read_mult(uint8_t dev_addr, uint8_t reg_addr, uint8_t *rece_data); +#endif //LS1X_MASTER_V0_4_1C102_MYI2C_H diff --git a/private/ls1c102/1c102_mySysTime.c b/private/ls1c102/1c102_mySysTime.c new file mode 100644 index 0000000..c6b63e5 --- /dev/null +++ b/private/ls1c102/1c102_mySysTime.c @@ -0,0 +1,7 @@ +#include "../../include/ls1x.h" +#include "1c102_mySysTime.h" + +void Get_My_SysTimer() +{ + +} diff --git a/private/ls1c102/1c102_mySysTime.h b/private/ls1c102/1c102_mySysTime.h new file mode 100644 index 0000000..80f5c0e --- /dev/null +++ b/private/ls1c102/1c102_mySysTime.h @@ -0,0 +1,5 @@ +#ifndef LS1X_MASTER_V0_4_1C102_MYSYSTIME_H +#define LS1X_MASTER_V0_4_1C102_MYSYSTIME_H + + +#endif //LS1X_MASTER_V0_4_1C102_MYSYSTIME_H diff --git a/private/ls1c102/1c102_mytimer.c b/private/ls1c102/1c102_mytimer.c new file mode 100644 index 0000000..ebd61f1 --- /dev/null +++ b/private/ls1c102/1c102_mytimer.c @@ -0,0 +1,83 @@ +#include "../../include/ls1x.h" +#include "../../include/Config.h" +#include "ls1c102_ptimer.h" +#include "1c102_mytimer.h" + +#define TIMER_NUM 100 + +Timertask_Typedef mytimer_que[MYTIME_QUEUE_NUMBER]={0}; + +char Reg_timer_task(unsigned int exe_time, int (*handle_fun)(void)) +{ + unsigned char i = 0; + for(i=0; i<=MYTIME_QUEUE_NUMBER-1; ++i) + { + if(!mytimer_que[i].status){ + mytimer_que[i].que_number = i; + mytimer_que[i].status = MYTIME_TASK_ENABLE; + mytimer_que[i].execute_time = exe_time/TIMER_NUM; + mytimer_que[i].handle_fun = handle_fun; + break; + } + else { + if (i == MYTIME_QUEUE_NUMBER) { + printf("The queue is full.\n"); + return -1; + } + } + } + + return mytimer_que[i].que_number; +} + +void Del_timer_task(unsigned char que_num) +{ + mytimer_que[que_num].status = MYTIME_TASK_DISABLE; + return; +} + +void Timer_IRQ_Handle() +{ + unsigned char i = 0; + for(i=0; i<=MYTIME_QUEUE_NUMBER-1; ++i) + { + if(mytimer_que[i].status == MYTIME_TASK_ENABLE) + { + if(--mytimer_que[i].execute_time <= 0) + { + mytimer_que[i].handle_fun(); + Del_timer_task(mytimer_que[i].que_number); /*执行完删除该定时任务*/ + } + } + } + + return; +} + +unsigned int SystemFreq; +static void timer_start() +{ + TIM_InitTypeDef timer_info; + TIM_StructInit(&timer_info); + timer_info.Clock_Freq = SystemFreq; + timer_info.TIME_CMP = ((timer_info.Clock_Freq*TIMER_NUM)/1000); //(1ms*TIMER_NUM)ms + timer_info.TIME_STP = ((timer_info.Clock_Freq*TIMER_NUM)/1000); + TIM_Init(&timer_info); + return; +} + +void Timer_Init() +{ + int i = 0; + for(i=0; i\r\n",__LINE__,__FUNCTION__) -void (* const exti_irq_handle[32])(void); - -void exti_gpioa0_irq_handler(void) -{ - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_A0); -} -void exti_gpioa1_irq_handler(void) -{ - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_A1); -} -void exti_gpioa2_irq_handler(void) -{ - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_A2); -} -void exti_gpioa3_irq_handler(void) -{ - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_A3); -} -void exti_gpioa4_irq_handler(void) -{ - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_A4); -} -void exti_gpioa5_irq_handler(void) -{ - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_A5); -} -void exti_gpioa6_irq_handler(void) -{ - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_A6); -} -void exti_gpioa7_irq_handler(void) -{ - - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_A7); -} -void exti_gpioa8_irq_handler(void) -{ - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_A8); -} -void exti_gpioa9_irq_handler(void) -{ - - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_A9); -} -void exti_gpioa10_irq_handler(void) -{ - - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_A10); -} -void exti_gpioa11_irq_handler(void) -{ - - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_A11); -} -void exti_gpioa12_irq_handler(void) -{ - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_A12); -} -void exti_gpioa13_irq_handler(void) -{ - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_A13 ); -} -void exti_gpioa14_irq_handler(void) -{ - - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_A14); -} -void exti_gpioa15_irq_handler(void) -{ - - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_A15 ); -} - -void exti_gpiob0_irq_handler(void) -{ - - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_B0); -} -void exti_gpiob1_irq_handler(void) -{ - - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_B1); -} -void exti_gpiob2_irq_handler(void) -{ - - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_B2); -} -void exti_gpiob3_irq_handler(void) -{ - - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_B3); -} -void exti_gpiob4_irq_handler(void) -{ - - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_B4); -} -void exti_gpiob5_irq_handler(void) -{ - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_B5); -} -void exti_gpiob6_irq_handler(void) -{ - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_B6); -} -void exti_gpiob7_irq_handler(void) -{ - - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_B7); -} -void exti_gpiob8_irq_handler(void) -{ - - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_B8); -} -void exti_gpiob9_irq_handler(void) -{ - - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_B9); -} -void exti_gpiob10_irq_handler(void) -{ - - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_B10); -} -void exti_gpiob11_irq_handler(void) -{ - - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_B11); -} -void exti_gpiob12_irq_handler(void) -{ - - BEBUG_IRQ(); - EXTI_ClearITPendingBit(EXTI, IRQ_GPIO_B12); -} - - -void (* const Ext_IrqHandle[29])(void) = { - exti_gpioa0_irq_handler, - exti_gpioa1_irq_handler, - exti_gpioa2_irq_handler, - exti_gpioa3_irq_handler, - exti_gpioa4_irq_handler, - exti_gpioa5_irq_handler, - exti_gpioa6_irq_handler, - exti_gpioa7_irq_handler, - exti_gpioa8_irq_handler, - exti_gpioa9_irq_handler, - exti_gpioa10_irq_handler, - exti_gpioa11_irq_handler, - exti_gpioa12_irq_handler, - exti_gpioa13_irq_handler, - exti_gpioa14_irq_handler, - exti_gpioa15_irq_handler, - exti_gpiob0_irq_handler, - exti_gpiob1_irq_handler, - exti_gpiob2_irq_handler, - exti_gpiob3_irq_handler, - exti_gpiob4_irq_handler, - exti_gpiob5_irq_handler, - exti_gpiob6_irq_handler, - exti_gpiob7_irq_handler, - exti_gpiob8_irq_handler, - exti_gpiob9_irq_handler, - exti_gpiob10_irq_handler, - exti_gpiob11_irq_handler, - exti_gpiob12_irq_handler, -}; - -void ext_handler(void) -{ - INT32U regsrc;// = EXTI->EXINT_SRC; - INT32U regen;// = EXTI->EXINT_SRC; - INT32U irq_no; - BEBUG_IRQ(); - regsrc = EXTI->EXINT_SRC; - regen = EXTI->EXINT_EN; - regsrc = (regsrc & regen); - asm("nop"); - - for(irq_no = 0; irq_no < 32; irq_no++) - { - if((regsrc>>irq_no) & 0x1) - { - Ext_IrqHandle[irq_no](); - } - } -} - -void pmu_handler(){ - printf("\r\nThis is pmu_handler"); - if(PMU_CMDSTS & (1<<16)) - { - printf("\n\rTIMER_WAKE_INT\n\r"); - PMU_CMDW = (1 << 16); // 清除中断标志 - //INT32U SleepEn = PMU_CMDSTS & 0xffffffff; - WDG_DogFeed(); - } -} - -void intc_handler(){ - //printf("\r\nThis is intc_handler!"); - if(INT_OUT & 0x1) - { - // printf("\n\rBTIM_INT!"); - if(TIM_GetITStatus(TIM6, TIM_IT_Update) == SET){ - TIM_ClearFlag(TIM6, TIM_IT_Update); - mc_ctrl(); - } - } -} - -void adc_handler(){ - uint16_t tmpreg[3]; - static int i = 0; - if(ADC_GetITStatus(ADC1, ADC_IT_JEOC) == SET){ - ADC_ClearITPendingBit(ADC1, ADC_IT_JEOC); - - #if 0 - if(i<1000){ - i++; - } - else{ - tmpreg[0] = ((ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_1)*5000)>>12); - tmpreg[1] = ((ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_2)*5000)>>12); - tmpreg[2] = ((ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_3)*5000)>>12); - //printf("U:%d,V:%d,W:%d\n\r",tmpreg[0],tmpreg[1],tmpreg[2]); - //printf("%d\n\r",tmpreg[0]); - i=0; - } - #else - printf("this is adc int\n\r"); - #endif - } -} - -void bldc_handler(int vector,void *param){ - // printf("%d, %s\n",vector,param); - if ((HALL_TIM->SR &(TIM_IT_Trigger)) == (TIM_IT_Trigger)!= RESET) - { - HALL_TIM->SR &= ~(TIM_IT_Trigger); - if ((((HALL_TIM->DIER & TIM_IT_Trigger) == (TIM_IT_Trigger)) ? SET : RESET) != RESET) - { - HALL_TriggerCallback(); - } - } - else if ((HALL_TIM->SR &(TIM_FLAG_Update)) == (TIM_FLAG_Update)!= RESET) - { - HALL_TIM->SR &= ~(TIM_IT_Update); - if ((((HALL_TIM->DIER & TIM_IT_Update) == (TIM_IT_Update)) ? SET : RESET) != RESET) - { - HALL_PeriodElapsedCallback(); - } - } -} - -void dcm_handler(int vector, void *param){ - // printf("%d, %s\n",vector,param); - if ((ENCODER_TIM->SR &(TIM_FLAG_Update)) == (TIM_FLAG_Update)!= RESET) - { - ENCODER_TIM->SR &= ~(TIM_IT_Update); - if ((((ENCODER_TIM->DIER & TIM_IT_Update) == (TIM_IT_Update)) ? SET : RESET) != RESET) - { - if((ENCODER_TIM->CR1 &(TIM_CR1_DIR)) == (TIM_CR1_DIR)){ - /* 下溢 */ - Encoder_Overflow_Count--; - } - else{ - /* 上溢 */ - Encoder_Overflow_Count++; - } - } - - } -} - -INT32U g_foc_counter = 0; -extern INT32U g_flags; -void foc_handler(int vector, void *param){ - if ((ENCODER_TIM->SR &(TIM_FLAG_Update)) == (TIM_FLAG_Update)!= RESET) - { - ENCODER_TIM->SR &= ~(TIM_IT_Update); - if ((((ENCODER_TIM->DIER & TIM_IT_Update) == (TIM_IT_Update)) ? SET : RESET) != RESET) - { - if(g_flags == 1) - { - g_foc_counter++; - } - else if(g_flags == 2) - { - g_foc_counter=0; - } - -// if((ENCODER_TIM->CR1 &(TIM_CR1_DIR)) == (TIM_CR1_DIR)){ -// /* 下溢 */ -// Encoder_Overflow_Count--; -// motor_drive.timeout = 0; -// } -// else{ -// /* 上溢 */ -// Encoder_Overflow_Count++; -// motor_drive.timeout = 0; -// } - } - - } - -} - -void atim_handler(){ - //if(TIM_GetITStatus(TIM1, TIM_IT_Update) == SET){ - // TIM_ClearFlag(TIM1, TIM_IT_Update); - // printf("atim up int\n"); - //} - if ((MOTOR_TIM->SR &(TIM_IT_Update)) == (TIM_IT_Update)!= RESET) - { - if ((((MOTOR_TIM->DIER & TIM_IT_Update) == (TIM_IT_Update)) ? SET : RESET) != RESET) - { - MOTOR_TIM->SR &= ~(TIM_IT_Update); - foc_update(); - } - } -} - - -typedef void (*isr_handler_t)(int vector, void *param); - -struct irq_desc -{ - isr_handler_t handler; - void *param; -}; - -struct irq_desc irq_handler_table[3]; - -void irq_default_handler(int vector, void *param) -{ - printf("Error !!! BLDC STOP\r\n"); - HALL_PeriodElapsedCallback(); -} - - -isr_handler_t motor_interrupt_register(int vector,isr_handler_t handler, void *param) -{ - isr_handler_t old_handler = NULL; - - if(vector >=0 && vector < 3) - { - old_handler = irq_handler_table[vector].handler; - irq_handler_table[vector].handler = handler; - irq_handler_table[vector].param = param; - } - printf("%s index %d regsiter successful\n",param,vector); - return old_handler; -} - -static int g_index = 0; -void gtim_handler(void) -{ - void *param; - isr_handler_t irq_func = NULL; - //printf("g_index:%d\r\n",g_index); - irq_func = irq_handler_table[g_index].handler; - param = irq_handler_table[g_index].param; - irq_func(g_index,param); -} - -extern void *memset(void *s, int c, int count); - -void irq_motor_default(void) -{ - int idx; - memset(irq_handler_table, 0x00, sizeof(irq_handler_table)); - for(idx=0; idx<3; idx++) - { - irq_handler_table[idx].handler = irq_default_handler; - } - -} - - -void irq_motor_init(int index) -{ - if(index == 1) - { - motor_interrupt_register(index,bldc_handler, "bldc_irq"); - } - else if(index == 0) - { - motor_interrupt_register(index,dcm_handler, "dcm_irq"); - } - else if(index == 2) - { - motor_interrupt_register(index,foc_handler, "foc_irq"); - } - else if(index == 3) - { - printf("do nothing\r\n"); - } - g_index = index; -} - -void TIMER_HANDLER(void) -{ - Set_Timer_clear(); - printf("Core Timer clear interrupt..\n"); - Set_Timer_stop(); -} diff --git a/user/1c103_cmd.c b/user/1c103_cmd.c deleted file mode 100644 index 487ca37..0000000 --- a/user/1c103_cmd.c +++ /dev/null @@ -1,532 +0,0 @@ -//#include "ls1c103.h" -#include "ls1x.h" -#include "ls1c103_map.h" -#include "ls1x_rtc.h" -#include "ls1x_latimer.h" -#include "ls1x_common.h" -#include "ls1x_string.h" -#include "ls1x_spi.h" -#include "ls1x_wdg.h" -#include "ls1x_gpio.h" -#include "Config.h" -INT32U wdt_caller; -extern uint32_t SystemFreq; -unsigned int str2num(unsigned char *); -extern void cpu_sleep(); -extern int spi_cfg(void); -int do_nothing() -{ - return 0; -} - -int do_d1(int argc, void *argv[]) -{ - if((argc < 2)||(argc > 3)) - { - printf("\n usage: d1 \n\r"); - return 1; - } - INT32U addr; - int i, num; - addr = str2num(argv[1]); - if(argc == 2) num = 1; - else num = str2num(argv[2]); - - for(i=0; i 3)) - { - printf("\n usage: d4 \n\r"); - return 1; - } - unsigned int addr; - int i, num; - - addr = str2num(argv[1]); - if(argc == 2) num = 1; - else num = str2num(argv[2]); - - for(i=0; i \n\r"); - return 1; - } - addr = str2num(argv[1]); - value = (unsigned char)str2num(argv[2]); - *(volatile unsigned char*)(addr) = value; - - return 0; -} - -int do_m4(int argc, void *argv[]) -{ - unsigned int addr; - unsigned int value; - if(argc != 3) - { - printf("\n usage: m4 \n\r"); - return 1; - } - addr = str2num(argv[1]); - value = str2num(argv[2]); - *(volatile unsigned int*)(addr) = value; - - return 0; -} - -unsigned int str2num(unsigned char *s) -{ - unsigned int num = 0; - unsigned int radix; - unsigned int chr; - - unsigned int i; - if((*(s)=='0') && (*(s+1)=='x' || *(s+1)=='X')) - { - i = 2; - radix = 16; - } - else if(*(s)=='0') - { - i = 1; - radix = 8; - } - else - { - i = 0; - radix = 10; - } - - for(; *(s+i)!='\0'; i++) - { - chr = *(s+i); - switch(radix){ - case 16: - if(chr>='0' && chr<='9') - num = num*radix + (chr - '0'); - else if(chr>='a' && chr<='f') - num = num*radix + (chr - 'a' + 10); - else if(chr>='A' && chr<='F') - num = num*radix + (chr - 'A' + 10); - else - printf("illegal hex number...\n"); - break; - case 10: - case 8: - if(chr>='0' && chr<('0'+radix)) - num = num*radix + (chr - '0'); - else - printf("illegal number...\n"); - break; - default: - break; - } - } - - return num; -} - -int watch_dog(int argc, void *argv[]) -{ - INT32U sec; - printf("\r\nwdg test start....argc:%d\n",argc); - - if(argc < 2) - { - WDG_DogFeed(); - printf("\r\n Usage: wdg "); - return 1; - } - - sec = str2num(argv[1]); - WDG_SetWatchDog(sec); - - return 0; -} - -int delay(int argc, void *argv[]) -{ - - INT32U flags,val; - - if(argc < 3) - { - printf("\r\n Usage: delay "); - return 1; - } - - flags = str2num(argv[1]); - val = str2num(argv[2]); - - if (flags == 1) - { - delay_us(val); - printf("\r\n%dus",val); - } - else if (flags == 2) { - - delay_ms(val); - printf("\r\n%dms",val); - }else if (flags == 3){ - - delay_s(val); - printf("\r\n%ds",val); - }else { - printf("\r\n Usage: delay "); - } - return 0; -} - -INT32U a_to_n(INT8U chr) //ascii to number -{ - if (chr < 0x30 || chr > 0x39) - { - printf("\r\nwrong range of number!\r\n"); - return -1; - } - return (chr & 0x0f); -} - -/***rtc test***/ -int date (int argc, void* argv[]) -{ - printf("\r\n"); - char *param_str [4] = {"-h", "-s", "-i", "-f"}; - if (!strcmp(argv[1], param_str[0])) - { - printf("date to display time. \r\n"); - printf("date -s yy-mm-dd hh:mm:ss to set time.\r\n"); - printf("date -i mm-dd hh:mm:ss to set int.\r\n"); - printf("date -f Hz :input freqency in integer to set prescale.\r\n"); - return 0; - } - if (!strcmp(argv[1], param_str[1])) //set time - { - if (argc != 4) - { - printf("check parameter\r\n"); - return 1; - } - INT32U rtc0, rtc1; - INT32U yy, mm, dd, h, m, s; - INT32U invalid_param; - INT8U *rtc1_str, *rtc0_str; - tsRtcTime rtc_param; - rtc1_str = (INT8U*) argv[2]; - rtc0_str = (INT8U*) argv[3]; - yy = 10*a_to_n(*(rtc1_str+0))+a_to_n(*(rtc1_str+1)); - mm = 10*a_to_n(*(rtc1_str+3))+a_to_n(*(rtc1_str+4)); - dd = 10*a_to_n(*(rtc1_str+6))+a_to_n(*(rtc1_str+7)); - h = 10*a_to_n(*(rtc0_str+0))+a_to_n(*(rtc0_str+1)); - m = 10*a_to_n(*(rtc0_str+3))+a_to_n(*(rtc0_str+4)); - s = 10*a_to_n(*(rtc0_str+6))+a_to_n(*(rtc0_str+7)); - invalid_param = mm > 12 || mm == 0 || dd > 31 || - dd == 0 ||(mm == 2) && (dd > 29) || - h > 24 || m > 60 || s > 60 ; - if (invalid_param) - { - printf("invalid param"); - return 1; - } - - rtc_param.sec = s; - rtc_param.min = m; - rtc_param.hour = h; - rtc_param.day = dd; - rtc_param.mon = mm; - rtc_param.year = yy; - - RtcUpdateData(0, &rtc_param); - - } - else if (!strcmp(argv[1], param_str[2])) //set int - { - if (argc != 4) - { - printf("check parameter\r\n"); - return 1; - } - INT32U mm, dd, h, m, s; - INT32U invalid_param; - INT8U *cfg_str0,*cfg_str1; - tsRtcTime rtc_param; - cfg_str0 = (INT8U*) argv[2]; - cfg_str1 = (INT8U*) argv[3]; - mm = 10*a_to_n(*(cfg_str0+0))+a_to_n(*(cfg_str0+1)); - dd = 10*a_to_n(*(cfg_str0+3))+a_to_n(*(cfg_str0+4)); - h = 10*a_to_n(*(cfg_str1+0))+a_to_n(*(cfg_str1+1)); - m = 10*a_to_n(*(cfg_str1+3))+a_to_n(*(cfg_str1+4)); - s = 10*a_to_n(*(cfg_str1+6))+a_to_n(*(cfg_str1+7)); - invalid_param = mm > 12 || mm == 0 || dd > 31 || - dd == 0 ||(mm == 2) && (dd > 29) || - h > 24 || m > 60 || s > 60 ; - if (invalid_param) - { - printf("invalid param"); - return 1; - } - - rtc_param.sec = s; - rtc_param.min = m; - rtc_param.hour = h; - rtc_param.day = dd; - rtc_param.mon = mm; - - // bsp_rtc_alarm_set(&rtc_param); - return 0; - } - else if (!strcmp(argv[1], param_str[3])) //set prescale - { - INT32U freq_in = str2num(argv[2]); - if (freq_in <30000 | freq_in > 50000) - { - printf("\r\nshould be close to 32768 Hz\r\n"); - return 1; - } - INT32U freq, freq_int, freq_frac; - freq_int=freq_in >> 4; - freq_frac = freq_in%16; - //RTC_FREQ = freq; - return 0; - } - else // or display time - { - if (argc != 1) - printf("date -h for usage\r\n"); - INT32U yy, mm, dd, h, m, s; - tsRtcTime rtc_param; - - RtcUpdateData(1,&rtc_param); - - yy = rtc_param.year; - mm = rtc_param.mon; - dd = rtc_param.day; - h = rtc_param.hour; - m = rtc_param.min; - s = rtc_param.sec; - printf("20%02d-%02d-%02d ", yy, mm, dd); - printf("%02d:%02d:%02d", h, m, s); - return 0; - } -} - -#define ERASE_CMD 0xa0000000 -#define PAGE_CMD 0xe0000000 -#define CLRPL_CMD 0x40000000 -#define UPKEY_CMD 0xf0000000 -#define UPBND_CMD 0x90000000 -#define VERIF_CMD 0x10000000 -#define TESTK_CMD 0x20000000 -#define INTCLR_CMD 0x30000000 -#define SLEEP_CMD 0xc0000000 - -int copy_to_flash(unsigned int src, unsigned int offset, unsigned int size) -{ - unsigned int j; - unsigned int start = offset; - unsigned int end = offset + size; - FLASH_CAH_REG = 0xffffffff; - FLASH_CAL_REG = 0xffffffff; - FLASH_PET_REG = 0x18; - printf("\r\nprogram start\r\n"); - for (offset=start;offset"); - return 1; - } - - sec = str2num(argv[1]); - Wake_Set(sec); - cpu_sleep(); - - return 0; -} - -int coremark_test(int argc, void *argv[]) -{ - if (argc != 2) - { - printf("\n usage: coremark \n"); - return 1; - } - INT32U loop = str2num(argv[1]); - //core_main(0,0,0x66,loop,7,1,2000); - printf("\ncoremark test pass!\n"); - return 0; -} - - -int spi_flash(int argc, void *argv[]) -{ - uint8_t *data; - data = (uint8_t *)0x10000700; - uint16_t flash_id; - uint32_t addr = 0x0; - uint32_t i,k,j=0,count; - - spi_cfg(); -// SPI->SPCR = 0x52; // enable mstr -// SPI->PARAM = 0x20; // ~memory_en - /*Get flash id*/ - flash_id = Spiflash_Rdid(); - printf("\r\nid=0x%x\r\n",flash_id); - /*Erase chip*/ - Spiflash_Block64k_Erase(addr); - /*Program */ - printf("program start\n"); - count = 256; - for(k=0;k"); - return 1; - } - - sec = str2num(argv[1]); - //Set_Timer_Init(sec*8000000); - Set_Timer_Init(sec*10667000); - - return 0; -} - -int tmp(int argc, void *argv[]) -{ - uint32_t tmp =0; - - - return 0; -} - - -int copy_iram(void) -{ - unsigned int j; - printf("\r\ncopyiram start\r\n"); - for (j = 0x0;j < 0x2000; j=j + 4) - { - *(volatile unsigned int*)(0x10000000+j) = 0x0; - } - - for (j = 0x0;j < 0x2000; j=j + 4) - { - *(volatile unsigned int*)(0x10000000+j) = *(volatile unsigned int*)(0x20010000 + j); - } - for (j = 0x0;j < 0x2000; j=j + 4) - { - if(*(volatile unsigned int*)(0x10000000+j) != *(volatile unsigned int*)(0x20010000 + j)) - { - printf("copy error %x,%x,%x\n",j,*(volatile unsigned int*)(0x10000000+j), *(volatile unsigned int*)(0x20010000 + j)); - } - } - asm volatile (\ - "li.w $r12, 0x10000000;\n" \ - "jirl $r0, $r12 , 0x0;\n"\ - ); - - return 0; -} - diff --git a/user/1c103_cmdline.c b/user/1c103_cmdline.c deleted file mode 100644 index 4b2781c..0000000 --- a/user/1c103_cmdline.c +++ /dev/null @@ -1,553 +0,0 @@ -#include "Config.h" -#include "UserGpio.h" -#include "ls1x.h" -#include "ls1x_pmu.h" -#include "ls1x_string.h" -#include "ls1x_wdg.h" -#include "ls1x_gpio.h" -#include "ls1x_uart.h" -#include "ls1x_common.h" -#include "ls1x_clock.h" -#include "ls1c103_tim.h" -extern void wakeup_reset(void); -extern void TIM6_timebase(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[]); -// add -extern int do_nothing(); -extern unsigned int str2num(unsigned char); -extern int coremark_test(int argc, void *argv[]); -/*foc*/ -extern int tim_foc(int argc, void *argv[]); -extern int foc_speed_test(int argc, void *argv[]); -extern int foc_speed_set(int argc, void *argv[]); -/*bldc*/ -extern int tim_motor(); -extern int speed_set(int argc, void *argv[]); -extern int speed_keyset(int argc, void *argv[]); -/*dcm*/ -extern int tim_dcm(int argc, void *argv[]); -extern int speed_set_dcm(int argc, void *argv[]); -extern int speed_keyset_dcm(int argc, void *argv[]); -extern int tim_dcm_enc(int argc, void *argv[]); -extern int enc_speed_set(int argc, void *argv[]); -extern int enc_speed_keyset(int argc, void *argv[]); -extern int show_local(); -/*steer*/ -extern int tim_steer(int argc, void *argv[]); -extern int angle_set(int argc, void *argv[]); -extern int angle_keyset(int argc, void *argv[]); -/*general*/ -extern int latimer(int argc,void *argv[]); -extern int watch_dog(int argc, void *argv[]); -extern int crc(int argc, void *argv[]); -extern int dma_ram(int argc, void *argv[]); -extern int key(int argc, void *argv[]); -extern int key_int(int argc, void *argv[]); -extern int adc_single_test(int argc, void *argv[]); -extern int regular_test(int argc, void *argv[]); -extern int atim_int(int argc, void *argv[]); -extern int btim_int(int argc, void *argv[]); -extern int myspi_init(int argc, void *argv[]); -extern int spi_erase(int argc, void *argv[]); -extern int spi_dma_write(int argc, void *argv[]); -extern int spi_dma_read(int argc, void *argv[]); -extern int spi_flash(int argc, void *argv[]); -extern int tim_int(int argc, void *argv[]); -extern int tim_test(); -extern int adc_tim_test(int argc, void *argv[]); -extern int uart1_init(int argc, void *argv[]); -extern int uart1_dma_tx(int argc, void *argv[]); -extern int uart1_dma_rx(int argc, void *argv[]); -extern int i2c_init(int argc, void *argv[]); -extern int i2c_recover(int argc, void *argv[]); -extern int i2c_wr(int argc, void *argv[]); -extern int i2c_rd(int argc, void *argv[]); -extern int i2c_wr_master(int argc, void *argv[]); -extern int i2c_wr_slaver(int argc, void *argv[]); -extern int copy(); -extern int copy_iram(); -extern int delay(int argc, void *argv[]); -extern int date(int argc, void* argv[]); -extern int wakeup(int argc, void *argv[]); -extern int ry(int argc, void *argv[]); -extern int tmp(int argc, void *argv[]); -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 ]", "--dump address byte"}, - {"d4", do_d4, "[d4 ]", "--dump address word"}, - {"help", do_help, "[help ]", "--cmd list"}, - {"m1", do_m1, "[m1 ]", "--modify address byte"}, - {"m4", do_m4, "[m4 ]", "--modify address word"}, - /*foc*/ - {"foc", tim_foc, "[tim_foc]", "--tim_foc "}, - {"foc_adjust", foc_speed_test, "[tim_foc]", "--tim_foc "}, - {"foc_speed", foc_speed_set, "[tim_foc]", "--tim_foc "}, - /*bldc*/ - {"mt", tim_motor, "[mt]", "--tim motor test "}, - {"ss", speed_set, "[ss]", "--speed_set "}, - {"sks", speed_keyset, "[sks]", "--speed_set "}, - /*dcm*/ - {"dcm1", tim_dcm, "[tim_dcm]", "--tim_dcm "}, - {"ss1", speed_set_dcm, "[speed_set]", "--speed_set "}, - {"sks1", speed_keyset_dcm, "[speed_keyset]", "--speed_keyset "}, - {"dcm2", tim_dcm_enc, "[tim_dcm_enc]", "--tim_dcm_enc "}, - {"ss2", enc_speed_set, "[speed_set]", "--speed_set "}, - {"sks2", enc_speed_keyset, "[speed_keyset]", "--speed_keyset "}, - {"enc", show_local, "[show_local]", "--show_local "}, - /*steer*/ - {"steer", tim_steer, "[tim_steer]", "--tim_steer "}, - {"ags", angle_set, "[angle_set]", "--angle_set "}, - {"agks", angle_keyset, "[angle_keyset]", "--angle_keyset "}, - {"coremark", coremark_test, "[coremark test]", "coremark_test"}, - /*general*/ - {"wdg", watch_dog, "[wdg test", "--v1"}, - {"crc", crc, "[crc]", "--crc test"}, - {"dma", dma_ram, "[dma_ram]", "--dma_ram test"}, - {"key", key, "[key]", "--key test"}, - {"key_int", key_int, "[key]", "--key int test"}, - {"adc_single", adc_single_test, "[adc]", "--adc single test"}, - {"adc_regular", regular_test, "[adc]", "--adc regular test"}, - {"atim_int", atim_int, "[tim]", "--atim int test"}, - {"btim_int", btim_int, "[tim]", "--btim int test"}, - {"tim_test", tim_test, "[tim]", "--tim"}, - {"spinit", myspi_init, "[spi]", "--spi_init"}, - {"sperase", spi_erase, "[spi]", "--spi_init"}, - {"spw", spi_dma_write, "[spi]", "--spi_dma_write"}, - {"spr", spi_dma_read, "[spi]", "--spi_dma_read"}, - {"sflash", spi_flash, "[spi_flash]", "--v1"}, - {"adc_tim_int", tim_int, "[tim]", "--adc tim int test"}, - {"adc_tim", adc_tim_test, "[adc]", "--adc tim test"}, - {"u1init", uart1_init , "[uart1]", "--uart1_init"}, - {"u1tx", uart1_dma_tx , "[uart1]", "--uart1_dma_tx"}, - {"u1rx", uart1_dma_rx , "[uart1]", "--uart1_dma_rx"}, - {"i2cinit", i2c_init, "[i2c]", "--i2c_init"}, - {"i2crec", i2c_recover, "[i2c]", "--i2c_recover"}, - {"i2cw", i2c_wr, "[i2c]", "--i2cw"}, - {"i2cm", i2c_wr_master, "[i2c]", "--i2cr"}, - {"i2cs", i2c_wr_slaver, "[i2c]", "--i2cr"}, - {"i2cr", i2c_rd, "[i2c]", "--i2cr"}, - {"copy", copy, "[copy]", "--batdet "}, - {"copy_iram", copy_iram, "[copy]", "--batdet "}, - {"delay", delay, "[latimer]", "--latimer"}, - {"latimer", latimer, "[core timer test]", "--v1"}, - {"date", date, "[rtc test]", "--v1"}, - {"wakeup", wakeup, "[wakeup test]", "--v1"}, - {"ry", ry, "[ymodem]", "--v1"}, - {"t", tmp, "[tmp]", "--v1"}, - {"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 \n\r"); - break; - } - return 0; -} - -int cmdline(void) -{ - - TIM6_timebase(); - INT_EN = 0x0; - 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(); - //printf("%x",c); - if((c>0x1f)&&(c<0x7f)) - { - if(h > 0) - { - for(i=0; i=0; i--) - { - putchar(cmdbuffer[cp-i]); - } - for(i=0; i0; 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; i0 ; 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