Browse Source

support i2c and fixed no shell bug

prepare_for_master
wlyu 3 months ago
parent
commit
4edf73254e
  1. 1
      Ubiquitous/Nuttx_Fusion_XiUOS/aiit_board/hc32f4a0/src/hc32_bringup.c
  2. 4
      Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/arch/arm/include/hc32/irq.h
  3. 19
      Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/arch/arm/src/hc32/Kconfig
  4. 4
      Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/arch/arm/src/hc32/Make.defs
  5. 37
      Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/arch/arm/src/hc32/hc32_console.c
  6. 2
      Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/arch/arm/src/hc32/hc32_gpio.h
  7. 844
      Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/arch/arm/src/hc32/hc32_i2c.c
  8. 5
      Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/arch/arm/src/hc32/hc32_idle.c
  9. 1208
      Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/arch/arm/src/hc32/hc32_irq.c
  10. 336
      Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/arch/arm/src/hc32/hc32_serial.c
  11. 5
      Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/arch/arm/src/hc32/hc32_timerisr.c
  12. 173
      Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/arch/arm/src/hc32/hc32_vectors.c
  13. 2
      Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/arch/arm/src/hc32/hc32f4a0_interrupts.h

1
Ubiquitous/Nuttx_Fusion_XiUOS/aiit_board/hc32f4a0/src/hc32_bringup.c

@ -71,6 +71,5 @@ int hc32_bringup(void)
}
#endif
printf("start %s\n", __func__);
return ret;
}

4
Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/arch/arm/include/hc32/irq.h

@ -86,8 +86,8 @@ extern "C"
#define NR_IRQS (144 + 15)
#define NVIC_SYSH_PRIORITY_MIN 0xf0
#define NVIC_SYSH_PRIORITY_DEFAULT 0x80
#define NVIC_SYSH_PRIORITY_MIN 0U// 0xf0
#define NVIC_SYSH_PRIORITY_DEFAULT 0U //0x80
#define NVIC_SYSH_DISABLE_PRIORITY NVIC_SYSH_PRIORITY_DEFAULT
#define ARMV7M_PERIPHERAL_INTERRUPTS NR_IRQS

19
Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/arch/arm/src/hc32/Kconfig

@ -181,10 +181,27 @@ config HC32_SPI1
config HC32_SPI2
bool "SPI2"
default n
depends on HC32_HAVE_SPI2
select SPI
select HC32_SPI
config HC32_I2C1
bool "I2C1"
default n
select I2C
select HC32_I2C
config HC32_I2C2
bool "I2C2"
default n
select I2C
select HC32_I2C
config HC32_I2C3
bool "I2C3"
default n
select I2C
select HC32_I2C
config HC32_SPI
bool

4
Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/arch/arm/src/hc32/Make.defs

@ -86,9 +86,11 @@ CHIP_CSRCS += hc32_console.c
CHIP_CSRCS += hc32f4a0_clk.c hc32f4a0_efm.c hc32f4a0_gpio.c
CHIP_CSRCS += hc32f4a0_interrupts.c hc32f4a0_usart.c hc32f4a0_utility.c
CHIP_CSRCS += hc32f4a0_sram.c hc32f4a0_pwc.c
CHIP_CSRCS += hc32f4a0_sram.c hc32f4a0_pwc.c hc32f4a0_i2c.c
CHIP_CSRCS += hc32f4a0_spi.c
CHIP_CSRCS += hc32_spiflash.c hc32_spi.c
CHIP_CSRCS += hc32_i2c.c

37
Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/arch/arm/src/hc32/hc32_console.c

@ -18,6 +18,9 @@
#include "hc32_uart.h"
#include "hc32_spi.h"
#define CMP_STR(_tar, _str) (strncmp(_tar, _str, strlen(_str)) == 0)
extern int hc32_i2c_test(void);
void hc32_test_console(void)
{
char *dev_str = "/dev/console";
@ -31,16 +34,44 @@ void hc32_test_console(void)
close(fd);
}
void hc32_bmp180_test(void)
{
char *bmp_dev = "/dev/bmp180";
char write_arr[] = {0xF4, 0x2E};
int fd = 0, ret;
fd = open(bmp_dev, 0x6);
ret = write(fd, write_arr, 2);
hc32_print("%s: write attr ret %x\n", __func__, ret);
close(fd);
}
void hc32_console_handle(char *buf)
{
if(strncmp(buf, "console", 7) == 0)
if(CMP_STR(buf, "console"))
{
hc32_test_console();
}
else if(strncmp(buf, "spi", 7) == 0)
else if(CMP_STR(buf, "spi"))
{
hc32_print("start flash test ...\n");
hc32_print("start flash test %d ...\n", g_system_timer);
hc32_spiflash_test();
}
else if(CMP_STR(buf, "i2c"))
{
hc32_print("start i2c test %d ...\n", g_system_timer);
hc32_i2c_test();
}
else if(CMP_STR(buf, "bmp"))
{
hc32_print("start bmp180 test ...\n");
hc32_bmp180_test();
}
else if(CMP_STR(buf, "pr"))
{
printf("z\n");
hc32_print("start pr test %d ...\n", g_system_timer);
printf("b\n");
}
}

2
Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/arch/arm/src/hc32/hc32_gpio.h

@ -39,6 +39,8 @@
/****************************************************************************
* Pre-Processor Declarations
****************************************************************************/
typedef uint32_t gpio_pinset_t;
#define GPIO_OUTPUT_SET (1 << 25) /* Bit 8: If output, initial value of output */
#define GPIO_OUTPUT_CLEAR (0)

844
Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/arch/arm/src/hc32/hc32_i2c.c

