diff --git a/bsp/essemi/es32f0654/drivers/board.c b/bsp/essemi/es32f0654/drivers/board.c index 74111683240cbdec523d6fdf047172070de7fed3..1719d06e20d0cecd5aab55da5207c728ac565910 100644 --- a/bsp/essemi/es32f0654/drivers/board.c +++ b/bsp/essemi/es32f0654/drivers/board.c @@ -127,6 +127,8 @@ void SysTick_Configuration(void) { /* ticks = sysclk / RT_TICK_PER_SECOND */ SysTick_Config(ald_cmu_get_sys_clock() / RT_TICK_PER_SECOND); + + __systick_interval = 1; } /** diff --git a/bsp/essemi/es32f0654/drivers/bsp_driver_example/i2c_sample.c b/bsp/essemi/es32f0654/drivers/bsp_driver_example/i2c_sample.c index c8a666609dc7a682b09719fdc43f93f901743346..92a96b2e85148e9caab66b05dae22fcb477ff7e2 100644 --- a/bsp/essemi/es32f0654/drivers/bsp_driver_example/i2c_sample.c +++ b/bsp/essemi/es32f0654/drivers/bsp_driver_example/i2c_sample.c @@ -64,8 +64,6 @@ static void i2c_io_sample(int argc, char *argv[]) temp_msg.flags = RT_I2C_RD; /* I2C读 */ s_stat = rt_i2c_transfer(i2c_bus,&temp_msg,num_msg); /* 传输消息 */ - rt_thread_mdelay(400); - if( s_stat == num_msg ) { rt_kprintf("receive successful. \n receive messege : %s \n:",buffer); @@ -87,8 +85,6 @@ static void i2c_io_sample(int argc, char *argv[]) temp_msg.flags = RT_I2C_WR; /* I2C写 */ s_stat = rt_i2c_transfer(i2c_bus,&temp_msg,num_msg); /* 传输一条 */ - rt_thread_mdelay(400); - if( s_stat == num_msg ) { rt_kprintf(" send successful \n messege : %s \n:",buffer); diff --git a/bsp/essemi/es32f0654/drivers/bsp_driver_example/led_blink_sample.c b/bsp/essemi/es32f0654/drivers/bsp_driver_example/led_blink_sample.c index 42c956a0602719b829d754037e11d491632c4bc4..fb5a98a2798ebd077dacc9b01bce78d0c8d8d6e0 100644 --- a/bsp/essemi/es32f0654/drivers/bsp_driver_example/led_blink_sample.c +++ b/bsp/essemi/es32f0654/drivers/bsp_driver_example/led_blink_sample.c @@ -19,9 +19,10 @@ #include #include #include +#include "drv_gpio.h" /* PIN脚编号,查看驱动文件drv_gpio.c确定 */ -#define LED_PIN_NUM 40 /*PB9*/ +#define LED_PIN_NUM GET_PIN(B,9) /*PB9*/ static int pin_num; static void led_entry(void *parameter) diff --git a/bsp/essemi/es32f0654/drivers/bsp_driver_example/pin_beep_sample.c b/bsp/essemi/es32f0654/drivers/bsp_driver_example/pin_beep_sample.c index 29dfbe1b2ff1fd3f7bb847afb4408fabeec62068..03e6b14ba12c2d568247760c671c095b65aa7d04 100644 --- a/bsp/essemi/es32f0654/drivers/bsp_driver_example/pin_beep_sample.c +++ b/bsp/essemi/es32f0654/drivers/bsp_driver_example/pin_beep_sample.c @@ -16,16 +16,17 @@ #include #include +#include "drv_gpio.h" /* 引脚编号,通过查看驱动文件drv_gpio.c确定 */ #ifndef BEEP_PIN_NUM - #define BEEP_PIN_NUM 40 /* PB9 */ + #define BEEP_PIN_NUM GET_PIN(B,9) /* PB9 */ #endif #ifndef KEY0_PIN_NUM - #define KEY0_PIN_NUM 18 /* PF0 */ + #define KEY0_PIN_NUM GET_PIN(F,0) /* PF0 */ #endif #ifndef KEY1_PIN_NUM - #define KEY1_PIN_NUM 19 /* PF1 */ + #define KEY1_PIN_NUM GET_PIN(F,1) /* PF1 */ #endif void beep_on(void *args) diff --git a/bsp/essemi/es32f0654/drivers/bsp_driver_example/pm_sample.c b/bsp/essemi/es32f0654/drivers/bsp_driver_example/pm_sample.c index 78358e421c9af8a7e3c19cb1c2695a9767ec7774..d960bdd13952fc95606146d4a0530c3dde829108 100644 --- a/bsp/essemi/es32f0654/drivers/bsp_driver_example/pm_sample.c +++ b/bsp/essemi/es32f0654/drivers/bsp_driver_example/pm_sample.c @@ -30,11 +30,12 @@ #include #include +#include "drv_gpio.h" #ifdef RT_USING_PM #define PM_NAME "pm" /* 设备名称 */ -#define WAKE_UP_PIN 19 /* 唤醒源 */ +#define WAKE_UP_PIN GET_PIN(F,0) /* 唤醒源 */ #define SLEEP_TIMES 12 /* 进入睡眠次数,轮流进入不同的睡眠模式,包括无睡眠模式 */ diff --git a/bsp/essemi/es32f0654/drivers/bsp_driver_example/pwm_led_sample.c b/bsp/essemi/es32f0654/drivers/bsp_driver_example/pwm_led_sample.c index 23ecfd227e3176ba8b54931ec5780e024089e1b8..c2a0ed8feea885a8782b29d431207c1caa837ae7 100644 --- a/bsp/essemi/es32f0654/drivers/bsp_driver_example/pwm_led_sample.c +++ b/bsp/essemi/es32f0654/drivers/bsp_driver_example/pwm_led_sample.c @@ -16,13 +16,13 @@ #include #include - +#include "drv_gpio.h" #ifdef RT_USING_PWM -#define LED_PIN_NUM 16 /* LED PIN脚编号,查看驱动文件drv_gpio.c确定 */ +#define LED_PIN_NUM GET_PIN(A,2) /* LED PIN脚编号,查看驱动文件drv_gpio.c确定 */ #define PWM_DEV_NAME "pwm1" /* PWM设备名称 */ -#define PWM_DEV_CHANNEL 1 /* PA8 PWM通道 */ +#define PWM_DEV_CHANNEL 1 /* PWM通道 */ struct rt_device_pwm *pwm_dev; /* PWM设备句柄 */ diff --git a/bsp/essemi/es32f0654/drivers/bsp_driver_example/uart_sample.c b/bsp/essemi/es32f0654/drivers/bsp_driver_example/uart_sample.c index cb750efe6e85bb6df03a93deaa052189112c2491..efd893de213bbb03a912a79ed727853f50a933d2 100644 --- a/bsp/essemi/es32f0654/drivers/bsp_driver_example/uart_sample.c +++ b/bsp/essemi/es32f0654/drivers/bsp_driver_example/uart_sample.c @@ -12,16 +12,28 @@ * 例程导出了 uart_sample 命令到控制终端 * 命令调用格式:uart_sample uart2 * 命令解释:命令第二个参数是要使用的串口设备名称,为空则使用默认的串口设备 - * 程序功能:通过串口输出字符串"hello RT-Thread!",然后错位输出输入的字符 + * 程序功能:通过串口输出字符串"hello RT-Thread!",然后根据例子类型,处理输入数据,然后输出 */ #include -#define SAMPLE_UART_NAME "uart2" /* 串口设备名称 */ +/* UART_SAMPLE_TYPE = 1,错位输出 + = 2 接收到固定格式之后输出 +*/ +#define UART_SAMPLE_TYPE 1 + +#if (UART_SAMPLE_TYPE == 2) + +#define SAMPLE_UART_RXBUF_SIZE 256 /* 接收缓存大小 */ +#define SAMPLE_UART_END_SRTING "\r\n" /* 结尾固定格式 */ + +#endif + +#define SAMPLE_UART_NAME "uart0" /* 串口设备名称 */ /* 用于接收消息的信号量 */ static struct rt_semaphore rx_sem; -static rt_device_t serial; +static rt_device_t serial; /* 接收数据回调函数 */ static rt_err_t uart_input(rt_device_t dev, rt_size_t size) @@ -33,7 +45,8 @@ static rt_err_t uart_input(rt_device_t dev, rt_size_t size) } static void serial_thread_entry(void *parameter) -{ +{ +#if (UART_SAMPLE_TYPE == 1) char ch; while (1) @@ -48,6 +61,42 @@ static void serial_thread_entry(void *parameter) ch = ch + 1; rt_device_write(serial, 0, &ch, 1); } +#endif + +#if (UART_SAMPLE_TYPE == 2) + char rx_buf[SAMPLE_UART_RXBUF_SIZE],*end = SAMPLE_UART_END_SRTING; /*rx_buf[]:接收缓存,可修改大小 end[]:固定的结束格式(可修改,不可包含'\0')*/ + uint32_t rx_index = 0; /*接收数据的索引 */ + uint32_t end_len = rt_strlen(end); /*固定的结束格式的长度*/ + + while(1) + { + + /* 从串口读取一个字节的数据,没有读取到则等待接收信号量 */ + while (rt_device_read(serial, -1, (rx_buf + rx_index), 1) != 1) + { + /* 阻塞等待接收信号量,等到信号量后再次读取数据 */ + rt_sem_take(&rx_sem, RT_WAITING_FOREVER); + } + + rx_index++; + if(rx_index >= SAMPLE_UART_RXBUF_SIZE) + { + rt_kprintf("rx_buf over!\r\n"); /*范围越界*/ + } + + /*判断是否固定的结尾格式*/ + if((rx_index >= end_len)&&\ + ((rt_strncmp(end,(rx_buf + rx_index - end_len),end_len)) == 0)) + { + rt_device_write(serial, 0, rx_buf, rx_index); + rx_index = 0; + } + + } + + +#endif + } static int uart_sample(int argc, char *argv[]) diff --git a/bsp/essemi/es32f0654/drivers/drv_can.c b/bsp/essemi/es32f0654/drivers/drv_can.c index 7c73acd0cfc8fc19cad15830f7d10614b762be86..cf2d9d66d12077e641c86c71222bfc11f8a50ad8 100644 --- a/bsp/essemi/es32f0654/drivers/drv_can.c +++ b/bsp/essemi/es32f0654/drivers/drv_can.c @@ -418,14 +418,14 @@ static int _can_sendmsg(struct rt_can_device *can, const void *buf, rt_uint32_t } /* clear TIR */ h_can->perh->TxMailBox[box_num].TXID &= CAN_TXID0_TXMREQ_MSK; - /* Set up the Id */ + /* Set up the Id */ if (RT_CAN_STDID == pmsg->ide) - { - h_can->perh->TxMailBox[box_num].TXID |= (txheader.std << CAN_TXID0_STDID_POSS) | txheader.rtr; + { + h_can->perh->TxMailBox[box_num].TXID |= (txheader.std << CAN_TXID0_STDID_POSS) | (txheader.rtr << CAN_TXID0_RTR_POS); } else { - h_can->perh->TxMailBox[box_num].TXID |= (txheader.ext << CAN_TXID0_EXID_POSS) | txheader.type | txheader.rtr; + h_can->perh->TxMailBox[box_num].TXID |= (txheader.ext << CAN_TXID0_EXID_POSS) | (txheader.type << CAN_TXID0_IDE_POS) | (txheader.rtr << CAN_TXID0_RTR_POS); } /* Set up the DLC */ h_can->perh->TxMailBox[box_num].TXFCON = pmsg->len & 0x0FU; diff --git a/bsp/essemi/es32f0654/drivers/drv_gpio.c b/bsp/essemi/es32f0654/drivers/drv_gpio.c index 00050866e592d138e49defe6e634d4b08fb00096..994b26ad94b2dc37a915b6769bcbba6d61edc6a1 100644 --- a/bsp/essemi/es32f0654/drivers/drv_gpio.c +++ b/bsp/essemi/es32f0654/drivers/drv_gpio.c @@ -314,12 +314,18 @@ void es32f0_pin_mode(rt_device_t dev, rt_base_t pin, rt_base_t mode) rt_inline const struct pin_irq_map *get_pin_irq_map(rt_uint16_t gpio_pin) { - rt_int32_t mapindex = gpio_pin & 0x00FF; - if (mapindex < 0 || mapindex >= ITEM_NUM(pin_irq_map)) + uint8_t map_index = 0U; + + while(gpio_pin >> (++map_index)) + { + } + map_index--; + + if (map_index >= ITEM_NUM(pin_irq_map)) { return RT_NULL; } - return &pin_irq_map[mapindex]; + return &pin_irq_map[map_index]; }; rt_err_t es32f0_pin_attach_irq(struct rt_device *device, rt_int32_t pin, diff --git a/bsp/essemi/es32f0654/drivers/drv_gpio.h b/bsp/essemi/es32f0654/drivers/drv_gpio.h index b0b68714d35fccd81cd9f519d9402ec3d98459f9..21f564f93710dbb25ed86042de91504c50e0934f 100644 --- a/bsp/essemi/es32f0654/drivers/drv_gpio.h +++ b/bsp/essemi/es32f0654/drivers/drv_gpio.h @@ -26,6 +26,8 @@ #include "es_conf_info_gpio.h" +#define GET_PIN(port,pin) (ES_PIN_GPIO_##port##_##pin) + int rt_hw_pin_init(void); #endif diff --git a/bsp/essemi/es32f0654/drivers/drv_i2c.c b/bsp/essemi/es32f0654/drivers/drv_i2c.c index 1109b7f641714e2f5ce7f7adee1138d0d5be5d70..911f3166879ae3e95fb870fdbc7d8ef6cd92701d 100644 --- a/bsp/essemi/es32f0654/drivers/drv_i2c.c +++ b/bsp/essemi/es32f0654/drivers/drv_i2c.c @@ -81,9 +81,9 @@ static void _i2c_init(void) #ifdef BSP_USING_I2C1 -#if defined(ES_I2C1_SDA_GPIO_FUNC)&&defined(ES_I2C1_SDA_GPIO_PORT)&&defined(ES_I2C1_SDA_GPIO_PIN) - gpio_instruct.func = ES_I2C1_SDA_GPIO_FUNC; - ald_gpio_init(ES_I2C1_SDA_GPIO_PORT, ES_I2C1_SDA_GPIO_PIN, &gpio_instruct); +#if defined(ES_I2C1_SCL_GPIO_FUNC)&&defined(ES_I2C1_SCL_GPIO_PORT)&&defined(ES_I2C1_SCL_GPIO_PIN) + gpio_instruct.func = ES_I2C1_SCL_GPIO_FUNC; + ald_gpio_init(ES_I2C1_SCL_GPIO_PORT, ES_I2C1_SCL_GPIO_PIN, &gpio_instruct); #endif #if defined(ES_I2C1_SDA_GPIO_FUNC)&&defined(ES_I2C1_SDA_GPIO_PORT)&&defined(ES_I2C1_SDA_GPIO_PIN) diff --git a/bsp/essemi/es32f369x/drivers/board.c b/bsp/essemi/es32f369x/drivers/board.c index ea42df63dc0f40aa980feac2d20f8627c532ff99..ae52cbf5dca6b91ee1cdafef9c5f8ff49be5edae 100644 --- a/bsp/essemi/es32f369x/drivers/board.c +++ b/bsp/essemi/es32f369x/drivers/board.c @@ -129,6 +129,8 @@ void SysTick_Configuration(void) { /* ticks = sysclk / RT_TICK_PER_SECOND */ SysTick_Config(ald_cmu_get_sys_clock() / RT_TICK_PER_SECOND); + + __systick_interval = 1; } /** diff --git a/bsp/essemi/es32f369x/drivers/bsp_driver_example/i2c_sample.c b/bsp/essemi/es32f369x/drivers/bsp_driver_example/i2c_sample.c index c8a666609dc7a682b09719fdc43f93f901743346..92a96b2e85148e9caab66b05dae22fcb477ff7e2 100644 --- a/bsp/essemi/es32f369x/drivers/bsp_driver_example/i2c_sample.c +++ b/bsp/essemi/es32f369x/drivers/bsp_driver_example/i2c_sample.c @@ -64,8 +64,6 @@ static void i2c_io_sample(int argc, char *argv[]) temp_msg.flags = RT_I2C_RD; /* I2C读 */ s_stat = rt_i2c_transfer(i2c_bus,&temp_msg,num_msg); /* 传输消息 */ - rt_thread_mdelay(400); - if( s_stat == num_msg ) { rt_kprintf("receive successful. \n receive messege : %s \n:",buffer); @@ -87,8 +85,6 @@ static void i2c_io_sample(int argc, char *argv[]) temp_msg.flags = RT_I2C_WR; /* I2C写 */ s_stat = rt_i2c_transfer(i2c_bus,&temp_msg,num_msg); /* 传输一条 */ - rt_thread_mdelay(400); - if( s_stat == num_msg ) { rt_kprintf(" send successful \n messege : %s \n:",buffer); diff --git a/bsp/essemi/es32f369x/drivers/bsp_driver_example/led_blink_sample.c b/bsp/essemi/es32f369x/drivers/bsp_driver_example/led_blink_sample.c index f1c9901ad05ed7fd866ba88c77b2fe025873648f..6d75105695fde862e09325c85166f977a5b3dc60 100644 --- a/bsp/essemi/es32f369x/drivers/bsp_driver_example/led_blink_sample.c +++ b/bsp/essemi/es32f369x/drivers/bsp_driver_example/led_blink_sample.c @@ -18,10 +18,11 @@ #include #include -#include +#include +#include "drv_gpio.h" /* PIN脚编号,查看驱动文件drv_gpio.c确定 */ -#define LED_PIN_NUM 19 /*PF1*/ +#define LED_PIN_NUM GET_PIN( F , 1 ) static int pin_num; static void led_entry(void *parameter) diff --git a/bsp/essemi/es32f369x/drivers/bsp_driver_example/pin_beep_sample.c b/bsp/essemi/es32f369x/drivers/bsp_driver_example/pin_beep_sample.c index 58a7bf189150368d8267d3533ddcc01e8700f37c..9cf9ef81e8f22cf752ff2e4c5baa324567791d73 100644 --- a/bsp/essemi/es32f369x/drivers/bsp_driver_example/pin_beep_sample.c +++ b/bsp/essemi/es32f369x/drivers/bsp_driver_example/pin_beep_sample.c @@ -15,17 +15,18 @@ */ #include -#include +#include +#include "drv_gpio.h" /* 引脚编号,通过查看驱动文件drv_gpio.c确定 */ #ifndef BEEP_PIN_NUM - #define BEEP_PIN_NUM 19 /* PF1 */ + #define BEEP_PIN_NUM GET_PIN( F , 1 ) #endif #ifndef KEY0_PIN_NUM - #define KEY0_PIN_NUM 52 /* PC11 */ + #define KEY0_PIN_NUM GET_PIN( C , 11 ) #endif #ifndef KEY1_PIN_NUM - #define KEY1_PIN_NUM 53 /* PC12 */ + #define KEY1_PIN_NUM GET_PIN( C , 12 ) #endif void beep_on(void *args) diff --git a/bsp/essemi/es32f369x/drivers/bsp_driver_example/pm_sample.c b/bsp/essemi/es32f369x/drivers/bsp_driver_example/pm_sample.c index 731dca4115cf9ea5152df8701e75aac979a2b6ea..fb4b78d73156712a96fb25b1d7a4f51b68c3fdaa 100644 --- a/bsp/essemi/es32f369x/drivers/bsp_driver_example/pm_sample.c +++ b/bsp/essemi/es32f369x/drivers/bsp_driver_example/pm_sample.c @@ -30,15 +30,14 @@ #include #include -#include "drv_pm.h" -#include "ald_gpio.h" - +#include "drv_pm.h" +#include "drv_gpio.h" #ifdef RT_USING_PM -#define PM_NAME "pm" /* 设备名称 */ -#define WAKE_UP_PIN 51 /* 唤醒源 */ -#define SLEEP_TIMES 12 /* 进入睡眠次数,轮流进入不同的睡眠模式,包括无睡眠模式 */ +#define PM_NAME "pm" /* 设备名称 */ +#define WAKE_UP_PIN GET_PIN( C , 10 ) /* 唤醒源 */ +#define SLEEP_TIMES 12 /* 进入睡眠次数,轮流进入不同的睡眠模式,包括无睡眠模式 */ /*部分芯片进入深度睡眠后,部分外设的部分寄存器可能会丢失*/ #define SAVE_REG UART0 diff --git a/bsp/essemi/es32f369x/drivers/bsp_driver_example/pwm_led_sample.c b/bsp/essemi/es32f369x/drivers/bsp_driver_example/pwm_led_sample.c index 8d12b74e154a951fed7032aadc5af870953a3052..51cedd49ebee27eb467c3c880869a1a14b3d9bf5 100644 --- a/bsp/essemi/es32f369x/drivers/bsp_driver_example/pwm_led_sample.c +++ b/bsp/essemi/es32f369x/drivers/bsp_driver_example/pwm_led_sample.c @@ -16,13 +16,13 @@ #include #include - +#include "drv_gpio.h" #ifdef RT_USING_PWM -#define LED_PIN_NUM 37 /* PF1 LED PIN脚编号,查看驱动文件drv_gpio.c确定 */ -#define PWM_DEV_NAME "pwm1" /* PWM设备名称 */ -#define PWM_DEV_CHANNEL 1 /* PWM通道 */ +#define LED_PIN_NUM GET_PIN( C , 6 ) /* LED PIN脚编号,查看驱动文件drv_gpio.c确定 */ +#define PWM_DEV_NAME "pwm1" /* PWM设备名称 */ +#define PWM_DEV_CHANNEL 1 /* PWM通道 */ struct rt_device_pwm *pwm_dev; /* PWM设备句柄 */ diff --git a/bsp/essemi/es32f369x/drivers/bsp_driver_example/uart_sample.c b/bsp/essemi/es32f369x/drivers/bsp_driver_example/uart_sample.c index e059df32bb23908edf252cef4efeaa316d6a840b..2094a6576efd09a198e6a6d6353386bc572f19e8 100644 --- a/bsp/essemi/es32f369x/drivers/bsp_driver_example/uart_sample.c +++ b/bsp/essemi/es32f369x/drivers/bsp_driver_example/uart_sample.c @@ -12,16 +12,28 @@ * 例程导出了 uart_sample 命令到控制终端 * 命令调用格式:uart_sample uart2 * 命令解释:命令第二个参数是要使用的串口设备名称,为空则使用默认的串口设备 - * 程序功能:通过串口输出字符串"hello RT-Thread!",然后错位输出输入的字符 + * 程序功能:通过串口输出字符串"hello RT-Thread!",然后根据例子类型,处理输入数据,然后输出 */ #include -#define SAMPLE_UART_NAME "uart0" /* 串口设备名称 */ +/* UART_SAMPLE_TYPE = 1,错位输出 + = 2 接收到固定格式之后输出 +*/ +#define UART_SAMPLE_TYPE 1 + +#if (UART_SAMPLE_TYPE == 2) + +#define SAMPLE_UART_RXBUF_SIZE 256 /* 接收缓存大小 */ +#define SAMPLE_UART_END_SRTING "\r\n" /* 结尾固定格式 */ + +#endif + +#define SAMPLE_UART_NAME "uart1" /* 串口设备名称 */ /* 用于接收消息的信号量 */ static struct rt_semaphore rx_sem; -static rt_device_t serial; +static rt_device_t serial; /* 接收数据回调函数 */ static rt_err_t uart_input(rt_device_t dev, rt_size_t size) @@ -33,7 +45,8 @@ static rt_err_t uart_input(rt_device_t dev, rt_size_t size) } static void serial_thread_entry(void *parameter) -{ +{ +#if (UART_SAMPLE_TYPE == 1) char ch; while (1) @@ -48,6 +61,42 @@ static void serial_thread_entry(void *parameter) ch = ch + 1; rt_device_write(serial, 0, &ch, 1); } +#endif + +#if (UART_SAMPLE_TYPE == 2) + char rx_buf[SAMPLE_UART_RXBUF_SIZE],*end = SAMPLE_UART_END_SRTING; /*rx_buf[]:接收缓存,可修改大小 end[]:固定的结束格式(可修改,不可包含'\0')*/ + uint32_t rx_index = 0; /*接收数据的索引 */ + uint32_t end_len = rt_strlen(end); /*固定的结束格式的长度*/ + + while(1) + { + + /* 从串口读取一个字节的数据,没有读取到则等待接收信号量 */ + while (rt_device_read(serial, -1, (rx_buf + rx_index), 1) != 1) + { + /* 阻塞等待接收信号量,等到信号量后再次读取数据 */ + rt_sem_take(&rx_sem, RT_WAITING_FOREVER); + } + + rx_index++; + if(rx_index >= SAMPLE_UART_RXBUF_SIZE) + { + rt_kprintf("rx_buf over!\r\n"); /*范围越界*/ + } + + /*判断是否固定的结尾格式*/ + if((rx_index >= end_len)&&\ + ((rt_strncmp(end,(rx_buf + rx_index - end_len),end_len)) == 0)) + { + rt_device_write(serial, 0, rx_buf, rx_index); + rx_index = 0; + } + + } + + +#endif + } static int uart_sample(int argc, char *argv[]) diff --git a/bsp/essemi/es32f369x/drivers/drv_adc.c b/bsp/essemi/es32f369x/drivers/drv_adc.c index 716fddcfa4cd6f46417e4981bd4b7ba2640ea28e..91bf56ef388b78280d16d6ce5e7d4c974cd2cd3f 100644 --- a/bsp/essemi/es32f369x/drivers/drv_adc.c +++ b/bsp/essemi/es32f369x/drivers/drv_adc.c @@ -68,8 +68,8 @@ static adc_channel_t es32f3_adc_get_channel(rt_uint32_t channel) gpio_initstruct.mode = GPIO_MODE_INPUT; gpio_initstruct.pupd = GPIO_FLOATING; gpio_initstruct.odos = GPIO_OPEN_DRAIN; - gpio_initstruct.podrv = GPIO_OUT_DRIVE_1; - gpio_initstruct.nodrv = GPIO_OUT_DRIVE_1; + gpio_initstruct.podrv = GPIO_OUT_DRIVE_6; + gpio_initstruct.nodrv = GPIO_OUT_DRIVE_6; gpio_initstruct.flt = GPIO_FILTER_DISABLE; gpio_initstruct.type = GPIO_TYPE_CMOS; gpio_initstruct.func = GPIO_FUNC_0; diff --git a/bsp/essemi/es32f369x/drivers/drv_can.c b/bsp/essemi/es32f369x/drivers/drv_can.c index 6e7456b9b6f742f0a334f74e33d4d575597ea7a3..48c462c5f186ec333d5cd742c871d2bb0c354d7b 100644 --- a/bsp/essemi/es32f369x/drivers/drv_can.c +++ b/bsp/essemi/es32f369x/drivers/drv_can.c @@ -413,14 +413,14 @@ static int _can_sendmsg(struct rt_can_device *can, const void *buf, rt_uint32_t /* clear TIR */ h_can->perh->TxMailBox[box_num].TXID &= CAN_TXID0_TXMREQ_MSK; - /* Set up the Id */ + /* Set up the Id */ if (RT_CAN_STDID == pmsg->ide) - { - h_can->perh->TxMailBox[box_num].TXID |= (txheader.std << CAN_TXID0_STDID_POSS) | txheader.rtr; + { + h_can->perh->TxMailBox[box_num].TXID |= (txheader.std << CAN_TXID0_STDID_POSS) | (txheader.rtr << CAN_TXID0_RTR_POS); } else { - h_can->perh->TxMailBox[box_num].TXID |= (txheader.ext << CAN_TXID0_EXID_POSS) | txheader.type | txheader.rtr; + h_can->perh->TxMailBox[box_num].TXID |= (txheader.ext << CAN_TXID0_EXID_POSS) | (txheader.type << CAN_TXID0_IDE_POS) | (txheader.rtr << CAN_TXID0_RTR_POS); } /* Set up the DLC */ h_can->perh->TxMailBox[box_num].TXFCON = pmsg->len & 0x0FU; diff --git a/bsp/essemi/es32f369x/drivers/drv_gpio.c b/bsp/essemi/es32f369x/drivers/drv_gpio.c index 8ce6ab7aa8ef886a72a4160cb2fb675f878aede6..24621e117aeca7d8422df31faa75b2df3bee1848 100644 --- a/bsp/essemi/es32f369x/drivers/drv_gpio.c +++ b/bsp/essemi/es32f369x/drivers/drv_gpio.c @@ -274,8 +274,8 @@ void es32f3_pin_mode(rt_device_t dev, rt_base_t pin, rt_base_t mode) /* Configure GPIO_InitStructure */ gpio_initstruct.mode = GPIO_MODE_OUTPUT; gpio_initstruct.func = GPIO_FUNC_1; - gpio_initstruct.podrv = GPIO_OUT_DRIVE_1; - gpio_initstruct.nodrv = GPIO_OUT_DRIVE_0_1; + gpio_initstruct.podrv = GPIO_OUT_DRIVE_6; + gpio_initstruct.nodrv = GPIO_OUT_DRIVE_6; gpio_initstruct.type = GPIO_TYPE_CMOS; gpio_initstruct.odos = GPIO_PUSH_PULL; gpio_initstruct.flt = GPIO_FILTER_DISABLE; @@ -316,12 +316,18 @@ void es32f3_pin_mode(rt_device_t dev, rt_base_t pin, rt_base_t mode) rt_inline const struct pin_irq_map *get_pin_irq_map(rt_uint16_t gpio_pin) { - rt_int32_t mapindex = gpio_pin & 0x00FF; - if (mapindex < 0 || mapindex >= ITEM_NUM(pin_irq_map)) + uint8_t map_index = 0U; + + while(gpio_pin >> (++map_index)) + { + } + map_index--; + + if (map_index >= ITEM_NUM(pin_irq_map)) { return RT_NULL; } - return &pin_irq_map[mapindex]; + return &pin_irq_map[map_index]; }; rt_err_t es32f3_pin_attach_irq(struct rt_device *device, rt_int32_t pin, @@ -442,8 +448,8 @@ rt_err_t es32f3_pin_irq_enable(struct rt_device *device, rt_base_t pin, /* Configure GPIO_InitStructure */ gpio_initstruct.mode = GPIO_MODE_INPUT; gpio_initstruct.odos = GPIO_PUSH_PULL; - gpio_initstruct.podrv = GPIO_OUT_DRIVE_1; - gpio_initstruct.nodrv = GPIO_OUT_DRIVE_1; + gpio_initstruct.podrv = GPIO_OUT_DRIVE_6; + gpio_initstruct.nodrv = GPIO_OUT_DRIVE_6; gpio_initstruct.func = GPIO_FUNC_1; gpio_initstruct.flt = GPIO_FILTER_DISABLE; switch (pin_irq_hdr_tab[irqindex].mode) diff --git a/bsp/essemi/es32f369x/drivers/drv_gpio.h b/bsp/essemi/es32f369x/drivers/drv_gpio.h index 8489e625d55b63ad62ab45bb5d11b19ef7900b92..efb5f27f7ecf1eddd066a0380ec7d6f06d86ea61 100644 --- a/bsp/essemi/es32f369x/drivers/drv_gpio.h +++ b/bsp/essemi/es32f369x/drivers/drv_gpio.h @@ -25,6 +25,8 @@ #define DRV_GPIO_H__ #include "es_conf_info_gpio.h" + +#define GET_PIN(port,pin) (ES_PIN_GPIO_##port##_##pin) int rt_hw_pin_init(void); diff --git a/bsp/essemi/es32f369x/drivers/drv_i2c.c b/bsp/essemi/es32f369x/drivers/drv_i2c.c index c398d5ab45d130c6fbbc7ea63474e4220e0ca7fd..01d4404606a53a58f4784bd1ffaf845921f5f3f1 100644 --- a/bsp/essemi/es32f369x/drivers/drv_i2c.c +++ b/bsp/essemi/es32f369x/drivers/drv_i2c.c @@ -49,8 +49,8 @@ static void _i2c_init(void) gpio_instruct.mode = GPIO_MODE_OUTPUT; gpio_instruct.odos = GPIO_OPEN_DRAIN; gpio_instruct.pupd = GPIO_PUSH_UP; - gpio_instruct.podrv = GPIO_OUT_DRIVE_1; - gpio_instruct.nodrv = GPIO_OUT_DRIVE_0_1; + gpio_instruct.podrv = GPIO_OUT_DRIVE_6; + gpio_instruct.nodrv = GPIO_OUT_DRIVE_6; gpio_instruct.flt = GPIO_FILTER_DISABLE; gpio_instruct.type = GPIO_TYPE_CMOS; @@ -83,9 +83,9 @@ static void _i2c_init(void) #ifdef BSP_USING_I2C1 -#if defined(ES_I2C1_SDA_GPIO_FUNC)&&defined(ES_I2C1_SDA_GPIO_PORT)&&defined(ES_I2C1_SDA_GPIO_PIN) - gpio_instruct.func = ES_I2C1_SDA_GPIO_FUNC; - ald_gpio_init(ES_I2C1_SDA_GPIO_PORT, ES_I2C1_SDA_GPIO_PIN, &gpio_instruct); +#if defined(ES_I2C1_SCL_GPIO_FUNC)&&defined(ES_I2C1_SCL_GPIO_PORT)&&defined(ES_I2C1_SCL_GPIO_PIN) + gpio_instruct.func = ES_I2C1_SCL_GPIO_FUNC; + ald_gpio_init(ES_I2C1_SCL_GPIO_PORT, ES_I2C1_SCL_GPIO_PIN, &gpio_instruct); #endif #if defined(ES_I2C1_SDA_GPIO_FUNC)&&defined(ES_I2C1_SDA_GPIO_PORT)&&defined(ES_I2C1_SDA_GPIO_PIN) diff --git a/bsp/essemi/es32f369x/drivers/drv_spi.c b/bsp/essemi/es32f369x/drivers/drv_spi.c index aae178f78e668c8ebcaf20cc6ec3e70ec70b380c..f777645a56678b1b4a7e5a813d23ab2e3dc2e6d7 100644 --- a/bsp/essemi/es32f369x/drivers/drv_spi.c +++ b/bsp/essemi/es32f369x/drivers/drv_spi.c @@ -283,8 +283,8 @@ int rt_hw_spi_init(void) gpio_instruct.pupd = GPIO_PUSH_UP_DOWN; gpio_instruct.odos = GPIO_PUSH_PULL; - gpio_instruct.podrv = GPIO_OUT_DRIVE_1; - gpio_instruct.nodrv = GPIO_OUT_DRIVE_1; + gpio_instruct.podrv = GPIO_OUT_DRIVE_6; + gpio_instruct.nodrv = GPIO_OUT_DRIVE_6; gpio_instruct.type = GPIO_TYPE_TTL; gpio_instruct.flt = GPIO_FILTER_DISABLE; diff --git a/bsp/essemi/es32f369x/drivers/drv_uart.c b/bsp/essemi/es32f369x/drivers/drv_uart.c index 5ca5085c54abc8a50c94ebac22781804a32f7d48..f964f6f82dbca553ce1073f7f2f0b89810e13e4b 100644 --- a/bsp/essemi/es32f369x/drivers/drv_uart.c +++ b/bsp/essemi/es32f369x/drivers/drv_uart.c @@ -198,8 +198,8 @@ static rt_err_t es32f3x_configure(struct rt_serial_device *serial, struct serial gpio_initstructure.mode = GPIO_MODE_OUTPUT; gpio_initstructure.odos = GPIO_PUSH_PULL; gpio_initstructure.pupd = GPIO_PUSH_UP; - gpio_initstructure.podrv = GPIO_OUT_DRIVE_1; - gpio_initstructure.nodrv = GPIO_OUT_DRIVE_1; + gpio_initstructure.podrv = GPIO_OUT_DRIVE_6; + gpio_initstructure.nodrv = GPIO_OUT_DRIVE_6; gpio_initstructure.flt = GPIO_FILTER_DISABLE; gpio_initstructure.type = GPIO_TYPE_TTL;