This commit is contained in:
moyuhai
2026-06-11 13:04:09 +08:00
commit 966451d245
2022 changed files with 513671 additions and 0 deletions
+284
View File
@@ -0,0 +1,284 @@
/*!
* \file gpio.c
*
* \brief Target gpio implementation
*
* \copyright Revised BSD License, see section \ref LICENSE.
*
* \code
*
* _ __ _ ________ _
* | |/ /(_)___ / ____/ /_ (_)___
* | // / __ \/ / / __ \/ / __ \
* / |/ / / / / /___/ / / / / /_/ /
* /_/|_/_/_/ /_/\____/_/ /_/_/ .___/
* /_/
* (C) 2022-2025 XinChip
*
* \endcode
*
* \author ( XinChip ) Alex-J
*
* \author ( XinChip )
*/
/*-----------------------------------------------------------------------------------
INCLUDE HEADE FILES
------------------------------------------------------------------------------------*/
#include "gpio.h"
#include "xc_drv_gpio.h"
/*------------------------------------------------------------------------------------
Macros
-------------------------------------------------------------------------------------*/
#define LED1_PIN GPIO_25
#define LED2_PIN GPIO_24
#define KEY1_PIN GPIO_33
#define KEY2_PIN GPIO_8
/*------------------------------------------------------------------------------------
Global Variables
-------------------------------------------------------------------------------------*/
uint8_t gpio_intr_flag = false;
uint64_t intr_val = 0;
/*------------------------------------------------------------------------------------
Func Prototype
-------------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------------
Functions
-------------------------------------------------------------------------------------*/
/**
* @brief gpio_demo
* @details
* @param void
* @retval void
*/
void gpio_demo(void)
{
DEBUG("__GPIO_DEMO__\r");
GPIO_InitCfg_t GPIO_InitCfg = { 0 };
GPIO_InitCfg.Mux = GPIO_Mux0;
GPIO_InitCfg.FunSel = GPIO_Dx;
GPIO_InitCfg.Pull = GPIO_PULLUP;
// Board Led1 Initialization
GPIO_InitCfg.Dir = GPIO_DIR_OUTPUT;
GPIO_InitCfg.Int = NOT_INT;
GPIO_InitCfg.Pin = LED1_PIN;
xc_gpio_init(&GPIO_InitCfg);
// Board Led2 Initialization
GPIO_InitCfg.Pin = LED2_PIN;
xc_gpio_init(&GPIO_InitCfg);
// Board Key1 Initialization
GPIO_InitCfg.Dir = GPIO_DIR_INPUT;
GPIO_InitCfg.Int = FAIL_EDGE_INT;
GPIO_InitCfg.Pin = KEY1_PIN;
xc_gpio_init(&GPIO_InitCfg);
// Board Key2 Initialization
GPIO_InitCfg.Pin = KEY2_PIN;
xc_gpio_init(&GPIO_InitCfg);
// Gpio NVIC Enable
NVIC_EnableIRQ(GPIO_IRQn);
gpio_write_pin(LED1_PIN, GPIO_PIN_SET);
gpio_write_pin(LED2_PIN, GPIO_PIN_SET);
while(1)
{
if(gpio_intr_flag == true)
{
DEBUG("Intr Status Val: 0x%016llx\n", intr_val);
gpio_intr_flag = false;
}
for(int i=0;i<0x455000;i++);
gpio_toggle_pin(LED1_PIN);
}
}
/**
* @brief gpio_intr_callback
* @details Gpio interrupt callback function
* @param void
* @retval void
*/
__RAM_CODE void gpio_intr_callback(uint64_t intr_sta)
{
intr_val = intr_sta;
gpio_intr_flag = true;
// Determine the interrupt of Key1
if((intr_sta & ((uint64_t)1 << KEY1_PIN)) != 0)
{
gpio_toggle_pin(LED1_PIN);
}
// Determine the interrupt of Key=2
if((intr_sta & (1 << KEY2_PIN)) != 0)
{
gpio_toggle_pin(LED2_PIN);
}
}
void gpio_pulldown_input_test(void)
{
//input test
GPIO_InitCfg_t GPIO_InitCfg = { 0 };
GPIO_InitCfg.Mux = GPIO_Mux0;
GPIO_InitCfg.FunSel = GPIO_Dx;
GPIO_InitCfg.Dir = GPIO_DIR_INPUT;
GPIO_InitCfg.Int = NOT_INT;
GPIO_InitCfg.Pull = GPIO_PULLDOWN;
for(uint8_t i = 0;i < 8; i++)
{
GPIO_InitCfg.Pin = i;
xc_gpio_init(&GPIO_InitCfg);
}
while(1)
{
for(uint8_t i = 0;i < 8; i++)
{
DEBUG("gaio [%d] Val: %d\r\n", i,gpio_read_pin(i));
for(int i=0;i<0x45500;i++);
}
}
}
void gpio_pullup_input_test(void)
{
//input test
GPIO_InitCfg_t GPIO_InitCfg = { 0 };
GPIO_InitCfg.Mux = GPIO_Mux0;
GPIO_InitCfg.FunSel = GPIO_Dx;
GPIO_InitCfg.Dir = GPIO_DIR_INPUT;
GPIO_InitCfg.Int = NOT_INT;
GPIO_InitCfg.Pull = GPIO_PULLUP;
for(uint8_t i = 0;i < 8; i++)
{
GPIO_InitCfg.Pin = i;
xc_gpio_init(&GPIO_InitCfg);
}
while(1)
{
for(uint8_t i = 0;i < 8; i++)
{
DEBUG("gaio [%d] Val: %d\r\n", i,gpio_read_pin(i));
for(int i=0;i<0x45500;i++);
}
}
}
void gpio_nopull_input_test(void)
{
//input test
GPIO_InitCfg_t GPIO_InitCfg = { 0 };
GPIO_InitCfg.Mux = GPIO_Mux0;
GPIO_InitCfg.FunSel = GPIO_Dx;
GPIO_InitCfg.Dir = GPIO_DIR_INPUT;
GPIO_InitCfg.Int = NOT_INT;
GPIO_InitCfg.Pull = GPIO_NOPULL;
for(uint8_t i = 0;i < 8; i++)
{
GPIO_InitCfg.Pin = i;
xc_gpio_init(&GPIO_InitCfg);
}
while(1)
{
for(uint8_t i = 0;i < 8; i++)
{
DEBUG("gaio [%d] Val: %d\r\n", i,gpio_read_pin(i));
for(int i=0;i<0x45500;i++);
}
}
}
void gpio_pulldown_input_inter_test(void)
{
//input test
GPIO_InitCfg_t GPIO_InitCfg = { 0 };
GPIO_InitCfg.Mux = GPIO_Mux0;
GPIO_InitCfg.FunSel = GPIO_Dx;
GPIO_InitCfg.Dir = GPIO_DIR_INPUT;
GPIO_InitCfg.Int = RIS_EDGE_INT;
GPIO_InitCfg.Pull = GPIO_PULLDOWN;
for(uint8_t i = 0;i < 8; i++)
{
GPIO_InitCfg.Pin = i;
xc_gpio_init(&GPIO_InitCfg);
}
// Gpio NVIC Enable
NVIC_EnableIRQ(GPIO_IRQn);
while(1)
{
if(gpio_intr_flag == true)
{
DEBUG("Intr Status Val: 0x%016llx\n", intr_val);
gpio_intr_flag = false;
}
}
}
void gpio_pullup_input_inter_test(void)
{
//input test
GPIO_InitCfg_t GPIO_InitCfg = { 0 };
GPIO_InitCfg.Mux = GPIO_Mux0;
GPIO_InitCfg.FunSel = GPIO_Dx;
GPIO_InitCfg.Dir = GPIO_DIR_INPUT;
GPIO_InitCfg.Int = FAIL_EDGE_INT;
GPIO_InitCfg.Pull = GPIO_PULLUP;
for(uint8_t i = 0;i < 8; i++)
{
GPIO_InitCfg.Pin = i;
xc_gpio_init(&GPIO_InitCfg);
}
// Gpio NVIC Enable
NVIC_EnableIRQ(GPIO_IRQn);
while(1)
{
if(gpio_intr_flag == true)
{
DEBUG("Intr Status Val: 0x%016llx\n", intr_val);
gpio_intr_flag = false;
}
}
}
void gpio_output_test(void)
{
GPIO_InitCfg_t GPIO_InitCfg = { 0 };
GPIO_InitCfg.Mux = GPIO_Mux0;
GPIO_InitCfg.FunSel = GPIO_Dx;
GPIO_InitCfg.Pull = GPIO_PULLDOWN;
GPIO_InitCfg.Dir = GPIO_DIR_OUTPUT;
GPIO_InitCfg.Int = NOT_INT;
for(uint8_t i = 0;i < 8; i++)
{
GPIO_InitCfg.Pin = i;
xc_gpio_init(&GPIO_InitCfg);
gpio_write_pin(i,GPIO_PIN_RESET);
}
for(int i=0;i<0x455000;i++);
for(uint8_t i = 0;i < 8; i++)
{
gpio_write_pin(i,GPIO_PIN_SET);
}
for(int i=0;i<0x455000;i++);
for(uint8_t i = 0;i < 8; i++)
{
GPIO_InitCfg.Pin = i;
xc_gpio_init(&GPIO_InitCfg);
gpio_write_pin(i,GPIO_PIN_RESET);
}
}
+111
View File
@@ -0,0 +1,111 @@
/*!
* \file main.c
*
* \brief Target main implementation
*
* \copyright Revised BSD License, see section \ref LICENSE.
*
* \code
*
* _ __ _ ________ _
* | |/ /(_)___ / ____/ /_ (_)___
* | // / __ \/ / / __ \/ / __ \
* / |/ / / / / /___/ / / / / /_/ /
* /_/|_/_/_/ /_/\____/_/ /_/_/ .___/
* /_/
* (C) 2022-2025 XinChip
*
* \endcode
*
* \author ( XinChip ) Alex-J
*
* \author ( XinChip )
*/
/*-----------------------------------------------------------------------------------
INCLUDE HEADE FILES
------------------------------------------------------------------------------------*/
#include "main.h"
/*------------------------------------------------------------------------------------
Macros
-------------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------------
Global Variables
-------------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------------
Func Prototype
-------------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------------
Functions
-------------------------------------------------------------------------------------*/
void app_uart_init(void)
{
GPIO_InitCfg_t gpio_cfg = {0};
gpio_cfg.Mux = GPIO_Mux0;
gpio_cfg.Pull = GPIO_PULLUP;
gpio_cfg.Int = NOT_INT;
gpio_cfg.FunSel = UART0_TX;
gpio_cfg.Pin = GPIO_18;
gpio_cfg.Dir = GPIO_DIR_OUTPUT;
xc_gpio_init(&gpio_cfg);
gpio_cfg.FunSel = UART0_RX;
gpio_cfg.Pin = GPIO_19;
gpio_cfg.Dir = GPIO_DIR_INPUT;
xc_gpio_init(&gpio_cfg);
UART_InitCfg_t uart_cfg = {0};
uart_cfg.Parity = UART_PARITY_DISABLE;
uart_cfg.StopBits = UART_STOP_1_BITS;
uart_cfg.WordLength = UART_DATA_8_BITS;
uart_cfg.BaudRate = UART_BAUDRATE_115200;
uart_cfg.HardwareFlowControl = UART_HWFC_DISABLE;
xc_uart_init(UART0_IDX, &uart_cfg);
}
void clock_init(void)
{
CLOCK_InitCfg_t clock_cfg;
clock_cfg.hfclk_src = CLOCK_HFCLK_SRC_XTAL;
clock_cfg.hfclk_in = CLOCK_HFCLK_IN_32M;
clock_cfg.lfclk_src = CLOCK_LFCLK_SRC_RC;
if (clock_cfg.lfclk_src == CLOCK_LFCLK_SRC_XTAL) {
clock_cfg.lfclk_in = CLOCK_LFCLK_IN_32768;
} else if (clock_cfg.lfclk_src == CLOCK_LFCLK_SRC_RC) {
clock_cfg.lfclk_in = CLOCK_LFCLK_IN_32K;
}
xc_clock_init_cfg(&clock_cfg);
SysTick_Config(xc_clock_hfclk_in_get() / 100);
SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk;
}
int main(void)
{
clock_init();
app_uart_init();
DEBUG("__START__\n");
#if (RC32K_CALIB_BY_HW == 0)
xc_rc32k_calib_by_hw( );
#else
xc_rc32k_calib_by_soft();
#endif
while(1)
{
/* main loop */
;
}
}