@ -0,0 +1,844 @@
/**
*******************************************************************************
* @file i2c/i2c_master_polling/source/main.c
* @brief Main program of I2C master polling for the Device Driver Library.
@verbatim
Change Logs:
Date Author Notes
2020-06-12 Hexiao First version
2020-08-31 Hexiao Modify I2C init flow
2020-09-04 Hexiao Modify compile warning
2021-01-21 Hexiao Replace PWC_FCG1_IIC1 with PWC_FCG1_I2C1
@endverbatim
*******************************************************************************
* Copyright (C) 2020, Huada Semiconductor Co., Ltd. All rights reserved.
*
* This software component is licensed by HDSC under BSD 3-Clause license
* (the "License"); You may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
* opensource.org/licenses/BSD-3-Clause
*
*******************************************************************************
*/
/*******************************************************************************
* Include files
******************************************************************************/
#include <nuttx/config.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#include <assert.h>
#include <errno.h>
#include <debug.h>
#include <nuttx/arch.h>
#include <nuttx/irq.h>
#include <nuttx/clock.h>
#include <nuttx/semaphore.h>
#include <nuttx/i2c/i2c_master.h>
#include "hc32_ddl.h"
#include "hc32_gpio.h"
#include "hc32_uart.h"
/**
* @addtogroup HC32F4A0_DDL_Examples
* @{
*/
/**
* @addtogroup I2C_Master_Polling
* @{
*/
/*******************************************************************************
* Local type definitions ('typedef')
******************************************************************************/
/*******************************************************************************
* Local pre-processor symbols/macros ('#define')
******************************************************************************/
/* Define slave device address for example */
#define DEVICE_ADDRESS (0x77U) //bmp180
/* Define port and pin for SDA and SCL */
#define I2C_SCL_PORT (GPIO_PORT_D)
#define I2C_SCL_PIN (GPIO_PIN_03)
#define I2C_SDA_PORT (GPIO_PORT_F)
#define I2C_SDA_PIN (GPIO_PIN_10)
#define I2C_RET_OK (0U)
#define I2C_RET_ERROR (1U)
#define GENERATE_START (0x00U)
#define GENERATE_RESTART (0x01U)
#define ADDRESS_W (0x00U)
#define ADDRESS_R (0x01U)
/* Define Write and read data length for the example */
#define TEST_DATA_LEN (1U)
/* Define i2c baudrate */
#define I2C_BAUDRATE (400000UL)
//#define LED_GREEN_PORT (GPIO_PORT_I)
//#define LED_GREEN_PIN (GPIO_PIN_03)
#define I2C_MASTER 1
#define I2C_SLAVE 2
/*******************************************************************************
* Global variable definitions (declared in header file with 'extern')
******************************************************************************/
/* I2C Device hardware configuration */
struct hc32_i2c_config_s
{
M4_I2C_TypeDef *base; /* I2C base address */
gpio_pinset_t scl_pin; /* GPIO configuration for SCL as SCL */
gpio_pinset_t sda_pin; /* GPIO configuration for SDA as SDA */
uint8_t mode; /* Master or Slave mode */
#ifndef CONFIG_I2C_POLLED
uint32_t irq; /* Event IRQ */
#endif
};
/* I2C Device Private Data */
struct hc32_i2c_priv_s
{
/* Standard I2C operations */
const struct i2c_ops_s *ops;
/* Port configuration */
const struct hc32_i2c_config_s *config;
int refs; /* Reference count */
sem_t sem_excl; /* Mutual exclusion semaphore */
#ifndef CONFIG_I2C_POLLED
sem_t sem_isr; /* Interrupt wait semaphore */
#endif
volatile uint8_t intstate; /* Interrupt handshake (see enum hc32_intstate_e) */
uint8_t msgc; /* Message count */
struct i2c_msg_s *msgv; /* Message list */
uint8_t *ptr; /* Current message buffer */
uint32_t frequency; /* Current I2C frequency */
int dcnt; /* Current message length */
uint16_t flags; /* Current message flags */
uint32_t status; /* End of transfer SR2|SR1 status */
};
static int hc32_i2c_init(FAR struct hc32_i2c_priv_s *priv);
static int hc32_i2c_deinit(FAR struct hc32_i2c_priv_s *priv);
static int hc32_i2c_transfer(FAR struct i2c_master_s *dev,
FAR struct i2c_msg_s *msgs, int count);
#ifdef CONFIG_I2C_RESET
static int hc32_i2c_reset(FAR struct i2c_master_s *dev);
#endif
/* I2C interface */
static const struct i2c_ops_s hc32_i2c_ops =
{
.transfer = hc32_i2c_transfer
#ifdef CONFIG_I2C_RESET
, .reset = hc32_i2c_reset
#endif
};
/* I2C device structures */
#ifdef CONFIG_HC32_I2C1
static const struct hc32_i2c_config_s hc32_i2c1_config =
{
.base = M4_I2C1,
.scl_pin = GPIO_PINSET(I2C_SCL_PORT, I2C_SCL_PIN),
.sda_pin = GPIO_PINSET(I2C_SDA_PORT, I2C_SDA_PIN),
#ifndef CONFIG_I2C_SLAVE
.mode = I2C_MASTER,
#else
.mode = I2C_SLAVE,
#endif
#ifndef CONFIG_I2C_POLLED
.irq = EVT_I2C1_RXI,
#endif
};
static struct hc32_i2c_priv_s hc32_i2c1_priv =
{
.ops = &hc32_i2c_ops,
.config = &hc32_i2c1_config,
.refs = 0,
.intstate = INTSTATE_IDLE,
.msgc = 0,
.msgv = NULL,
.ptr = NULL,
.dcnt = 0,
.flags = 0,
.status = 0
};
#endif
#ifdef CONFIG_HC32_I2C2
static const struct hc32_i2c_config_s hc32_i2c2_config =
{
.base = M4_I2C2,
.scl_pin = GPIO_PINSET(I2C_SCL_PORT, I2C_SCL_PIN),
.sda_pin = GPIO_PINSET(I2C_SDA_PORT, I2C_SDA_PIN),
#ifndef CONFIG_I2C_SLAVE
.mode = I2C_MASTER,
#else
.mode = I2C_SLAVE,
#endif
#ifndef CONFIG_I2C_POLLED
.irq = EVT_I2C2_RXI,
#endif
};
static struct hc32_i2c_priv_s hc32_i2c2_priv =
{
.ops = &hc32_i2c_ops,
.config = &hc32_i2c2_config,
.refs = 0,
.intstate = INTSTATE_IDLE,
.msgc = 0,
.msgv = NULL,
.ptr = NULL,
.dcnt = 0,
.flags = 0,
.status = 0
};
#endif
#ifdef CONFIG_HC32_I2C3
static const struct hc32_i2c_config_s hc32_i2c3_config =
{
.base = M4_I2C3,
.scl_pin = GPIO_PINSET(I2C_SCL_PORT, I2C_SCL_PIN),
.sda_pin = GPIO_PINSET(I2C_SDA_PORT, I2C_SDA_PIN),
#ifndef CONFIG_I2C_SLAVE
.mode = I2C_MASTER,
#else
.mode = I2C_SLAVE,
#endif
#ifndef CONFIG_I2C_POLLED
.irq = EVT_I2C3_RXI,
#endif
};
static struct hc32_i2c_priv_s hc32_i2c3_priv =
{
.ops = &hc32_i2c_ops,
.config = &hc32_i2c3_config,
.refs = 0,
.intstate = INTSTATE_IDLE,
.msgc = 0,
.msgv = NULL,
.ptr = NULL,
.dcnt = 0,
.flags = 0,
.status = 0
};
#endif
/*******************************************************************************
* Local function prototypes ('static')
******************************************************************************/
/*******************************************************************************
* Local variable definitions ('static')
******************************************************************************/
#define I2C_TIMEOUT (0x24000U)
/*******************************************************************************
* Function implementation - global ('extern') and local ('static')
******************************************************************************/
/**
* @brief MCU Peripheral registers write unprotected.
* @param None
* @retval None
* @note Comment/uncomment each API depending on APP requires.
*/
static void Peripheral_WE(void)
{
/* Unlock GPIO register: PSPCR, PCCR, PINAER, PCRxy, PFSRxy */
GPIO_Unlock();
/* Unlock PWC register: FCG0 */
PWC_FCG0_Unlock();
/* Unlock PWC, CLK, PVD registers, @ref PWC_REG_Write_Unlock_Code for details */
PWC_Unlock(PWC_UNLOCK_CODE_0 | PWC_UNLOCK_CODE_1 | PWC_UNLOCK_CODE_2);
/* Unlock SRAM register: WTCR */
SRAM_WTCR_Unlock();
/* Unlock SRAM register: CKCR */
SRAM_CKCR_Unlock();
/* Unlock all EFM registers */
EFM_Unlock();
/* Unlock EFM register: FWMC */
//EFM_FWMC_Unlock();
/* Unlock EFM OTP write protect registers */
//EFM_OTP_WP_Unlock();
/* Unlock all MPU registers */
// MPU_Unlock();
}
/**
* @brief MCU Peripheral registers write protected.
* @param None
* @retval None
* @note Comment/uncomment each API depending on APP requires.
*/
static __attribute__((unused)) void Peripheral_WP(void)
{
/* Lock GPIO register: PSPCR, PCCR, PINAER, PCRxy, PFSRxy */
GPIO_Lock();
/* Lock PWC register: FCG0 */
PWC_FCG0_Lock();
/* Lock PWC, CLK, PVD registers, @ref PWC_REG_Write_Unlock_Code for details */
PWC_Lock(PWC_UNLOCK_CODE_0 | PWC_UNLOCK_CODE_1 | PWC_UNLOCK_CODE_2);
/* Lock SRAM register: WTCR */
SRAM_WTCR_Lock();
/* Lock SRAM register: CKCR */
SRAM_CKCR_Lock();
/* Lock EFM OTP write protect registers */
//EFM_OTP_WP_Lock();
/* Lock EFM register: FWMC */
//EFM_FWMC_Lock();
/* Lock all EFM registers */
EFM_Lock();
/* Lock all MPU registers */
// MPU_Lock();
}
//static void Master_LedInit(void)
//{
// stc_gpio_init_t stcGpioInit;
//
// /* RGB LED initialize */
// (void)GPIO_StructInit(&stcGpioInit);
// (void)GPIO_Init(LED_GREEN_PORT, LED_GREEN_PIN, &stcGpioInit);
//
// /* "Turn off" LED before set to output */
// GPIO_ResetPins(LED_GREEN_PORT, LED_GREEN_PIN);
//
// /* Output enable */
// GPIO_OE(LED_GREEN_PORT, LED_GREEN_PIN, Enable);
//}
//static void Master_LedOn(void)
//{
// GPIO_SetPins(LED_GREEN_PORT, LED_GREEN_PIN);
//}
/**
* @brief Send start or restart condition
* @param [in] u8Start Indicate the start mode, start or restart
* @retval Process result
* - I2C_RET_ERROR Send start or restart failed
* - I2C_RET_OK Send start or restart success
*/
static en_result_t Master_StartOrRestart(uint8_t u8Start)
{
en_result_t enRet;
/* generate start or restart signal */
if(GENERATE_START == u8Start)
{
enRet = I2C_Start(M4_I2C1,I2C_TIMEOUT);
}
else
{
/* Clear start status flag */
enRet = I2C_Restart(M4_I2C1,I2C_TIMEOUT);
}
return enRet;
}
/**
* @brief Send slave address
* @param [in] u8Adr The slave address
* @param [in] u8Dir The transfer direction @ref I2C_Transfer_Direction
* @retval Process result
* - I2C_RET_ERROR Send failed
* - I2C_RET_OK Send success
*/
static en_result_t Master_SendAdr(uint8_t u8Adr, uint8_t u8Dir)
{
return I2C_TransAddr(M4_I2C1,u8Adr,u8Dir,I2C_TIMEOUT);
}
/**
* @brief Send data to slave
* @param [in] pTxData Pointer to the data buffer
* @param [in] u32Size Data size
* @retval Process result
* - I2C_RET_ERROR Send failed
* - I2C_RET_OK Send success
*/
static en_result_t Master_WriteData(uint8_t const pTxData[], uint32_t u32Size)
{
return I2C_TransData(M4_I2C1, pTxData, u32Size,I2C_TIMEOUT);
}
/**
* @brief Write address and receive data from slave
* @param [in] pRxData Pointer to the data buffer
* @param [in] u32Size Data size
* @retval Process result
* - I2C_RET_ERROR Process failed
* - I2C_RET_OK Process success
*/
static en_result_t Master_ReceiveAndStop(uint8_t pRxData[], uint32_t u32Size)
{
return I2C_MasterReceiveAndStop(M4_I2C1,pRxData, u32Size,I2C_TIMEOUT);
}
/**
* @brief General stop condition to slave
* @param None
* @retval Process result
* - I2C_RET_ERROR Process failed
* - I2C_RET_OK Process success
*/
static en_result_t Master_Stop(void)
{
return I2C_Stop(M4_I2C1,I2C_TIMEOUT);
}
/**
* @brief Initialize the I2C peripheral for master
* @param None
* @retval Process result
* - I2C_RET_ERROR Process failed
* - I2C_RET_OK Process success
*/
static en_result_t Master_Initialize(void)
{
stc_i2c_init_t stcI2cInit;
float32_t fErr;
I2C_DeInit(M4_I2C1);
(void)I2C_StructInit(&stcI2cInit);
stcI2cInit.u32Baudrate = I2C_BAUDRATE;
stcI2cInit.u32SclTime = 5U;
stcI2cInit.u32ClkDiv = I2C_CLK_DIV4;
en_result_t enRet = I2C_Init(M4_I2C1, &stcI2cInit, &fErr);
I2C_BusWaitCmd(M4_I2C1, Enable);
if(enRet == Ok)
{
I2C_Cmd(M4_I2C1, Enable);
}
return enRet;
}
/**
* @brief Judge the result. LED0 toggle when result is error status.
* @param [in] enRet Result to be judged
* @retval None
*/
static void JudgeResult(en_result_t enRet)
{
if(Ok != enRet)
{
for(;;)
{
DDL_DelayMS(500U);
}
}
}
static int hc32_i2c_init(FAR struct hc32_i2c_priv_s *priv)
{
return OK;
}
static int hc32_i2c_deinit(FAR struct hc32_i2c_priv_s *priv)
{
return OK;
}
static inline void hc32_i2c_sem_init(FAR struct hc32_i2c_priv_s *priv)
{
nxsem_init(&priv->sem_excl, 0, 1);
#ifndef CONFIG_I2C_POLLED
/* This semaphore is used for signaling and, hence, should not have
* priority inheritance enabled.
*/
nxsem_init(&priv->sem_isr, 0, 0);
nxsem_set_protocol(&priv->sem_isr, SEM_PRIO_NONE);
#endif
}
static inline void hc32_i2c_sem_destroy(FAR struct hc32_i2c_priv_s *priv)
{
nxsem_destroy(&priv->sem_excl);
#ifndef CONFIG_I2C_POLLED
nxsem_destroy(&priv->sem_isr);
#endif
}
/****************************************************************************
* Name: hc32_i2c_sem_post
*
* Description:
* Release the mutual exclusion semaphore
*
****************************************************************************/
static inline void hc32_i2c_sem_post(struct hc32_i2c_priv_s *priv)
{
nxsem_post(&priv->sem_excl);
}
#if 0
static int hc32_i2c_transfer1(FAR struct i2c_master_s *dev,
FAR struct i2c_msg_s *msgs, int count)
{
FAR struct hc32_i2c_priv_s *priv = (struct hc32_i2c_priv_s *)dev;
uint32_t status = 0;
#ifdef I2C1_FSMC_CONFLICT
uint32_t ahbenr;
#endif
int ret;
DEBUGASSERT(count);
/* Ensure that address or flags don't change meanwhile */
ret = nxsem_wait(&priv->sem_excl);
if (ret < 0)
{
return ret;
}
//
//
/* Ensure that any ISR happening after we finish can't overwrite any user
* data
*/
priv->dcnt = 0;
priv->ptr = NULL;
hc32_i2c_sem_post(priv);
return ret;
}
#endif
static int hc32_i2c_transfer(FAR struct i2c_master_s *dev,
FAR struct i2c_msg_s *msgs, int count)
{
en_result_t ret;
FAR struct hc32_i2c_priv_s *priv = (struct hc32_i2c_priv_s *)dev;
/* Initialize I2C peripheral and enable function*/
ret = Master_Initialize();
JudgeResult(ret);
/* I2C master data write*/
ret = Master_StartOrRestart(GENERATE_START);
JudgeResult(ret);
ret = Master_SendAdr(msgs->addr, I2C_DIR_TX);
JudgeResult(ret);
ret = Master_WriteData(msgs->buffer, msgs->length);
JudgeResult(ret);
ret = Master_Stop();
JudgeResult(ret);
/* 5mS delay for device*/
DDL_DelayMS(5U);
/* I2C master data read*/
ret = Master_StartOrRestart(GENERATE_START);
if(1UL == msgs->length)
{
I2C_AckConfig(priv->config->base, I2C_NACK);
}
JudgeResult(ret);
ret = Master_SendAdr(msgs->addr, I2C_DIR_RX);
JudgeResult(ret);
ret = Master_ReceiveAndStop(msgs->buffer, msgs->length);
JudgeResult(ret);
return ret;
}
int hc32_i2c_config(void)
{
/* Initialize I2C port*/
stc_gpio_init_t stcGpioInit;
Peripheral_WE();
(void)GPIO_StructInit(&stcGpioInit);
(void)GPIO_Init(I2C_SCL_PORT, I2C_SCL_PIN, &stcGpioInit);
(void)GPIO_Init(I2C_SDA_PORT, I2C_SDA_PIN, &stcGpioInit);
GPIO_SetFunc(I2C_SCL_PORT, I2C_SCL_PIN, GPIO_FUNC_49_I2C1_SCL, PIN_SUBFUNC_DISABLE);
GPIO_SetFunc(I2C_SDA_PORT, I2C_SDA_PIN, GPIO_FUNC_48_I2C1_SDA, PIN_SUBFUNC_DISABLE);
/* Enable peripheral clock */
PWC_Fcg1PeriphClockCmd(PWC_FCG1_I2C1, Enable);
return OK;
}
/**
* @brief BSP clock initialize.
* Set board system clock to PLLH@240MHz
* Flash: 5 wait
* SRAM_HS: 1 wait
* SRAM1_2_3_4_B: 2 wait
* PCLK0: 240MHz
* PCLK1: 120MHz
* PCLK2: 60MHz
* PCLK3: 60MHz
* PCLK4: 120MHz
* EXCLK: 120MHz
* HCLK: 240MHz
* @param None
* @retval None
*/
void BSP_CLK_Init(void)
{
stc_clk_xtal_init_t stcXtalInit;
stc_clk_pllh_init_t stcPLLHInit;
/* PCLK0, HCLK Max 240MHz */
/* PCLK1, PCLK4 Max 120MHz */
/* PCLK2, PCLK3 Max 60MHz */
/* EX BUS Max 120MHz */
CLK_ClkDiv(CLK_CATE_ALL, \
(CLK_PCLK0_DIV1 | CLK_PCLK1_DIV2 | CLK_PCLK2_DIV4 | \
CLK_PCLK3_DIV4 | CLK_PCLK4_DIV2 | CLK_EXCLK_DIV2 | \
CLK_HCLK_DIV1));
CLK_XtalStructInit(&stcXtalInit);
/* Config Xtal and enable Xtal */
stcXtalInit.u8XtalMode = CLK_XTALMODE_OSC;
stcXtalInit.u8XtalDrv = CLK_XTALDRV_LOW;
stcXtalInit.u8XtalState = CLK_XTAL_ON;
stcXtalInit.u8XtalStb = CLK_XTALSTB_2MS;
CLK_XtalInit(&stcXtalInit);
(void)CLK_PLLHStructInit(&stcPLLHInit);
/* VCO = (8/1)*120 = 960MHz*/
stcPLLHInit.u8PLLState = CLK_PLLH_ON;
stcPLLHInit.PLLCFGR = 0UL;
stcPLLHInit.PLLCFGR_f.PLLM = 1UL - 1UL;
stcPLLHInit.PLLCFGR_f.PLLN = 120UL - 1UL;
stcPLLHInit.PLLCFGR_f.PLLP = 4UL - 1UL;
stcPLLHInit.PLLCFGR_f.PLLQ = 4UL - 1UL;
stcPLLHInit.PLLCFGR_f.PLLR = 4UL - 1UL;
stcPLLHInit.PLLCFGR_f.PLLSRC = CLK_PLLSRC_XTAL;
(void)CLK_PLLHInit(&stcPLLHInit);
/* Highspeed SRAM set to 1 Read/Write wait cycle */
SRAM_SetWaitCycle(SRAM_SRAMH, SRAM_WAIT_CYCLE_1, SRAM_WAIT_CYCLE_1);
/* SRAM1_2_3_4_backup set to 2 Read/Write wait cycle */
SRAM_SetWaitCycle((SRAM_SRAM123 | SRAM_SRAM4 | SRAM_SRAMB), SRAM_WAIT_CYCLE_2, SRAM_WAIT_CYCLE_2);
/* 0-wait @ 40MHz */
EFM_SetWaitCycle(EFM_WAIT_CYCLE_5);
/* 4 cycles for 200 ~ 250MHz */
GPIO_SetReadWaitCycle(GPIO_READ_WAIT_4);
CLK_SetSysClkSrc(CLK_SYSCLKSOURCE_PLLH);
}
/**
* @brief Main function of i2c_master_polling project
* @param None
* @retval int32_t return value, if needed
*/
int hc32_i2c_test(void)
{
en_result_t enRet;
uint8_t u8TxBuf[TEST_DATA_LEN] = {0xD0};
uint8_t u8RxBuf[TEST_DATA_LEN] = {0U};
hc32_i2c_config();
hc32_print("%s: %d start ...\n", __func__, __LINE__);
/* Initialize I2C peripheral and enable function*/
enRet = Master_Initialize();
JudgeResult(enRet);
hc32_print("%s: %d ret %d\n", __func__, __LINE__, enRet);
/* I2C master data write*/
enRet = Master_StartOrRestart(GENERATE_START);
JudgeResult(enRet);
enRet = Master_SendAdr(DEVICE_ADDRESS, I2C_DIR_TX);
JudgeResult(enRet);
enRet = Master_WriteData(u8TxBuf, TEST_DATA_LEN);
JudgeResult(enRet);
enRet = Master_Stop();
JudgeResult(enRet);
/* 5mS delay for device*/
DDL_DelayMS(5U);
/* I2C master data read*/
enRet = Master_StartOrRestart(GENERATE_START);
if(1UL == TEST_DATA_LEN)
{
I2C_AckConfig(M4_I2C1, I2C_NACK);
}
JudgeResult(enRet);
enRet = Master_SendAdr(DEVICE_ADDRESS,I2C_DIR_RX);
JudgeResult(enRet);
enRet = Master_ReceiveAndStop(u8RxBuf, TEST_DATA_LEN);
JudgeResult(enRet);
hc32_print("%s: i2c device id = %x\n", __func__, u8RxBuf[0]);
return OK;
}
/****************************************************************************
* Name: hc32_i2cbus_initialize
*
* Description:
* Initialize one I2C bus
*
****************************************************************************/
FAR struct i2c_master_s *hc32_i2cbus_initialize(int port)
{
struct hc32_i2c_priv_s * priv = NULL;
irqstate_t flags;
/* Get I2C private structure */
switch (port)
{
#ifdef CONFIG_HC32_I2C1
case 0:
priv = (struct hc32_i2c_priv_s *)&hc32_i2c1_priv;
break;
#endif
#ifdef CONFIG_HC32_I2C2
case 1:
priv = (struct hc32_i2c_priv_s *)&hc32_i2c2_priv;
break;
#endif
#ifdef CONFIG_HC32_I2C3
case 2:
priv = (struct hc32_i2c_priv_s *)&hc32_i2c3_priv;
break;
#endif
default:
return NULL;
}
/* Initialize private data for the first time, increment reference count,
* power-up hardware and configure GPIOs.
*/
flags = enter_critical_section();
if ((volatile int)priv->refs++ == 0)
{
hc32_i2c_sem_init(priv);
hc32_i2c_init(priv);
}
leave_critical_section(flags);
return (struct i2c_master_s *)priv;
}
/****************************************************************************
* Name: hc32_i2cbus_uninitialize
*
* Description:
* Uninitialize an I2C bus
*
****************************************************************************/
int hc32_i2cbus_uninitialize(FAR struct i2c_master_s *dev)
{
FAR struct hc32_i2c_priv_s *priv = (struct hc32_i2c_priv_s *)dev;
irqstate_t flags;
DEBUGASSERT(dev);
/* Decrement reference count and check for underflow */
if (priv->refs == 0)
{
return ERROR;
}
flags = enter_critical_section();
if (--priv->refs > 0)
{
leave_critical_section(flags);
return OK;
}
leave_critical_section(flags);
/* Disable power and other HW resource (GPIO's) */
hc32_i2c_deinit(priv);
/* Release unused resources */
hc32_i2c_sem_destroy(priv);
return OK;
}
static void hc32_i2c_register(int bus)
{
FAR struct i2c_master_s *i2c;
int ret;
i2c = hc32_i2cbus_initialize(bus);
if (i2c == NULL)
{
syslog(LOG_ERR, "Failed to get I2C%d interface\n", bus);
}
else
{
ret = i2c_register(i2c, bus);
if (ret < 0)
{
syslog(LOG_ERR, "Failed to register I2C%d driver: %d\n", bus, ret);
hc32_i2cbus_uninitialize(i2c);
}
}
}
/**
* @}
*/
/**
* @}
*/
/*******************************************************************************
* EOF (not truncated)
******************************************************************************/

