fix bumblebee irq entry aligment, fix eclic
This commit is contained in:
@@ -75,13 +75,13 @@ static void eclic_set_irq_level(uint32_t source, uint8_t level) {
|
||||
return ;
|
||||
}
|
||||
|
||||
uint8_t intctrl_val = eclic_get_intctrl(CLIC_INT_TMR);
|
||||
uint8_t intctrl_val = eclic_get_intctrl(source);
|
||||
|
||||
intctrl_val <<= nlbits;
|
||||
intctrl_val >>= nlbits;
|
||||
intctrl_val |= (level << (8- nlbits));
|
||||
|
||||
eclic_set_intctrl(CLIC_INT_TMR, intctrl_val);
|
||||
eclic_set_intctrl(source, intctrl_val);
|
||||
}
|
||||
|
||||
static void eclic_set_irq_priority(uint32_t source, uint8_t priority) {
|
||||
@@ -98,29 +98,34 @@ static void eclic_set_irq_priority(uint32_t source, uint8_t priority) {
|
||||
pad >>= cicbits;
|
||||
|
||||
|
||||
uint8_t intctrl_val = eclic_get_intctrl(CLIC_INT_TMR);
|
||||
uint8_t intctrl_val = eclic_get_intctrl(source);
|
||||
|
||||
intctrl_val >>= (8 - nlbits);
|
||||
intctrl_val <<= (8 - nlbits);
|
||||
intctrl_val |= (priority << (8 - cicbits));
|
||||
intctrl_val |= pad;
|
||||
|
||||
eclic_set_intctrl(CLIC_INT_TMR, intctrl_val);
|
||||
eclic_set_intctrl(source, intctrl_val);
|
||||
}
|
||||
|
||||
void rv32_exception_entry();
|
||||
#define USE_DEFAULT_IRQ_ENTRY 1
|
||||
|
||||
__PORT__ void port_cpu_init() {
|
||||
|
||||
__ASM__ __VOLATILE__("csrw mtvec, %0"::"r"(rv32_exception_entry));
|
||||
void rv32_exception_entry();
|
||||
uint32_t entry = (uint32_t) rv32_exception_entry;
|
||||
|
||||
// 0x03 means use eclic
|
||||
__ASM__ __VOLATILE__("csrw mtvec, %0"::"r"(entry | 0x03));
|
||||
|
||||
// MTVT2: 0x7EC
|
||||
// set mtvt2.MTVT2EN = 0 needs to clear bit 0
|
||||
// use mtvec as entry of irq and other trap
|
||||
__ASM__ __VOLATILE__("csrc 0x7EC, 0x1");
|
||||
|
||||
eclic_enable_interrupt(CLIC_INT_TMR);
|
||||
|
||||
eclic_set_irq_level(CLIC_INT_TMR, 0);
|
||||
|
||||
}
|
||||
|
||||
__PORT__ void port_systick_priority_set(uint32_t priority) {
|
||||
@@ -129,7 +134,7 @@ __PORT__ void port_systick_priority_set(uint32_t priority) {
|
||||
|
||||
|
||||
__PORT__ void *port_get_irq_vector_table() {
|
||||
void *base = 0;
|
||||
unsigned int *base = 0;
|
||||
|
||||
// MTVT: 0x307
|
||||
__ASM__ __VOLATILE__("csrr %0, 0x307":"=r"(base));
|
||||
|
@@ -15,15 +15,23 @@
|
||||
* within TencentOS.
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
.global eclic_mtip_handler
|
||||
//.global eclic_mtip_handler
|
||||
//.section .text
|
||||
#if 0
|
||||
.global irq_entry
|
||||
.global trap_entry
|
||||
|
||||
.align 2
|
||||
irq_entry:
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
j rv32_exception_entry
|
||||
j irq_entry
|
||||
|
||||
.align 2
|
||||
trap_entry:
|
||||
j trap_entry
|
||||
|
||||
#endif
|
||||
|
@@ -159,15 +159,21 @@ void cpu_trap_entry(cpu_data_t cause, cpu_context_t *regs)
|
||||
}
|
||||
}
|
||||
|
||||
void eclic_mtip_handler();
|
||||
void cpu_irq_entry(cpu_data_t irq)
|
||||
{
|
||||
void (*irq_handler)();
|
||||
typedef void (*irq_handler_t)();
|
||||
|
||||
irq_handler = *((void (**)())(port_get_irq_vector_table() + irq*sizeof(cpu_addr_t)));
|
||||
if((*irq_handler) == 0) {
|
||||
|
||||
irq_handler_t *irq_handler_base = port_get_irq_vector_table();
|
||||
|
||||
irq_handler_t irq_handler = irq_handler_base[irq];
|
||||
|
||||
if(irq_handler == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
(*irq_handler)();
|
||||
}
|
||||
|
||||
@@ -175,27 +181,27 @@ __API__ uint32_t tos_cpu_clz(uint32_t val)
|
||||
{
|
||||
uint32_t nbr_lead_zeros = 0;
|
||||
|
||||
if (!(val & 0XFFFF0000)) {
|
||||
if (!(val & 0xFFFF0000)) {
|
||||
val <<= 16;
|
||||
nbr_lead_zeros += 16;
|
||||
}
|
||||
|
||||
if (!(val & 0XFF000000)) {
|
||||
if (!(val & 0xFF000000)) {
|
||||
val <<= 8;
|
||||
nbr_lead_zeros += 8;
|
||||
}
|
||||
|
||||
if (!(val & 0XF0000000)) {
|
||||
if (!(val & 0xF0000000)) {
|
||||
val <<= 4;
|
||||
nbr_lead_zeros += 4;
|
||||
}
|
||||
|
||||
if (!(val & 0XC0000000)) {
|
||||
if (!(val & 0xC0000000)) {
|
||||
val <<= 2;
|
||||
nbr_lead_zeros += 2;
|
||||
}
|
||||
|
||||
if (!(val & 0X80000000)) {
|
||||
if (!(val & 0x80000000)) {
|
||||
nbr_lead_zeros += 1;
|
||||
}
|
||||
|
||||
|
@@ -267,7 +267,7 @@ restore_context:
|
||||
mret
|
||||
|
||||
|
||||
.align 2
|
||||
.align 6
|
||||
.global rv32_exception_entry
|
||||
rv32_exception_entry:
|
||||
addi sp, sp, -128
|
||||
|
@@ -104,10 +104,10 @@ typedef enum
|
||||
|
||||
#define COMn 2U
|
||||
|
||||
#define EVAL_COM0 USART2
|
||||
#define EVAL_COM0_CLK RCU_USART2
|
||||
#define EVAL_COM0_TX_PIN GPIO_PIN_2
|
||||
#define EVAL_COM0_RX_PIN GPIO_PIN_3
|
||||
#define EVAL_COM0 USART0
|
||||
#define EVAL_COM0_CLK RCU_USART0
|
||||
#define EVAL_COM0_TX_PIN GPIO_PIN_9
|
||||
#define EVAL_COM0_RX_PIN GPIO_PIN_10
|
||||
#define EVAL_COM0_GPIO_PORT GPIOA
|
||||
#define EVAL_COM0_GPIO_CLK RCU_GPIOA
|
||||
|
||||
@@ -123,7 +123,7 @@ typedef enum
|
||||
#define EVAL_COM3_TX_PIN GPIO_PIN_10
|
||||
#define EVAL_COM3_RX_PIN GPIO_PIN_11
|
||||
#define EVAL_COM3_GPIO_PORT GPIOC
|
||||
#define EVAL_COM3_GPIO_CLK RCU_GPIOC
|
||||
#define EVAL_COM3_GPIO_CLK RCU_GPIOB
|
||||
|
||||
#define KEYn 3U
|
||||
|
||||
|
@@ -11,7 +11,7 @@
|
||||
|
||||
#define USART2_GPIO_TX_PIN GPIO_PIN_10
|
||||
#define USART2_GPIO_RX_PIN GPIO_PIN_11
|
||||
#define USART2_GPIO_PORT GPIOC
|
||||
#define USART2_GPIO_PORT GPIOB
|
||||
|
||||
|
||||
void usart0_init(int baud);
|
||||
|
@@ -2,6 +2,10 @@
|
||||
#include "usart.h"
|
||||
void usart0_init(int baud)
|
||||
{
|
||||
eclic_priority_group_set(ECLIC_PRIGROUP_LEVEL3_PRIO1);
|
||||
eclic_irq_enable(USART0_IRQn, 1, 0);
|
||||
|
||||
|
||||
/* enable GPIO clock */
|
||||
rcu_periph_clock_enable(RCU_GPIOA);
|
||||
|
||||
@@ -25,10 +29,14 @@ void usart0_init(int baud)
|
||||
usart_receive_config(USART0, USART_RECEIVE_ENABLE);
|
||||
usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
|
||||
usart_enable(USART0);
|
||||
|
||||
usart_interrupt_enable(USART0, USART_INT_RBNE);
|
||||
}
|
||||
|
||||
void usart1_init(int baud)
|
||||
{
|
||||
eclic_irq_enable(USART1_IRQn, 1, 0);
|
||||
|
||||
/* enable GPIO clock */
|
||||
rcu_periph_clock_enable(RCU_GPIOA);
|
||||
|
||||
@@ -52,14 +60,19 @@ void usart1_init(int baud)
|
||||
usart_receive_config(USART1, USART_RECEIVE_ENABLE);
|
||||
usart_transmit_config(USART1, USART_TRANSMIT_ENABLE);
|
||||
usart_enable(USART1);
|
||||
|
||||
usart_interrupt_enable(USART1, USART_INT_RBNE);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void usart2_init(int baud)
|
||||
{
|
||||
eclic_irq_enable(USART2_IRQn, 1, 0);
|
||||
|
||||
/* enable GPIO clock */
|
||||
rcu_periph_clock_enable(RCU_GPIOC);
|
||||
rcu_periph_clock_enable(RCU_GPIOB);
|
||||
|
||||
/* enable USART2 clock */
|
||||
rcu_periph_clock_enable(RCU_USART2);
|
||||
@@ -70,7 +83,7 @@ void usart2_init(int baud)
|
||||
/* connect port to USART0_Rx */
|
||||
gpio_init(USART2_GPIO_PORT, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, USART2_GPIO_RX_PIN);
|
||||
|
||||
gpio_pin_remap_config(GPIO_USART2_FULL_REMAP,ENABLE);
|
||||
//gpio_pin_remap_config(GPIO_USART2_FULL_REMAP,ENABLE);
|
||||
|
||||
/* USART1 configure */
|
||||
usart_deinit(USART2);
|
||||
@@ -83,6 +96,9 @@ void usart2_init(int baud)
|
||||
usart_receive_config(USART2, USART_RECEIVE_ENABLE);
|
||||
usart_transmit_config(USART2, USART_TRANSMIT_ENABLE);
|
||||
usart_enable(USART2);
|
||||
|
||||
|
||||
usart_interrupt_enable(USART2, USART_INT_RBNE);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -187,7 +187,7 @@
|
||||
|
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.scriptfile.134450266" name="Script files (-T)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.scriptfile" useByScannerDiscovery="false" valueType="stringList">
|
||||
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/link.lds}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/GD32VF103_Firmware_Library/RISCV/env_Eclipse/GD32VF103xB.lds}""/>
|
||||
|
||||
</option>
|
||||
|
||||
|
@@ -1,11 +1,38 @@
|
||||
#include "mcu_init.h"
|
||||
#include "tos_k.h"
|
||||
|
||||
#define TASK_SIZE 1024
|
||||
#define BLED_TASK_SIZE 1024
|
||||
#define WIFI_TASK_SIZE 4096
|
||||
k_task_t k_task_bled;
|
||||
k_task_t k_task_wifi;
|
||||
uint8_t k_bled_stk[TASK_SIZE];
|
||||
uint8_t k_wifi_stk[TASK_SIZE];
|
||||
uint8_t k_bled_stk[BLED_TASK_SIZE];
|
||||
uint8_t k_wifi_stk[WIFI_TASK_SIZE];
|
||||
|
||||
|
||||
void USART0_IRQHandler() {
|
||||
#if 0
|
||||
if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE)){
|
||||
uint8_t data = usart_data_receive(USART0);
|
||||
printf("%c\n", data);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void USART1_IRQHandler() {
|
||||
if(RESET != usart_interrupt_flag_get(USART1, USART_INT_FLAG_RBNE)){
|
||||
uint8_t data = usart_data_receive(USART1);
|
||||
//tos_at_uart_input_byte(data);
|
||||
printf("-%c\n", data);
|
||||
}
|
||||
}
|
||||
|
||||
void USART2_IRQHandler() {
|
||||
if(RESET != usart_interrupt_flag_get(USART2, USART_INT_FLAG_RBNE)){
|
||||
uint8_t data = usart_data_receive(USART2);
|
||||
tos_at_uart_input_byte(data);
|
||||
}
|
||||
//printf("usart2\n");
|
||||
}
|
||||
|
||||
void task_bled(void *pdata)
|
||||
{
|
||||
@@ -33,8 +60,10 @@ void main(void) {
|
||||
|
||||
tos_knl_init();
|
||||
|
||||
tos_task_create(&k_task_bled, "bled", task_bled, NULL, 5, k_bled_stk, TASK_SIZE, 0);
|
||||
tos_task_create(&k_task_wifi, "wifi", task_wifi, NULL, 3, k_wifi_stk, TASK_SIZE, 0);
|
||||
usart0_init(115200);
|
||||
|
||||
tos_task_create(&k_task_bled, "bled", task_bled, NULL, 5, k_bled_stk, BLED_TASK_SIZE, 0);
|
||||
tos_task_create(&k_task_wifi, "wifi", task_wifi, NULL, 3, k_wifi_stk, WIFI_TASK_SIZE, 0);
|
||||
|
||||
tos_knl_start();
|
||||
|
||||
|
@@ -3,13 +3,13 @@
|
||||
|
||||
#define MQTT_SERVER_IP "111.230.189.156"
|
||||
#define MQTT_SERVER_PORT "1883"
|
||||
#define MQTT_PRODUCT_ID "RUAP1R610V"
|
||||
#define MQTT_DEV_NAME "supowang"
|
||||
#define MQTT_CLIENT_ID "RUAP1R610Vsupowang"
|
||||
#define MQTT_USR_NAME "RUAP1R610Vsupowang;21010406;12365;4294967295"
|
||||
#define MQTT_PASSWORD "1371ae55cd1036f088bd7e39d230712bc3c32c40;hmacsha1"
|
||||
#define MQTT_SUBSCRIBE_TOPIC "RUAP1R610V/supowang/data"
|
||||
#define MQTT_PUBLISH_TOPIC "RUAP1R610V/supowang/data"
|
||||
#define MQTT_PRODUCT_ID "Z774IYDTH0"
|
||||
#define MQTT_DEV_NAME "ChinaMobileStandardBoard"
|
||||
#define MQTT_CLIENT_ID "Z774IYDTH0ChinaMobileStandardBoard"
|
||||
#define MQTT_USR_NAME "Z774IYDTH0ChinaMobileStandardBoard;12010126;RJW8Z;1614485713"
|
||||
#define MQTT_PASSWORD "83c5188935eb67708ca5cf3245f4eb3f19b78004e6a0e7d438206939705fc808;hmacsha256"
|
||||
#define MQTT_SUBSCRIBE_TOPIC "Z774IYDTH0/ChinaMobileStandardBoard/cmd"
|
||||
#define MQTT_PUBLISH_TOPIC "Z774IYDTH0/ChinaMobileStandardBoard/gps"
|
||||
|
||||
#endif
|
||||
|
||||
|
@@ -35,8 +35,8 @@ void mqtt_demo(void)
|
||||
sub_opt.topic = MQTT_SUBSCRIBE_TOPIC;
|
||||
|
||||
#ifdef USE_ESP8266
|
||||
esp8266_sal_init(HAL_UART_PORT_0);
|
||||
esp8266_join_ap("SheldonDai", "srnr6x9xbhmb0");
|
||||
esp8266_sal_init(HAL_UART_PORT_1);
|
||||
esp8266_join_ap("AceiPhone", "12345678");
|
||||
#endif
|
||||
|
||||
#ifdef USE_NB_BC35
|
||||
|
@@ -19,15 +19,23 @@ __API__ int tos_hal_uart_init(hal_uart_t *uart, hal_uart_port_t port)
|
||||
}
|
||||
|
||||
if (port == HAL_UART_PORT_0) {
|
||||
uart->private_uart = &huart0;
|
||||
usart0_init(115200);
|
||||
} else if (port == HAL_UART_PORT_1) {
|
||||
uart->private_uart = &huart1;
|
||||
usart1_init(115200);
|
||||
} else if (port == HAL_UART_PORT_2) {
|
||||
uart->private_uart = &huart2;
|
||||
usart2_init(115200);
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
uart->port = ((UART_HandleTypeDef*)(uart->private_uart))->port;
|
||||
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user