5
Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/arch/arm/src/hc32/hc32_idle.c

@ -153,11 +153,6 @@ static void up_idlepm(void)
void up_idle(void)
{
#if defined (CONFIG_HC32F4A0_BOARD)
extern void hc32_uart_handle(void);
hc32_uart_handle();
#endif
#if defined(CONFIG_SUPPRESS_INTERRUPTS) || defined(CONFIG_SUPPRESS_TIMER_INTS)
/* If the system is idle and there are no timer interrupts, then process
* "fake" timer interrupts. Hopefully, something will wake up.

1208
Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/arch/arm/src/hc32/hc32_irq.c

File diff suppressed because it is too large

336
Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/arch/arm/src/hc32/hc32_serial.c

@ -64,49 +64,7 @@
* Pre-processor Definitions
****************************************************************************/
#define USART_CR1_USED_INTS (USART_CR1_RIE | USART_CR1_TXEIE | USART_CR1_PCE | USART_CR1_TCIE)
/* Some sanity checks *******************************************************/
/* DMA configuration */
/* If DMA is enabled on any USART, then very that other pre-requisites
* have also been selected.
*/
/* Power management definitions */
#if defined(CONFIG_PM) && !defined(CONFIG_HC32_PM_SERIAL_ACTIVITY)
# define CONFIG_HC32_PM_SERIAL_ACTIVITY 10
#endif
#if defined(CONFIG_PM)
# define PM_IDLE_DOMAIN 0 /* Revisit */
#endif
/* Since RX DMA or TX DMA or both may be enabled for a given U[S]ART.
* We need runtime detection in up_dma_setup and up_dma_shutdown
* We use the default struct default init value of 0 which maps to
* HC32_DMA_MAP(DMA1,DMA_STREAM0,DMA_CHAN0) which is not a U[S]ART.
*/
#define INVALID_SERIAL_DMA_CHANNEL 0
/* Keep track if a Break was set
*
* Note:
*
* 1) This value is set in the priv->ie but never written to the control
* register. It must not collide with USART_CR1_USED_INTS or USART_CR3_EIE
* 2) USART_CR3_EIE is also carried in the up_dev_s ie member.
*
* See up_restoreusartint where the masking is done.
*/
#ifdef CONFIG_HC32_SERIALBRK_BSDCOMPAT
# define USART_CR1_IE_BREAK_INPROGRESS_SHFTS 15
# define USART_CR1_IE_BREAK_INPROGRESS (1 << USART_CR1_IE_BREAK_INPROGRESS_SHFTS)
#endif
#define USART_CR1_USED_INTS (USART_CR1_RIE | USART_CR1_RTOIE | USART_CR1_TXEIE | USART_CR1_PCE | USART_CR1_TCIE)
#ifdef USE_SERIALDRIVER
#ifdef HAVE_SERIALDRIVER
@ -705,6 +663,10 @@ static struct up_dev_s * const g_uart_devs[HC32_NUSART] =
static inline uint32_t up_serialin(struct up_dev_s *priv, int offset);
/****************************************************************************
* Private Functions
****************************************************************************/
void hc32_rx_irq_cb(void)
{
up_interrupt(g_uart_rx_dev->rx_irq, NULL, g_uart_rx_dev);
@ -725,54 +687,34 @@ void hc32_err_irq_cb(void)
up_interrupt(g_uart_rx_dev->err_irq, NULL, g_uart_rx_dev);
}
void hc32_handle_recv_buf(void)
static int hc32_err_irq_handler(int irq, FAR void *context, FAR void *arg)
{
struct up_dev_s *priv = g_uart_rx_dev;
struct uart_buffer_s *recv = &priv->dev.recv;
char recv_buf[255] = {0};
int i, j = 0;
static int cnt = 0;
static int last_tail = 0;
if((recv->head != recv->tail) && (cnt ++ > 30))
{
last_tail = recv->tail;
for(i = recv->tail; i < recv->head; i ++)
{
recv_buf[j++] = recv->buffer[last_tail++];
}
hc32_console_handle(recv_buf);
hc32_print("nsh>%s\n", recv_buf);
recv->tail = recv->head;
cnt = 0;
last_tail = 0;
}
up_irq_save();
IRQ011_Handler();
return 0;
}
void hc32_handle_xmit_buf(void)
static int hc32_rx_irq_handler(int irq, FAR void *context, FAR void *arg)
{
struct up_dev_s *priv = g_uart_rx_dev;
int i, j = 0;
char xmit_buf[255] = {0};
if(priv->dev.xmit.tail != priv->dev.xmit.head)
{
for(i = priv->dev.xmit.tail; i < priv->dev.xmit.head; i ++)
{
xmit_buf[j++] = priv->dev.xmit.buffer[i++];
}
hc32_print("nsh>%s", xmit_buf);
}
up_irq_save();
IRQ012_Handler();
return 0;
}
void hc32_uart_handle(void)
static int hc32_tx_irq_handler(int irq, FAR void *context, FAR void *arg)
{
hc32_handle_recv_buf();
up_irq_save();
IRQ013_Handler();
return 0;
}
/****************************************************************************
* Private Functions
****************************************************************************/
static int hc32_tci_irq_handler(int irq, FAR void *context, FAR void *arg)
{
up_irq_save();
IRQ014_Handler();
return 0;
}
int hc32_print(const char *fmt, ...)
{
@ -802,7 +744,7 @@ int hc32_print(const char *fmt, ...)
* @param [in] u32Priority Interrupt priority
* @retval None
*/
static void hc32_enable_irq(const stc_irq_signin_config_t *pstcConfig,
static void hc32_serial_enableirq(const stc_irq_signin_config_t *pstcConfig,
uint32_t u32Priority)
{
if (NULL != pstcConfig)
@ -919,45 +861,6 @@ static void up_disableusartint(struct up_dev_s *priv, uint16_t *ie)
leave_critical_section(flags);
}
static int hc32_enable_serialirq(struct uart_dev_s *dev)
{
struct up_dev_s *priv = (struct up_dev_s *)dev->priv;
stc_irq_signin_config_t cfg;
{
memset(&cfg, 0, sizeof(cfg));
cfg.enIRQn = priv->rx_irq - HC32_IRQ_FIRST;
cfg.enIntSrc = priv->rxint_src;
cfg.pfnCallback = &hc32_rx_irq_cb;
hc32_enable_irq(&cfg, DDL_IRQ_PRIORITY_DEFAULT);
}
{
memset(&cfg, 0, sizeof(cfg));
cfg.enIRQn = priv->tx_irq - HC32_IRQ_FIRST;
cfg.enIntSrc = priv->txint_src;
cfg.pfnCallback = &hc32_tx_irq_cb;
hc32_enable_irq(&cfg, DDL_IRQ_PRIORITY_DEFAULT);
}
{
memset(&cfg, 0, sizeof(cfg));
cfg.enIRQn = priv->txc_irq - HC32_IRQ_FIRST;
cfg.enIntSrc = priv->txcint_src;
cfg.pfnCallback = &hc32_txc_irq_cb;
hc32_enable_irq(&cfg, DDL_IRQ_PRIORITY_DEFAULT);
}
{
memset(&cfg, 0, sizeof(cfg));
cfg.enIRQn = priv->err_irq - HC32_IRQ_FIRST;
cfg.enIntSrc = priv->errint_src;
cfg.pfnCallback = &hc32_err_irq_cb;
hc32_enable_irq(&cfg, DDL_IRQ_PRIORITY_DEFAULT);
}
return OK;
}
/****************************************************************************
* Name: up_setup
@ -971,6 +874,102 @@ static int up_setup(struct uart_dev_s *dev)
{
struct up_dev_s *priv = (struct up_dev_s *)dev->priv;
#ifndef CONFIG_SUPPRESS_UART_CONFIG
uint32_t regval;
/* Note: The logic here depends on the fact that that the USART module
* was enabled in stm32_lowsetup().
*/
/* Enable USART APB1/2 clock */
// up_set_apb_clock(dev, true);
/* Configure pins for USART use */
hc32_configgpio(priv->tx_gpio);
hc32_configgpio(priv->rx_gpio);
#ifdef CONFIG_SERIAL_OFLOWCONTROL
if (priv->cts_gpio != 0)
{
hc32_configgpio(priv->cts_gpio);
}
#endif
#ifdef CONFIG_SERIAL_IFLOWCONTROL
if (priv->rts_gpio != 0)
{
uint32_t config = priv->rts_gpio;
#ifdef CONFIG_STM32_FLOWCONTROL_BROKEN
/* Instead of letting hw manage this pin, we will bitbang */
config = (config & ~GPIO_MODE_MASK) | GPIO_OUTPUT;
#endif
hc32_configgpio(config);
}
#endif
#ifdef HAVE_RS485
if (priv->rs485_dir_gpio != 0)
{
hc32_configgpio(priv->rs485_dir_gpio);
hc32_gpiowrite(priv->rs485_dir_gpio, !priv->rs485_dir_polarity);
}
#endif
/* Configure CR2
* Clear STOP, CLKEN, CPOL, CPHA, LBCL, and interrupt enable bits
*/
regval = up_serialin(priv, offsetof(M4_USART_TypeDef, _CR2));
regval &= ~(USART_CR2_STOP | USART_CR2_CLKC | USART_CR2_WKUPIE |
USART_CR2_BEIE | USART_CR2_LBDIE | USART_CR2_LBDIE);
/* Configure STOP bits */
if (priv->stopbits2)
{
regval |= USART_CR2_STOP;
}
up_serialout(priv, offsetof(M4_USART_TypeDef, _CR2), regval);
/* Configure CR1
* Clear TE, REm and all interrupt enable bits
*/
regval = up_serialin(priv, offsetof(M4_USART_TypeDef, _CR1));
regval &= ~(USART_CR1_TE | USART_CR1_RE | USART_CR1_RTOE);
up_serialout(priv, offsetof(M4_USART_TypeDef, _CR1), regval);
/* Configure CR3
* Clear CTSE, RTSE, and all interrupt enable bits
*/
regval = up_serialin(priv, offsetof(M4_USART_TypeDef, _CR3));
regval &= ~(USART_CR3_CTSE | USART_CR3_RTSE );
up_serialout(priv, offsetof(M4_USART_TypeDef, _CR3), regval);
/* Configure the USART line format and speed. */
// up_set_format(dev);
/* Enable Rx, Tx, and the USART */
regval = up_serialin(priv, offsetof(M4_USART_TypeDef, _CR1));
regval |= (USART_CR1_RTOE | USART_CR1_RTOIE | USART_CR1_TE |
USART_CR1_RE | USART_CR1_RIE | USART_CR1_TXEIE | USART_CR1_TCIE);
up_serialout(priv, offsetof(M4_USART_TypeDef, _CR1), regval);
#endif /* CONFIG_SUPPRESS_UART_CONFIG */
/* Set up the cached interrupt enables value */
priv->ie = 0;
@ -1062,13 +1061,39 @@ static void up_shutdown(struct uart_dev_s *dev)
static int up_attach(struct uart_dev_s *dev)
{
struct up_dev_s *priv = (struct up_dev_s *)dev->priv;
int ret = 0;
hc32_print("%s: attach irq rx %d %d tx %d %d\n", __func__, priv->rx_irq, priv->rxint_src,
priv->tx_irq, priv->txint_src);
ret = hc32_enable_serialirq(dev);
return ret;
stc_irq_signin_config_t cfg;
memset(&cfg, 0, sizeof(cfg));
cfg.enIRQn = priv->rx_irq - HC32_IRQ_FIRST;
cfg.enIntSrc = priv->rxint_src;
cfg.pfnCallback = &hc32_rx_irq_cb;
hc32_serial_enableirq(&cfg, DDL_IRQ_PRIORITY_DEFAULT);
memset(&cfg, 0, sizeof(cfg));
cfg.enIRQn = priv->tx_irq - HC32_IRQ_FIRST;
cfg.enIntSrc = priv->txint_src;
cfg.pfnCallback = &hc32_tx_irq_cb;
hc32_serial_enableirq(&cfg, DDL_IRQ_PRIORITY_DEFAULT);
memset(&cfg, 0, sizeof(cfg));
cfg.enIRQn = priv->txc_irq - HC32_IRQ_FIRST;
cfg.enIntSrc = priv->txcint_src;
cfg.pfnCallback = &hc32_txc_irq_cb;
hc32_serial_enableirq(&cfg, DDL_IRQ_PRIORITY_DEFAULT);
memset(&cfg, 0, sizeof(cfg));
cfg.enIRQn = priv->err_irq - HC32_IRQ_FIRST;
cfg.enIntSrc = priv->errint_src;
cfg.pfnCallback = &hc32_err_irq_cb;
hc32_serial_enableirq(&cfg, DDL_IRQ_PRIORITY_DEFAULT);
irq_attach(HC32_IRQ_SVCALL, arm_svcall, NULL);
irq_attach(HC32_IRQ_HARDFAULT, arm_hardfault, NULL);
irq_attach(USART_UNIT_ERR_INT_IRQn, hc32_err_irq_handler, NULL);
irq_attach(USART_UNIT_RX_INT_IRQn, hc32_rx_irq_handler, NULL);
irq_attach(USART_UNIT_TX_INT_IRQn, hc32_tx_irq_handler, NULL);
irq_attach(USART_UNIT_TCI_INT_IRQn, hc32_tci_irq_handler, NULL);
return OK;
}
/****************************************************************************
@ -1084,10 +1109,14 @@ static int up_attach(struct uart_dev_s *dev)
static void up_detach(struct uart_dev_s *dev)
{
struct up_dev_s *priv = (struct up_dev_s *)dev->priv;
up_disable_irq(priv->irq);
irq_detach(priv->irq);
hc32_print("check %s line %d irq %d\n", __func__, __LINE__, priv->irq);
up_disable_irq(priv->rx_irq);
irq_detach(priv->rx_irq);
up_disable_irq(priv->tx_irq);
irq_detach(priv->tx_irq);
up_disable_irq(priv->txc_irq);
irq_detach(priv->txc_irq);
up_disable_irq(priv->err_irq);
irq_detach(priv->err_irq);
}
/****************************************************************************
@ -1535,24 +1564,14 @@ static void up_rxint(struct uart_dev_s *dev, bool enable)
* (or an Rx timeout occurs).
*/
ie |= USART_CR1_RIE;
ie |= USART_CR1_RIE | USART_CR1_RTOIE | USART_CR1_RTOE | USART_CR1_TE | USART_CR1_RE;
up_enable_irq(priv->irq);
/* Enable TX && RX && RX interrupt function */
USART_FuncCmd((M4_USART_TypeDef *)priv->usartbase,
(USART_RX | USART_INT_RX | USART_TX | \
USART_RTO | USART_INT_RTO), Enable);
}
else
{
ie &= ~(USART_CR1_RIE);
ie &= ~(USART_CR1_RIE | USART_CR1_RTOIE | USART_CR1_RTOE);
up_disable_irq(priv->irq);
USART_FuncCmd((M4_USART_TypeDef *)priv->usartbase,
(USART_RX | USART_INT_RX | USART_TX | \
USART_RTO | USART_INT_RTO), Disable);
}
/* Then set the new interrupt state */
@ -1560,8 +1579,6 @@ static void up_rxint(struct uart_dev_s *dev, bool enable)
up_restoreusartint(priv, ie);
leave_critical_section(flags);
hc32_print("%s: opened %d irq %d %s ie %x\n", __func__, dev->open_count, priv->irq,
enable ? "enable" : "disable", ie);
}
/****************************************************************************
@ -1740,11 +1757,11 @@ static void up_txint(struct uart_dev_s *dev, bool enable)
static bool up_txready(struct uart_dev_s *dev)
{
struct up_dev_s *priv = (struct up_dev_s *)dev->priv;
M4_USART_TypeDef *base = (M4_USART_TypeDef *)priv->usartbase;
return((Set == USART_GetStatus(base, USART_FLAG_TXE))
|| (Set == USART_GetStatus(base, USART_FLAG_TC)));
// struct up_dev_s *priv = (struct up_dev_s *)dev->priv;
// M4_USART_TypeDef *base = (M4_USART_TypeDef *)priv->usartbase;
// return((Set == USART_GetStatus(base, USART_FLAG_TXE))
// || (Set == USART_GetStatus(base, USART_FLAG_TC)));
return Set;
}
#endif /* HAVE_SERIALDRIVER */
@ -1834,30 +1851,19 @@ void arm_serialinit(void)
char devname[16];
unsigned i;
unsigned minor = 0;
int ret;
/* Register to receive power management callbacks */
#ifdef CONFIG_PM
ret = pm_register(&g_serialcb);
DEBUGASSERT(ret == OK);
UNUSED(ret);
#endif
/* Register the console */
#if CONSOLE_UART > 0
ret = uart_register("/dev/console", &g_uart_devs[CONSOLE_UART - 1]->dev);
uart_register("/dev/console", &g_uart_devs[CONSOLE_UART - 1]->dev);
#ifndef CONFIG_HC32_SERIAL_DISABLE_REORDERING
/* If not disabled, register the console UART to ttyS0 and exclude
* it from initializing it further down
*/
ret = uart_register("/dev/ttyS0", &g_uart_devs[CONSOLE_UART - 1]->dev);
uart_register("/dev/ttyS0", &g_uart_devs[CONSOLE_UART - 1]->dev);
minor = 1;
hc32_print("register /dev/ttyS0 %d = %d\n", CONSOLE_UART - 1, ret);
#endif
#endif /* CONSOLE_UART > 0 */

5
Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/arch/arm/src/hc32/hc32_timerisr.c

@ -95,6 +95,11 @@ static int hc32_timerisr(int irq, uint32_t *regs, void *arg)
}
#endif
void SysTick_IrqHandler(void)
{
nxsched_process_timer();
}
/****************************************************************************
* Public Functions
****************************************************************************/

173
Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/arch/arm/src/hc32/hc32_vectors.c

@ -77,7 +77,6 @@ extern void exception_common(void);
* Note that the [ ... ] designated initializer is a GCC extension.
*/
#if 0
unsigned _vectors[] locate_data(".vectors") =
{
/* Initial stack */
@ -92,175 +91,3 @@ unsigned _vectors[] locate_data(".vectors") =
[2 ... (15 + ARMV7M_PERIPHERAL_INTERRUPTS)] = (unsigned)&exception_common
};
#else
unsigned _vectors[] locate_data(".vectors") =
{
/* Initial stack */
IDLE_STACK,
/* Reset exception handler */
(unsigned)&__start,
(unsigned)&NMI_Handler,
(unsigned)&HardFault_Handler,
(unsigned)&MemManage_Handler,
(unsigned)&BusFault_Handler,
(unsigned)&UsageFault_Handler,
(unsigned)&exception_common,
(unsigned)&exception_common,
(unsigned)&exception_common,
(unsigned)&exception_common,
(unsigned)&SVC_Handler, /* SVC */
(unsigned)&DebugMon_Handler, /* DebugMon */
(unsigned)&exception_common,
(unsigned)&PendSV_Handler,
(unsigned)&SysTick_Handler, /* SysTick */
(unsigned)&IRQ000_Handler,
(unsigned)&IRQ001_Handler,
(unsigned)&IRQ002_Handler,
(unsigned)&IRQ003_Handler,
(unsigned)&IRQ004_Handler,
(unsigned)&IRQ005_Handler,
(unsigned)&IRQ006_Handler,
(unsigned)&IRQ007_Handler,
(unsigned)&IRQ008_Handler,
(unsigned)&IRQ009_Handler,
(unsigned)&IRQ010_Handler,
(unsigned)&IRQ011_Handler,
(unsigned)&IRQ012_Handler,
(unsigned)&IRQ013_Handler,
(unsigned)&IRQ014_Handler,
(unsigned)&IRQ015_Handler,
(unsigned)&IRQ016_Handler,
(unsigned)&IRQ017_Handler,
(unsigned)&IRQ018_Handler,
(unsigned)&IRQ019_Handler,
(unsigned)&IRQ020_Handler,
(unsigned)&IRQ021_Handler,
(unsigned)&IRQ022_Handler,
(unsigned)&IRQ023_Handler,
(unsigned)&IRQ024_Handler,
(unsigned)&IRQ025_Handler,
(unsigned)&IRQ026_Handler,
(unsigned)&IRQ027_Handler,
(unsigned)&IRQ028_Handler,
(unsigned)&IRQ029_Handler,
(unsigned)&IRQ030_Handler,
(unsigned)&IRQ031_Handler,
(unsigned)&IRQ032_Handler,
(unsigned)&IRQ033_Handler,
(unsigned)&IRQ034_Handler,
(unsigned)&IRQ035_Handler,
(unsigned)&IRQ036_Handler,
(unsigned)&IRQ037_Handler,
(unsigned)&IRQ038_Handler,
(unsigned)&IRQ039_Handler,
(unsigned)&IRQ040_Handler,
(unsigned)&IRQ041_Handler,
(unsigned)&IRQ042_Handler,
(unsigned)&IRQ043_Handler,
(unsigned)&IRQ044_Handler,
(unsigned)&IRQ045_Handler,
(unsigned)&IRQ046_Handler,
(unsigned)&IRQ047_Handler,
(unsigned