first
This commit is contained in:
commit
d20f21db88
6
QR205_170_ST_GD_86/.vscode/settings.json
vendored
Normal file
6
QR205_170_ST_GD_86/.vscode/settings.json
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"files.associations": {
|
||||||
|
"gd32f10x.h": "c",
|
||||||
|
"systick.h": "c"
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,151 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.c
|
||||||
|
\brief interrupt service routines
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x_it.h"
|
||||||
|
#include "systick.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles NMI exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void NMI_Handler(void)
|
||||||
|
{
|
||||||
|
/* if NMI exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles HardFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void HardFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Hard Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles MemManage exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void MemManage_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Memory Manage exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles BusFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void BusFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Bus Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles UsageFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void UsageFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Usage Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SVC exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SVC_Handler(void)
|
||||||
|
{
|
||||||
|
/* if SVC exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles DebugMon exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void DebugMon_Handler(void)
|
||||||
|
{
|
||||||
|
/* if DebugMon exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles PendSV exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void PendSV_Handler(void)
|
||||||
|
{
|
||||||
|
/* if PendSV exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SysTick exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SysTick_Handler(void)
|
||||||
|
{
|
||||||
|
delay_decrement();
|
||||||
|
}
|
@ -0,0 +1,60 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.h
|
||||||
|
\brief the header file of the ISR
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_IT_H
|
||||||
|
#define GD32F10X_IT_H
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
|
||||||
|
/* function declarations */
|
||||||
|
/* this function handles NMI exception */
|
||||||
|
void NMI_Handler(void);
|
||||||
|
/* this function handles HardFault exception */
|
||||||
|
void HardFault_Handler(void);
|
||||||
|
/* this function handles MemManage exception */
|
||||||
|
void MemManage_Handler(void);
|
||||||
|
/* this function handles BusFault exception */
|
||||||
|
void BusFault_Handler(void);
|
||||||
|
/* this function handles UsageFault exception */
|
||||||
|
void UsageFault_Handler(void);
|
||||||
|
/* this function handles SVC exception */
|
||||||
|
void SVC_Handler(void);
|
||||||
|
/* this function handles DebugMon exception */
|
||||||
|
void DebugMon_Handler(void);
|
||||||
|
/* this function handles PendSV exception */
|
||||||
|
void PendSV_Handler(void);
|
||||||
|
/* this function handles SysTick exception */
|
||||||
|
void SysTick_Handler(void);
|
||||||
|
|
||||||
|
#endif /* GD32F10X_IT_H */
|
@ -0,0 +1,62 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_libopt.h
|
||||||
|
\brief library optional for gd32f10x
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_LIBOPT_H
|
||||||
|
#define GD32F10X_LIBOPT_H
|
||||||
|
|
||||||
|
#include "gd32f10x_adc.h"
|
||||||
|
#include "gd32f10x_bkp.h"
|
||||||
|
#include "gd32f10x_can.h"
|
||||||
|
#include "gd32f10x_crc.h"
|
||||||
|
#include "gd32f10x_dac.h"
|
||||||
|
#include "gd32f10x_dma.h"
|
||||||
|
#include "gd32f10x_enet.h"
|
||||||
|
#include "gd32f10x_exmc.h"
|
||||||
|
#include "gd32f10x_exti.h"
|
||||||
|
#include "gd32f10x_fmc.h"
|
||||||
|
#include "gd32f10x_gpio.h"
|
||||||
|
#include "gd32f10x_i2c.h"
|
||||||
|
#include "gd32f10x_fwdgt.h"
|
||||||
|
#include "gd32f10x_dbg.h"
|
||||||
|
#include "gd32f10x_misc.h"
|
||||||
|
#include "gd32f10x_pmu.h"
|
||||||
|
#include "gd32f10x_rcu.h"
|
||||||
|
#include "gd32f10x_rtc.h"
|
||||||
|
#include "gd32f10x_sdio.h"
|
||||||
|
#include "gd32f10x_spi.h"
|
||||||
|
#include "gd32f10x_timer.h"
|
||||||
|
#include "gd32f10x_usart.h"
|
||||||
|
#include "gd32f10x_wwdgt.h"
|
||||||
|
|
||||||
|
#endif /* GD32F10X_LIBOPT_H */
|
@ -0,0 +1,223 @@
|
|||||||
|
/*!
|
||||||
|
\file main.c
|
||||||
|
\brief ADC0_ADC1_regular_parallel
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
#include "systick.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "gd32f10x_eval.h"
|
||||||
|
|
||||||
|
uint32_t adc_value[2];
|
||||||
|
|
||||||
|
void rcu_config(void);
|
||||||
|
void gpio_config(void);
|
||||||
|
void dma_config(void);
|
||||||
|
void timer_config(void);
|
||||||
|
void adc_config(void);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief main function
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
/* system clocks configuration */
|
||||||
|
rcu_config();
|
||||||
|
/* systick configuration */
|
||||||
|
systick_config();
|
||||||
|
/* GPIO configuration */
|
||||||
|
gpio_config();
|
||||||
|
/* TIMER configuration */
|
||||||
|
timer_config();
|
||||||
|
/* DMA configuration */
|
||||||
|
dma_config();
|
||||||
|
/* ADC configuration */
|
||||||
|
adc_config();
|
||||||
|
|
||||||
|
/* enable TIMER1 */
|
||||||
|
timer_enable(TIMER1);
|
||||||
|
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the different system clocks
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void rcu_config(void)
|
||||||
|
{
|
||||||
|
/* enable GPIOA clock */
|
||||||
|
rcu_periph_clock_enable(RCU_GPIOA);
|
||||||
|
/* enable ADC0 clock */
|
||||||
|
rcu_periph_clock_enable(RCU_ADC0);
|
||||||
|
/* enable ADC1 clock */
|
||||||
|
rcu_periph_clock_enable(RCU_ADC1);
|
||||||
|
/* enable DMA0 clock */
|
||||||
|
rcu_periph_clock_enable(RCU_DMA0);
|
||||||
|
/* enable timer1 clock */
|
||||||
|
rcu_periph_clock_enable(RCU_TIMER1);
|
||||||
|
/* config ADC clock */
|
||||||
|
rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV8);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the GPIO peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void gpio_config(void)
|
||||||
|
{
|
||||||
|
/* config the GPIO as analog mode */
|
||||||
|
gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_0|GPIO_PIN_3);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the DMA peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void dma_config(void)
|
||||||
|
{
|
||||||
|
/* ADC_DMA_channel configuration */
|
||||||
|
dma_parameter_struct dma_data_parameter;
|
||||||
|
|
||||||
|
/* ADC DMA_channel configuration */
|
||||||
|
dma_deinit(DMA0, DMA_CH0);
|
||||||
|
|
||||||
|
/* initialize DMA data mode */
|
||||||
|
dma_data_parameter.periph_addr = (uint32_t)(&ADC_RDATA(ADC0));
|
||||||
|
dma_data_parameter.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
|
||||||
|
dma_data_parameter.memory_addr = (uint32_t)(&adc_value);
|
||||||
|
dma_data_parameter.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
|
||||||
|
dma_data_parameter.periph_width = DMA_PERIPHERAL_WIDTH_32BIT;
|
||||||
|
dma_data_parameter.memory_width = DMA_MEMORY_WIDTH_32BIT;
|
||||||
|
dma_data_parameter.direction = DMA_PERIPHERAL_TO_MEMORY;
|
||||||
|
dma_data_parameter.number = 2;
|
||||||
|
dma_data_parameter.priority = DMA_PRIORITY_HIGH;
|
||||||
|
dma_init(DMA0, DMA_CH0, &dma_data_parameter);
|
||||||
|
|
||||||
|
dma_circulation_enable(DMA0, DMA_CH0);
|
||||||
|
|
||||||
|
/* enable DMA channel */
|
||||||
|
dma_channel_enable(DMA0, DMA_CH0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the TIMER peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void timer_config(void)
|
||||||
|
{
|
||||||
|
timer_oc_parameter_struct timer_ocintpara;
|
||||||
|
timer_parameter_struct timer_initpara;
|
||||||
|
|
||||||
|
/* TIMER1 configuration */
|
||||||
|
timer_initpara.prescaler = 5399;
|
||||||
|
timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
|
||||||
|
timer_initpara.counterdirection = TIMER_COUNTER_UP;
|
||||||
|
timer_initpara.period = 9999;
|
||||||
|
timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
|
||||||
|
timer_initpara.repetitioncounter = 0;
|
||||||
|
timer_init(TIMER1,&timer_initpara);
|
||||||
|
|
||||||
|
/* CH0 configuration in PWM mode1 */
|
||||||
|
timer_ocintpara.ocpolarity = TIMER_OC_POLARITY_HIGH;
|
||||||
|
timer_ocintpara.outputstate = TIMER_CCX_ENABLE;
|
||||||
|
timer_channel_output_config(TIMER1, TIMER_CH_1, &timer_ocintpara);
|
||||||
|
|
||||||
|
timer_channel_output_pulse_value_config(TIMER1, TIMER_CH_1, 3999);
|
||||||
|
timer_channel_output_mode_config(TIMER1, TIMER_CH_1, TIMER_OC_MODE_PWM1);
|
||||||
|
timer_channel_output_shadow_config(TIMER1, TIMER_CH_1, TIMER_OC_SHADOW_DISABLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the ADC peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void adc_config(void)
|
||||||
|
{
|
||||||
|
/* reset ADC */
|
||||||
|
adc_deinit(ADC0);
|
||||||
|
adc_deinit(ADC1);
|
||||||
|
/* ADC mode config */
|
||||||
|
adc_mode_config(ADC_DAUL_REGULAL_PARALLEL);
|
||||||
|
/* ADC continous function enable */
|
||||||
|
adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE);
|
||||||
|
adc_special_function_config(ADC1, ADC_SCAN_MODE, ENABLE);
|
||||||
|
|
||||||
|
/* ADC data alignment config */
|
||||||
|
adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);
|
||||||
|
adc_data_alignment_config(ADC1, ADC_DATAALIGN_RIGHT);
|
||||||
|
/* ADC channel length config */
|
||||||
|
adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 2);
|
||||||
|
adc_channel_length_config(ADC1, ADC_REGULAR_CHANNEL, 2);
|
||||||
|
|
||||||
|
/* ADC regular channel config */
|
||||||
|
adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_0, ADC_SAMPLETIME_55POINT5);
|
||||||
|
adc_regular_channel_config(ADC0, 1, ADC_CHANNEL_3, ADC_SAMPLETIME_55POINT5);
|
||||||
|
adc_regular_channel_config(ADC1, 0, ADC_CHANNEL_3, ADC_SAMPLETIME_55POINT5);
|
||||||
|
adc_regular_channel_config(ADC1, 1, ADC_CHANNEL_0, ADC_SAMPLETIME_55POINT5);
|
||||||
|
|
||||||
|
/* ADC trigger config */
|
||||||
|
adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_EXTTRIG_REGULAR_T1_CH1);
|
||||||
|
adc_external_trigger_source_config(ADC1, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);
|
||||||
|
/* ADC external trigger enable */
|
||||||
|
adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE);
|
||||||
|
adc_external_trigger_config(ADC1, ADC_REGULAR_CHANNEL, ENABLE);
|
||||||
|
|
||||||
|
/* enable ADC interface */
|
||||||
|
adc_enable(ADC0);
|
||||||
|
delay_1ms(1);
|
||||||
|
/* ADC calibration and reset calibration */
|
||||||
|
adc_calibration_enable(ADC0);
|
||||||
|
/* enable ADC interface */
|
||||||
|
adc_enable(ADC1);
|
||||||
|
delay_1ms(1);
|
||||||
|
/* ADC calibration and reset calibration */
|
||||||
|
adc_calibration_enable(ADC1);
|
||||||
|
|
||||||
|
/* ADC DMA function enable */
|
||||||
|
adc_dma_mode_enable(ADC0);
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
/*!
|
||||||
|
\file readme.txt
|
||||||
|
\brief description of the ADC0_ADC1_regular_parallel example
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
This demo is based on the GD32107C-EVAL-V1.3 board, it shows how to use ADC0 and ADC1
|
||||||
|
regular_parallel convert function. PA3 and PA0 are configured in AIN mode. TIMER1_CH1
|
||||||
|
is the trigger source of ADC0. ADC1 external trigger chooses none. When the rising edge
|
||||||
|
of TIMER1_CH1 coming, ADC0 and ADC1 regular channels are triggered at the same time. The
|
||||||
|
values of ADC0 and ADC1 are transmit to array adc_value[] by DMA.
|
||||||
|
|
||||||
|
We can watch array adc_value[] in debug mode.
|
||||||
|
|
@ -0,0 +1,83 @@
|
|||||||
|
/*!
|
||||||
|
\file systick.c
|
||||||
|
\brief the systick configuration file
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
#include "systick.h"
|
||||||
|
|
||||||
|
volatile static uint32_t delay;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure systick
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void systick_config(void)
|
||||||
|
{
|
||||||
|
/* setup systick timer for 1000Hz interrupts */
|
||||||
|
if (SysTick_Config(SystemCoreClock / 1000U)){
|
||||||
|
/* capture error */
|
||||||
|
while (1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* configure the systick handler priority */
|
||||||
|
NVIC_SetPriority(SysTick_IRQn, 0x00U);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief delay a time in milliseconds
|
||||||
|
\param[in] count: count in milliseconds
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void delay_1ms(uint32_t count)
|
||||||
|
{
|
||||||
|
delay = count;
|
||||||
|
|
||||||
|
while(0U != delay){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief delay decrement
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void delay_decrement(void)
|
||||||
|
{
|
||||||
|
if (0U != delay){
|
||||||
|
delay--;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
/*!
|
||||||
|
\file systick.h
|
||||||
|
\brief the header file of systick
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SYS_TICK_H
|
||||||
|
#define SYS_TICK_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
/* configure systick */
|
||||||
|
void systick_config(void);
|
||||||
|
/* delay a time in milliseconds */
|
||||||
|
void delay_1ms(uint32_t count);
|
||||||
|
/* delay decrement */
|
||||||
|
void delay_decrement(void);
|
||||||
|
|
||||||
|
#endif /* SYS_TICK_H */
|
@ -0,0 +1,172 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.c
|
||||||
|
\brief interrupt service routines
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x_it.h"
|
||||||
|
#include "systick.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "gd32f10x_eval.h"
|
||||||
|
|
||||||
|
extern uint16_t inserted_data[4];
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles NMI exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void NMI_Handler(void)
|
||||||
|
{
|
||||||
|
/* if NMI exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles HardFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void HardFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Hard Fault exception occurs, go to infinite loop */
|
||||||
|
while (1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles MemManage exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void MemManage_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Memory Manage exception occurs, go to infinite loop */
|
||||||
|
while (1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles BusFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void BusFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Bus Fault exception occurs, go to infinite loop */
|
||||||
|
while (1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles UsageFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void UsageFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Usage Fault exception occurs, go to infinite loop */
|
||||||
|
while (1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SVC exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SVC_Handler(void)
|
||||||
|
{
|
||||||
|
/* if SVC exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles DebugMon exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void DebugMon_Handler(void)
|
||||||
|
{
|
||||||
|
/* if DebugMon exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles PendSV exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void PendSV_Handler(void)
|
||||||
|
{
|
||||||
|
/* if PendSV exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SysTick exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SysTick_Handler(void)
|
||||||
|
{
|
||||||
|
delay_decrement();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles ADC0 and ADC1 interrupt
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void ADC0_1_IRQHandler(void)
|
||||||
|
{
|
||||||
|
/* clear the ADC flag */
|
||||||
|
adc_interrupt_flag_clear(ADC0, ADC_INT_FLAG_EOIC);
|
||||||
|
/* read ADC inserted group data register */
|
||||||
|
inserted_data[0] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_0);
|
||||||
|
inserted_data[1] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_1);
|
||||||
|
inserted_data[2] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_2);
|
||||||
|
inserted_data[3] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_3);
|
||||||
|
}
|
@ -0,0 +1,62 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.h
|
||||||
|
\brief the header file of the ISR
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_IT_H
|
||||||
|
#define GD32F10X_IT_H
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
|
||||||
|
/* function declarations */
|
||||||
|
/* this function handles NMI exception */
|
||||||
|
void NMI_Handler(void);
|
||||||
|
/* this function handles HardFault exception */
|
||||||
|
void HardFault_Handler(void);
|
||||||
|
/* this function handles MemManage exception */
|
||||||
|
void MemManage_Handler(void);
|
||||||
|
/* this function handles BusFault exception */
|
||||||
|
void BusFault_Handler(void);
|
||||||
|
/* this function handles UsageFault exception */
|
||||||
|
void UsageFault_Handler(void);
|
||||||
|
/* this function handles SVC exception */
|
||||||
|
void SVC_Handler(void);
|
||||||
|
/* this function handles DebugMon exception */
|
||||||
|
void DebugMon_Handler(void);
|
||||||
|
/* this function handles PendSV exception */
|
||||||
|
void PendSV_Handler(void);
|
||||||
|
/* this function handles SysTick exception */
|
||||||
|
void SysTick_Handler(void);
|
||||||
|
/* this function handles ADC0 and ADC1 interrupt */
|
||||||
|
void ADC0_1_IRQHandler(void);
|
||||||
|
|
||||||
|
#endif /* GD32F10X_IT_H */
|
@ -0,0 +1,62 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_libopt.h
|
||||||
|
\brief library optional for gd32f10x
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_LIBOPT_H
|
||||||
|
#define GD32F10X_LIBOPT_H
|
||||||
|
|
||||||
|
#include "gd32f10x_adc.h"
|
||||||
|
#include "gd32f10x_bkp.h"
|
||||||
|
#include "gd32f10x_can.h"
|
||||||
|
#include "gd32f10x_crc.h"
|
||||||
|
#include "gd32f10x_dac.h"
|
||||||
|
#include "gd32f10x_dma.h"
|
||||||
|
#include "gd32f10x_enet.h"
|
||||||
|
#include "gd32f10x_exmc.h"
|
||||||
|
#include "gd32f10x_exti.h"
|
||||||
|
#include "gd32f10x_fmc.h"
|
||||||
|
#include "gd32f10x_gpio.h"
|
||||||
|
#include "gd32f10x_i2c.h"
|
||||||
|
#include "gd32f10x_fwdgt.h"
|
||||||
|
#include "gd32f10x_dbg.h"
|
||||||
|
#include "gd32f10x_misc.h"
|
||||||
|
#include "gd32f10x_pmu.h"
|
||||||
|
#include "gd32f10x_rcu.h"
|
||||||
|
#include "gd32f10x_rtc.h"
|
||||||
|
#include "gd32f10x_sdio.h"
|
||||||
|
#include "gd32f10x_spi.h"
|
||||||
|
#include "gd32f10x_timer.h"
|
||||||
|
#include "gd32f10x_usart.h"
|
||||||
|
#include "gd32f10x_wwdgt.h"
|
||||||
|
|
||||||
|
#endif /* GD32F10X_LIBOPT_H */
|
@ -0,0 +1,252 @@
|
|||||||
|
/*!
|
||||||
|
\file main.c
|
||||||
|
\brief ADC0 EXTI trigger regular and inserted channel
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
#include "systick.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "gd32f10x_eval.h"
|
||||||
|
|
||||||
|
uint16_t adc_value[4];
|
||||||
|
uint16_t inserted_data[4];
|
||||||
|
|
||||||
|
void rcu_config(void);
|
||||||
|
void gpio_config(void);
|
||||||
|
void nvic_config(void);
|
||||||
|
void dma_config(void);
|
||||||
|
void adc_config(void);
|
||||||
|
void exti_config(void);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief main function
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
/* system clocks configuration */
|
||||||
|
rcu_config();
|
||||||
|
/* GPIO configuration */
|
||||||
|
gpio_config();
|
||||||
|
/* configure the EXTI peripheral */
|
||||||
|
exti_config();
|
||||||
|
/* systick configuration */
|
||||||
|
systick_config();
|
||||||
|
/* NVIC configuration */
|
||||||
|
nvic_config();
|
||||||
|
/* configure COM port */
|
||||||
|
gd_eval_com_init(EVAL_COM1);
|
||||||
|
/* DMA configuration */
|
||||||
|
dma_config();
|
||||||
|
/* ADC configuration */
|
||||||
|
adc_config();
|
||||||
|
|
||||||
|
while(1){
|
||||||
|
delay_1ms(1000);
|
||||||
|
printf("\r\n ADC0 regular channel 0 data = %d \r\n",adc_value[0]);
|
||||||
|
printf("\r\n ADC0 regular channel 1 data = %d \r\n",adc_value[1]);
|
||||||
|
printf("\r\n ADC0 regular channel 2 data = %d \r\n",adc_value[2]);
|
||||||
|
printf("\r\n ADC0 regular channel 3 data = %d \r\n",adc_value[3]);
|
||||||
|
printf("\r\n ADC0 inserted channel 0 data = %d \r\n",inserted_data[0]);
|
||||||
|
printf("\r\n ADC0 inserted channel 1 data = %d \r\n",inserted_data[1]);
|
||||||
|
printf("\r\n ADC0 inserted channel 2 data = %d \r\n",inserted_data[2]);
|
||||||
|
printf("\r\n ADC0 inserted channel 3 data = %d \r\n",inserted_data[3]);
|
||||||
|
printf("\r\n ***********************************\r\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the different system clocks
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void rcu_config(void)
|
||||||
|
{
|
||||||
|
/* enable GPIOA clock */
|
||||||
|
rcu_periph_clock_enable(RCU_GPIOA);
|
||||||
|
/* enable GPIOB clock */
|
||||||
|
rcu_periph_clock_enable(RCU_GPIOB);
|
||||||
|
/* enable ADC0 clock */
|
||||||
|
rcu_periph_clock_enable(RCU_ADC0);
|
||||||
|
/* config ADC clock */
|
||||||
|
rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV4);
|
||||||
|
/* enable DMA0 clock */
|
||||||
|
rcu_periph_clock_enable(RCU_DMA0);
|
||||||
|
/* enable alternate function clock */
|
||||||
|
rcu_periph_clock_enable(RCU_AF);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the GPIO peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void gpio_config(void)
|
||||||
|
{
|
||||||
|
/* config the GPIO as analog mode, for ADC */
|
||||||
|
gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
|
||||||
|
gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
|
||||||
|
/* config the GPIO as floating input mode, for EXTI */
|
||||||
|
gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_11);
|
||||||
|
gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_15);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
\brief configure the nested vectored interrupt controller
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void nvic_config(void)
|
||||||
|
{
|
||||||
|
nvic_priority_group_set(NVIC_PRIGROUP_PRE1_SUB3);
|
||||||
|
nvic_irq_enable(ADC0_1_IRQn, 1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the DMA peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void dma_config(void)
|
||||||
|
{
|
||||||
|
/* ADC_DMA_channel configuration */
|
||||||
|
dma_parameter_struct dma_data_parameter;
|
||||||
|
|
||||||
|
/* ADC DMA_channel configuration */
|
||||||
|
dma_deinit(DMA0, DMA_CH0);
|
||||||
|
|
||||||
|
/* initialize DMA single data mode */
|
||||||
|
dma_data_parameter.periph_addr = (uint32_t)(&ADC_RDATA(ADC0));
|
||||||
|
dma_data_parameter.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
|
||||||
|
dma_data_parameter.memory_addr = (uint32_t)(&adc_value);
|
||||||
|
dma_data_parameter.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
|
||||||
|
dma_data_parameter.periph_width = DMA_PERIPHERAL_WIDTH_16BIT;
|
||||||
|
dma_data_parameter.memory_width = DMA_MEMORY_WIDTH_16BIT;
|
||||||
|
dma_data_parameter.direction = DMA_PERIPHERAL_TO_MEMORY;
|
||||||
|
dma_data_parameter.number = 4;
|
||||||
|
dma_data_parameter.priority = DMA_PRIORITY_HIGH;
|
||||||
|
dma_init(DMA0, DMA_CH0, &dma_data_parameter);
|
||||||
|
|
||||||
|
/* enable DMA circulation mode */
|
||||||
|
dma_circulation_enable(DMA0, DMA_CH0);
|
||||||
|
|
||||||
|
/* enable DMA channel */
|
||||||
|
dma_channel_enable(DMA0, DMA_CH0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the ADC peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void adc_config(void)
|
||||||
|
{
|
||||||
|
/* reset ADC */
|
||||||
|
adc_deinit(ADC0);
|
||||||
|
/* ADC mode config */
|
||||||
|
adc_mode_config(ADC_MODE_FREE);
|
||||||
|
/* ADC continous function enable */
|
||||||
|
adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE);
|
||||||
|
/* ADC data alignment config */
|
||||||
|
adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);
|
||||||
|
|
||||||
|
/* ADC channel length config */
|
||||||
|
adc_channel_length_config(ADC0, ADC_INSERTED_CHANNEL, 4);
|
||||||
|
/* ADC inserted channel config */
|
||||||
|
adc_inserted_channel_config(ADC0, 0, ADC_CHANNEL_0, ADC_SAMPLETIME_55POINT5);
|
||||||
|
adc_inserted_channel_config(ADC0, 1, ADC_CHANNEL_1, ADC_SAMPLETIME_55POINT5);
|
||||||
|
adc_inserted_channel_config(ADC0, 2, ADC_CHANNEL_2, ADC_SAMPLETIME_55POINT5);
|
||||||
|
adc_inserted_channel_config(ADC0, 3, ADC_CHANNEL_3, ADC_SAMPLETIME_55POINT5);
|
||||||
|
/* ADC trigger config */
|
||||||
|
adc_external_trigger_source_config(ADC0, ADC_INSERTED_CHANNEL, ADC0_1_EXTTRIG_INSERTED_EXTI_15);
|
||||||
|
/* ADC external trigger enable */
|
||||||
|
adc_external_trigger_config(ADC0, ADC_INSERTED_CHANNEL, ENABLE);
|
||||||
|
/* clear the ADC flag */
|
||||||
|
adc_interrupt_flag_clear(ADC0, ADC_INT_FLAG_EOC);
|
||||||
|
adc_interrupt_flag_clear(ADC0, ADC_INT_FLAG_EOIC);
|
||||||
|
/* enable ADC interrupt */
|
||||||
|
adc_interrupt_enable(ADC0, ADC_INT_EOIC);
|
||||||
|
|
||||||
|
/* ADC channel length config */
|
||||||
|
adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 4);
|
||||||
|
/* ADC regular channel config */
|
||||||
|
adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_4, ADC_SAMPLETIME_55POINT5);
|
||||||
|
adc_regular_channel_config(ADC0, 1, ADC_CHANNEL_5, ADC_SAMPLETIME_55POINT5);
|
||||||
|
adc_regular_channel_config(ADC0, 2, ADC_CHANNEL_6, ADC_SAMPLETIME_55POINT5);
|
||||||
|
adc_regular_channel_config(ADC0, 3, ADC_CHANNEL_7, ADC_SAMPLETIME_55POINT5);
|
||||||
|
/* ADC trigger config */
|
||||||
|
adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_EXTTRIG_REGULAR_EXTI_11);
|
||||||
|
adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE);
|
||||||
|
/* ADC DMA function enable */
|
||||||
|
adc_dma_mode_enable(ADC0);
|
||||||
|
|
||||||
|
/* enable ADC interface */
|
||||||
|
adc_enable(ADC0);
|
||||||
|
delay_1ms(1);
|
||||||
|
/* ADC calibration and reset calibration */
|
||||||
|
adc_calibration_enable(ADC0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the EXTI peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void exti_config(void)
|
||||||
|
{
|
||||||
|
/* connect EXTI line to GPIO pin for inserted group */
|
||||||
|
gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOB, GPIO_PIN_SOURCE_15);
|
||||||
|
/* configure EXTI line for inserted group */
|
||||||
|
exti_init(EXTI_15, EXTI_EVENT, EXTI_TRIG_RISING);
|
||||||
|
|
||||||
|
/* connect EXTI line to GPIO pin for inserted group */
|
||||||
|
gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOA, GPIO_PIN_SOURCE_11);
|
||||||
|
/* configure EXTI line for inserted group */
|
||||||
|
exti_init(EXTI_11, EXTI_EVENT, EXTI_TRIG_RISING);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* retarget the C library printf function to the USART */
|
||||||
|
int fputc(int ch, FILE *f)
|
||||||
|
{
|
||||||
|
usart_data_transmit(EVAL_COM1, (uint8_t)ch);
|
||||||
|
while(RESET == usart_flag_get(EVAL_COM1, USART_FLAG_TBE));
|
||||||
|
return ch;
|
||||||
|
}
|
@ -0,0 +1,49 @@
|
|||||||
|
/*!
|
||||||
|
\file readme.txt
|
||||||
|
\brief description of the ADC0 EXTI trigger regular and inserted channel
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
This demo is based on the GD32107C-EVAL-V1.3 board, it shows how to convert ADC
|
||||||
|
regular and inserted group channels using EXTI external trigger.
|
||||||
|
|
||||||
|
The inserted group length is 4, the scan mode is set, every rising edge event of
|
||||||
|
EXTI15(PB15) will trigger ADC to convert all the channels in the inserted group.
|
||||||
|
When all inserted group channels are converted, EOIC interrupt will be generated.
|
||||||
|
The inserted datas are print by USART.
|
||||||
|
|
||||||
|
The regular group length is 4. Every rising edge event of EXTI11(PA11) converts 4
|
||||||
|
channels and DMA can be used to transfer the converted data.
|
||||||
|
|
||||||
|
We can watch array adc_value[]/inserted_data[] in debug mode or by COM1 and jump
|
||||||
|
JP4 to Usart1.
|
||||||
|
Connect PB15 to KEY2(PA0) and connect PA11 to KEY3(PC13).
|
||||||
|
|
@ -0,0 +1,83 @@
|
|||||||
|
/*!
|
||||||
|
\file systick.c
|
||||||
|
\brief the systick configuration file
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
#include "systick.h"
|
||||||
|
|
||||||
|
volatile static uint32_t delay;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure systick
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void systick_config(void)
|
||||||
|
{
|
||||||
|
/* setup systick timer for 1000Hz interrupts */
|
||||||
|
if (SysTick_Config(SystemCoreClock / 1000U)){
|
||||||
|
/* capture error */
|
||||||
|
while (1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* configure the systick handler priority */
|
||||||
|
NVIC_SetPriority(SysTick_IRQn, 0x00U);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief delay a time in milliseconds
|
||||||
|
\param[in] count: count in milliseconds
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void delay_1ms(uint32_t count)
|
||||||
|
{
|
||||||
|
delay = count;
|
||||||
|
|
||||||
|
while(0U != delay){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief delay decrement
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void delay_decrement(void)
|
||||||
|
{
|
||||||
|
if (0U != delay){
|
||||||
|
delay--;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
/*!
|
||||||
|
\file systick.h
|
||||||
|
\brief the header file of systick
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SYS_TICK_H
|
||||||
|
#define SYS_TICK_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
/* configure systick */
|
||||||
|
void systick_config(void);
|
||||||
|
/* delay a time in milliseconds */
|
||||||
|
void delay_1ms(uint32_t count);
|
||||||
|
/* delay decrement */
|
||||||
|
void delay_decrement(void);
|
||||||
|
|
||||||
|
#endif /* SYS_TICK_H */
|
@ -0,0 +1,170 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.c
|
||||||
|
\brief interrupt service routines
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x_it.h"
|
||||||
|
#include "systick.h"
|
||||||
|
|
||||||
|
extern uint16_t inserted_data[4];
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles NMI exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void NMI_Handler(void)
|
||||||
|
{
|
||||||
|
/* if NMI exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles HardFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void HardFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Hard Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles MemManage exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void MemManage_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Memory Manage exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles BusFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void BusFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Bus Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles UsageFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void UsageFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Usage Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SVC exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SVC_Handler(void)
|
||||||
|
{
|
||||||
|
/* if SVC exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles DebugMon exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void DebugMon_Handler(void)
|
||||||
|
{
|
||||||
|
/* if DebugMon exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles PendSV exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void PendSV_Handler(void)
|
||||||
|
{
|
||||||
|
/* if PendSV exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SysTick exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SysTick_Handler(void)
|
||||||
|
{
|
||||||
|
delay_decrement();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles ADC0 and ADC1 interrupt
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void ADC0_1_IRQHandler(void)
|
||||||
|
{
|
||||||
|
/* clear the ADC flag */
|
||||||
|
adc_interrupt_flag_clear(ADC0, ADC_INT_FLAG_EOIC);
|
||||||
|
/* read ADC inserted group data register */
|
||||||
|
inserted_data[0] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_0);
|
||||||
|
inserted_data[1] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_1);
|
||||||
|
inserted_data[2] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_2);
|
||||||
|
inserted_data[3] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_3);
|
||||||
|
}
|
@ -0,0 +1,62 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.h
|
||||||
|
\brief the header file of the ISR
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_IT_H
|
||||||
|
#define GD32F10X_IT_H
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
|
||||||
|
/* function declarations */
|
||||||
|
/* this function handles NMI exception */
|
||||||
|
void NMI_Handler(void);
|
||||||
|
/* this function handles HardFault exception */
|
||||||
|
void HardFault_Handler(void);
|
||||||
|
/* this function handles MemManage exception */
|
||||||
|
void MemManage_Handler(void);
|
||||||
|
/* this function handles BusFault exception */
|
||||||
|
void BusFault_Handler(void);
|
||||||
|
/* this function handles UsageFault exception */
|
||||||
|
void UsageFault_Handler(void);
|
||||||
|
/* this function handles SVC exception */
|
||||||
|
void SVC_Handler(void);
|
||||||
|
/* this function handles DebugMon exception */
|
||||||
|
void DebugMon_Handler(void);
|
||||||
|
/* this function handles PendSV exception */
|
||||||
|
void PendSV_Handler(void);
|
||||||
|
/* this function handles SysTick exception */
|
||||||
|
void SysTick_Handler(void);
|
||||||
|
/* this function handles ADC0 and ADC1 interrupt */
|
||||||
|
void ADC0_1_IRQHandler(void);
|
||||||
|
|
||||||
|
#endif /* GD32F10X_IT_H */
|
@ -0,0 +1,62 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_libopt.h
|
||||||
|
\brief library optional for gd32f10x
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_LIBOPT_H
|
||||||
|
#define GD32F10X_LIBOPT_H
|
||||||
|
|
||||||
|
#include "gd32f10x_adc.h"
|
||||||
|
#include "gd32f10x_bkp.h"
|
||||||
|
#include "gd32f10x_can.h"
|
||||||
|
#include "gd32f10x_crc.h"
|
||||||
|
#include "gd32f10x_dac.h"
|
||||||
|
#include "gd32f10x_dma.h"
|
||||||
|
#include "gd32f10x_enet.h"
|
||||||
|
#include "gd32f10x_exmc.h"
|
||||||
|
#include "gd32f10x_exti.h"
|
||||||
|
#include "gd32f10x_fmc.h"
|
||||||
|
#include "gd32f10x_gpio.h"
|
||||||
|
#include "gd32f10x_i2c.h"
|
||||||
|
#include "gd32f10x_fwdgt.h"
|
||||||
|
#include "gd32f10x_dbg.h"
|
||||||
|
#include "gd32f10x_misc.h"
|
||||||
|
#include "gd32f10x_pmu.h"
|
||||||
|
#include "gd32f10x_rcu.h"
|
||||||
|
#include "gd32f10x_rtc.h"
|
||||||
|
#include "gd32f10x_sdio.h"
|
||||||
|
#include "gd32f10x_spi.h"
|
||||||
|
#include "gd32f10x_timer.h"
|
||||||
|
#include "gd32f10x_usart.h"
|
||||||
|
#include "gd32f10x_wwdgt.h"
|
||||||
|
|
||||||
|
#endif /* GD32F10X_LIBOPT_H */
|
@ -0,0 +1,211 @@
|
|||||||
|
/*!
|
||||||
|
\file main.c
|
||||||
|
\brief TIMER trigger injected channel of ADC
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
#include "systick.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "gd32f10x_eval.h"
|
||||||
|
|
||||||
|
uint16_t inserted_data[4];
|
||||||
|
|
||||||
|
void rcu_config(void);
|
||||||
|
void gpio_config(void);
|
||||||
|
void nvic_config(void);
|
||||||
|
void timer_config(void);
|
||||||
|
void adc_config(void);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief main function
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
/* system clocks configuration */
|
||||||
|
rcu_config();
|
||||||
|
/* systick configuration */
|
||||||
|
systick_config();
|
||||||
|
/* GPIO configuration */
|
||||||
|
gpio_config();
|
||||||
|
/* NVIC configuration */
|
||||||
|
nvic_config();
|
||||||
|
/* TIMER configuration */
|
||||||
|
timer_config();
|
||||||
|
/* ADC configuration */
|
||||||
|
adc_config();
|
||||||
|
/* configure COM port */
|
||||||
|
gd_eval_com_init(EVAL_COM1);
|
||||||
|
|
||||||
|
/* enable TIMER1 */
|
||||||
|
timer_enable(TIMER1);
|
||||||
|
|
||||||
|
while(1){
|
||||||
|
delay_1ms(1000);
|
||||||
|
printf("\r\n ADC0 inserted channel 0 data = %d \r\n", inserted_data[0]);
|
||||||
|
printf("\r\n ADC0 inserted channel 1 data = %d \r\n", inserted_data[1]);
|
||||||
|
printf("\r\n ADC0 inserted channel 2 data = %d \r\n", inserted_data[2]);
|
||||||
|
printf("\r\n ADC0 inserted channel 3 data = %d \r\n", inserted_data[3]);
|
||||||
|
printf("\r\n ***********************************\r\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the different system clocks
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void rcu_config(void)
|
||||||
|
{
|
||||||
|
/* enable GPIOA clock */
|
||||||
|
rcu_periph_clock_enable(RCU_GPIOA);
|
||||||
|
/* enable ADC0 clock */
|
||||||
|
rcu_periph_clock_enable(RCU_ADC0);
|
||||||
|
/* enable timer1 clock */
|
||||||
|
rcu_periph_clock_enable(RCU_TIMER1);
|
||||||
|
/* config ADC clock */
|
||||||
|
rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV8);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the GPIO peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void gpio_config(void)
|
||||||
|
{
|
||||||
|
/* config the GPIO as analog mode */
|
||||||
|
gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the TIMER peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void timer_config(void)
|
||||||
|
{
|
||||||
|
timer_oc_parameter_struct timer_ocintpara;
|
||||||
|
timer_parameter_struct timer_initpara;
|
||||||
|
|
||||||
|
/* deinit a timer */
|
||||||
|
timer_deinit(TIMER1);
|
||||||
|
/* initialize TIMER init parameter struct */
|
||||||
|
timer_struct_para_init(&timer_initpara);
|
||||||
|
/* TIMER1 configuration */
|
||||||
|
timer_initpara.prescaler = 5399;
|
||||||
|
timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
|
||||||
|
timer_initpara.counterdirection = TIMER_COUNTER_UP;
|
||||||
|
timer_initpara.period = 9999;
|
||||||
|
timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
|
||||||
|
timer_initpara.repetitioncounter = 0;
|
||||||
|
timer_init(TIMER1,&timer_initpara);
|
||||||
|
|
||||||
|
/* CH0 configuration in PWM mode1 */
|
||||||
|
timer_ocintpara.ocpolarity = TIMER_OC_POLARITY_HIGH;
|
||||||
|
timer_ocintpara.outputstate = TIMER_CCX_ENABLE;
|
||||||
|
timer_channel_output_config(TIMER1, TIMER_CH_0, &timer_ocintpara);
|
||||||
|
|
||||||
|
timer_channel_output_pulse_value_config(TIMER1, TIMER_CH_0, 3999);
|
||||||
|
timer_channel_output_mode_config(TIMER1, TIMER_CH_0, TIMER_OC_MODE_PWM1);
|
||||||
|
timer_channel_output_shadow_config(TIMER1, TIMER_CH_0, TIMER_OC_SHADOW_DISABLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the ADC peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void adc_config(void)
|
||||||
|
{
|
||||||
|
/* reset ADC */
|
||||||
|
adc_deinit(ADC0);
|
||||||
|
/* ADC mode config */
|
||||||
|
adc_mode_config(ADC_MODE_FREE);
|
||||||
|
/* ADC continous function enable */
|
||||||
|
adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE);
|
||||||
|
/* ADC data alignment config */
|
||||||
|
adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);
|
||||||
|
/* ADC channel length config */
|
||||||
|
adc_channel_length_config(ADC0, ADC_INSERTED_CHANNEL, 4);
|
||||||
|
|
||||||
|
/* ADC inserted channel config */
|
||||||
|
adc_inserted_channel_config(ADC0, 0, ADC_CHANNEL_0, ADC_SAMPLETIME_55POINT5);
|
||||||
|
adc_inserted_channel_config(ADC0, 1, ADC_CHANNEL_1, ADC_SAMPLETIME_55POINT5);
|
||||||
|
adc_inserted_channel_config(ADC0, 2, ADC_CHANNEL_2, ADC_SAMPLETIME_55POINT5);
|
||||||
|
adc_inserted_channel_config(ADC0, 3, ADC_CHANNEL_3, ADC_SAMPLETIME_55POINT5);
|
||||||
|
|
||||||
|
/* ADC trigger config */
|
||||||
|
adc_external_trigger_source_config(ADC0, ADC_INSERTED_CHANNEL, ADC0_1_EXTTRIG_INSERTED_T1_CH0);
|
||||||
|
|
||||||
|
/* ADC external trigger enable */
|
||||||
|
adc_external_trigger_config(ADC0, ADC_INSERTED_CHANNEL, ENABLE);
|
||||||
|
/* clear the ADC flag */
|
||||||
|
adc_interrupt_flag_clear(ADC0, ADC_INT_FLAG_EOC);
|
||||||
|
adc_interrupt_flag_clear(ADC0, ADC_INT_FLAG_EOIC);
|
||||||
|
/* enable ADC interrupt */
|
||||||
|
adc_interrupt_enable(ADC0, ADC_INT_EOIC);
|
||||||
|
|
||||||
|
/* enable ADC interface */
|
||||||
|
adc_enable(ADC0);
|
||||||
|
delay_1ms(1);
|
||||||
|
/* ADC calibration and reset calibration */
|
||||||
|
adc_calibration_enable(ADC0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
\brief configure the nested vectored interrupt controller
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void nvic_config(void)
|
||||||
|
{
|
||||||
|
nvic_priority_group_set(NVIC_PRIGROUP_PRE1_SUB3);
|
||||||
|
nvic_irq_enable(ADC0_1_IRQn, 1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* retarget the C library printf function to the USART */
|
||||||
|
int fputc(int ch, FILE *f)
|
||||||
|
{
|
||||||
|
usart_data_transmit(EVAL_COM1, (uint8_t) ch);
|
||||||
|
while (RESET == usart_flag_get(EVAL_COM1,USART_FLAG_TBE));
|
||||||
|
return ch;
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
/*!
|
||||||
|
\file readme.txt
|
||||||
|
\brief description of the ADC TIMER trigger injected channel
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
This demo is based on the GD32107C-EVAL-V1.3 board, it shows how to convert ADC inserted
|
||||||
|
group channels continuously using TIMER1 external trigger.
|
||||||
|
|
||||||
|
The inserted group length is 4, the scan mode is set, every compare event will trigger ADC
|
||||||
|
to convert all the channels in the inserted group.
|
||||||
|
|
||||||
|
We can watch adc_value in debug mode or by COM1.
|
||||||
|
Jump JP4 to Usart1.
|
||||||
|
|
@ -0,0 +1,83 @@
|
|||||||
|
/*!
|
||||||
|
\file systick.c
|
||||||
|
\brief the systick configuration file
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
#include "systick.h"
|
||||||
|
|
||||||
|
volatile static uint32_t delay;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure systick
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void systick_config(void)
|
||||||
|
{
|
||||||
|
/* setup systick timer for 1000Hz interrupts */
|
||||||
|
if (SysTick_Config(SystemCoreClock / 1000U)){
|
||||||
|
/* capture error */
|
||||||
|
while (1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* configure the systick handler priority */
|
||||||
|
NVIC_SetPriority(SysTick_IRQn, 0x00U);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief delay a time in milliseconds
|
||||||
|
\param[in] count: count in milliseconds
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void delay_1ms(uint32_t count)
|
||||||
|
{
|
||||||
|
delay = count;
|
||||||
|
|
||||||
|
while(0U != delay){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief delay decrement
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void delay_decrement(void)
|
||||||
|
{
|
||||||
|
if (0U != delay){
|
||||||
|
delay--;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
/*!
|
||||||
|
\file systick.h
|
||||||
|
\brief the header file of systick
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SYS_TICK_H
|
||||||
|
#define SYS_TICK_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
/* configure systick */
|
||||||
|
void systick_config(void);
|
||||||
|
/* delay a time in milliseconds */
|
||||||
|
void delay_1ms(uint32_t count);
|
||||||
|
/* delay decrement */
|
||||||
|
void delay_decrement(void);
|
||||||
|
|
||||||
|
#endif /* SYS_TICK_H */
|
@ -0,0 +1,151 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.c
|
||||||
|
\brief interrupt service routines
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
#include "gd32f10x_it.h"
|
||||||
|
#include "systick.h"
|
||||||
|
#include "gd32f10x_eval.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles NMI exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void NMI_Handler(void)
|
||||||
|
{
|
||||||
|
/* if NMI exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles HardFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void HardFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Hard Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles MemManage exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void MemManage_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Memory Manage exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles BusFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void BusFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Bus Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles UsageFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void UsageFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Usage Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SVC exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SVC_Handler(void)
|
||||||
|
{
|
||||||
|
/* if SVC exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles DebugMon exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void DebugMon_Handler(void)
|
||||||
|
{
|
||||||
|
/* if DebugMon exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles PendSV exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void PendSV_Handler(void)
|
||||||
|
{
|
||||||
|
/* if PendSV exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SysTick exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SysTick_Handler(void)
|
||||||
|
{
|
||||||
|
delay_decrement();
|
||||||
|
}
|
@ -0,0 +1,60 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.h
|
||||||
|
\brief the header file of the ISR
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_IT_H
|
||||||
|
#define GD32F10X_IT_H
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
|
||||||
|
/* function declarations */
|
||||||
|
/* this function handles NMI exception */
|
||||||
|
void NMI_Handler(void);
|
||||||
|
/* this function handles HardFault exception */
|
||||||
|
void HardFault_Handler(void);
|
||||||
|
/* this function handles MemManage exception */
|
||||||
|
void MemManage_Handler(void);
|
||||||
|
/* this function handles BusFault exception */
|
||||||
|
void BusFault_Handler(void);
|
||||||
|
/* this function handles UsageFault exception */
|
||||||
|
void UsageFault_Handler(void);
|
||||||
|
/* this function handles SVC exception */
|
||||||
|
void SVC_Handler(void);
|
||||||
|
/* this function handles DebugMon exception */
|
||||||
|
void DebugMon_Handler(void);
|
||||||
|
/* this function handles PendSV exception */
|
||||||
|
void PendSV_Handler(void);
|
||||||
|
/* this function handles SysTick exception */
|
||||||
|
void SysTick_Handler(void);
|
||||||
|
|
||||||
|
#endif /* GD32F10X_IT_H */
|
@ -0,0 +1,62 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_libopt.h
|
||||||
|
\brief library optional for gd32f10x
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_LIBOPT_H
|
||||||
|
#define GD32F10X_LIBOPT_H
|
||||||
|
|
||||||
|
#include "gd32f10x_adc.h"
|
||||||
|
#include "gd32f10x_bkp.h"
|
||||||
|
#include "gd32f10x_can.h"
|
||||||
|
#include "gd32f10x_crc.h"
|
||||||
|
#include "gd32f10x_dac.h"
|
||||||
|
#include "gd32f10x_dma.h"
|
||||||
|
#include "gd32f10x_enet.h"
|
||||||
|
#include "gd32f10x_exmc.h"
|
||||||
|
#include "gd32f10x_exti.h"
|
||||||
|
#include "gd32f10x_fmc.h"
|
||||||
|
#include "gd32f10x_gpio.h"
|
||||||
|
#include "gd32f10x_i2c.h"
|
||||||
|
#include "gd32f10x_fwdgt.h"
|
||||||
|
#include "gd32f10x_dbg.h"
|
||||||
|
#include "gd32f10x_misc.h"
|
||||||
|
#include "gd32f10x_pmu.h"
|
||||||
|
#include "gd32f10x_rcu.h"
|
||||||
|
#include "gd32f10x_rtc.h"
|
||||||
|
#include "gd32f10x_sdio.h"
|
||||||
|
#include "gd32f10x_spi.h"
|
||||||
|
#include "gd32f10x_timer.h"
|
||||||
|
#include "gd32f10x_usart.h"
|
||||||
|
#include "gd32f10x_wwdgt.h"
|
||||||
|
|
||||||
|
#endif /* GD32F10X_LIBOPT_H */
|
@ -0,0 +1,203 @@
|
|||||||
|
/*!
|
||||||
|
\file main.c
|
||||||
|
\brief ADC discontinuous mode for regular channel
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
#include "systick.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "gd32f10x_eval.h"
|
||||||
|
|
||||||
|
uint16_t adc_value[8];
|
||||||
|
|
||||||
|
void rcu_config(void);
|
||||||
|
void gpio_config(void);
|
||||||
|
void dma_config(void);
|
||||||
|
void adc_config(void);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief main function
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
/* system clocks configuration */
|
||||||
|
rcu_config();
|
||||||
|
/* systick configuration */
|
||||||
|
systick_config();
|
||||||
|
/* GPIO configuration */
|
||||||
|
gpio_config();
|
||||||
|
/* configure COM port */
|
||||||
|
gd_eval_com_init(EVAL_COM1);
|
||||||
|
/* DMA configuration */
|
||||||
|
dma_config();
|
||||||
|
/* ADC configuration */
|
||||||
|
adc_config();
|
||||||
|
|
||||||
|
while(1){
|
||||||
|
/* delay 1s */
|
||||||
|
delay_1ms(1000);
|
||||||
|
/* ADC software trigger enable */
|
||||||
|
adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);
|
||||||
|
|
||||||
|
printf("\r\n ADC0 regular channel discontinuous mode 1st data: \r\n");
|
||||||
|
printf("\r\n ADC0 regular channel 0 data = %d \r\n",adc_value[0]);
|
||||||
|
printf("\r\n ADC0 regular channel 1 data = %d \r\n",adc_value[1]);
|
||||||
|
printf("\r\n ADC0 regular channel 2 data = %d \r\n",adc_value[2]);
|
||||||
|
printf("\r\n ADC0 regular channel discontinuous mode 2st data: \r\n");
|
||||||
|
printf("\r\n ADC0 regular channel 3 data = %d \r\n",adc_value[3]);
|
||||||
|
printf("\r\n ADC0 regular channel 4 data = %d \r\n",adc_value[4]);
|
||||||
|
printf("\r\n ADC0 regular channel 5 data = %d \r\n",adc_value[5]);
|
||||||
|
printf("\r\n ADC0 regular channel discontinuous mode 3st data: \r\n");
|
||||||
|
printf("\r\n ADC0 regular channel 6 data = %d \r\n",adc_value[6]);
|
||||||
|
printf("\r\n ADC0 regular channel 7 data = %d \r\n",adc_value[7]);
|
||||||
|
printf("\r\n ***********************************\r\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the different system clocks
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void rcu_config(void)
|
||||||
|
{
|
||||||
|
/* enable GPIOA clock */
|
||||||
|
rcu_periph_clock_enable(RCU_GPIOA);
|
||||||
|
/* enable ADC0 clock */
|
||||||
|
rcu_periph_clock_enable(RCU_ADC0);
|
||||||
|
/* enable DMA0 clock */
|
||||||
|
rcu_periph_clock_enable(RCU_DMA0);
|
||||||
|
/* config ADC clock */
|
||||||
|
rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV8);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the GPIO peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void gpio_config(void)
|
||||||
|
{
|
||||||
|
/* config the GPIO as analog mode */
|
||||||
|
gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
|
||||||
|
gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the DMA peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void dma_config(void)
|
||||||
|
{
|
||||||
|
/* ADC_DMA_channel configuration */
|
||||||
|
dma_parameter_struct dma_data_parameter;
|
||||||
|
|
||||||
|
/* ADC DMA_channel configuration */
|
||||||
|
dma_deinit(DMA0, DMA_CH0);
|
||||||
|
|
||||||
|
/* initialize DMA single data mode */
|
||||||
|
dma_data_parameter.periph_addr = (uint32_t)(&ADC_RDATA(ADC0));
|
||||||
|
dma_data_parameter.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
|
||||||
|
dma_data_parameter.memory_addr = (uint32_t)(adc_value);
|
||||||
|
dma_data_parameter.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
|
||||||
|
dma_data_parameter.periph_width = DMA_PERIPHERAL_WIDTH_16BIT;
|
||||||
|
dma_data_parameter.memory_width = DMA_MEMORY_WIDTH_16BIT;
|
||||||
|
dma_data_parameter.direction = DMA_PERIPHERAL_TO_MEMORY;
|
||||||
|
dma_data_parameter.number = 8;
|
||||||
|
dma_data_parameter.priority = DMA_PRIORITY_HIGH;
|
||||||
|
dma_init(DMA0, DMA_CH0, &dma_data_parameter);
|
||||||
|
|
||||||
|
dma_circulation_enable(DMA0, DMA_CH0);
|
||||||
|
|
||||||
|
/* enable DMA channel */
|
||||||
|
dma_channel_enable(DMA0, DMA_CH0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the ADC peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void adc_config(void)
|
||||||
|
{
|
||||||
|
/* reset ADC */
|
||||||
|
adc_deinit(ADC0);
|
||||||
|
/* ADC mode config */
|
||||||
|
adc_mode_config(ADC_MODE_FREE);
|
||||||
|
|
||||||
|
/* ADC data alignment config */
|
||||||
|
adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);
|
||||||
|
/* ADC channel length config */
|
||||||
|
adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 8);
|
||||||
|
|
||||||
|
/* ADC regular channel config */
|
||||||
|
adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_0, ADC_SAMPLETIME_55POINT5);
|
||||||
|
adc_regular_channel_config(ADC0, 1, ADC_CHANNEL_1, ADC_SAMPLETIME_55POINT5);
|
||||||
|
adc_regular_channel_config(ADC0, 2, ADC_CHANNEL_2, ADC_SAMPLETIME_55POINT5);
|
||||||
|
adc_regular_channel_config(ADC0, 3, ADC_CHANNEL_3, ADC_SAMPLETIME_55POINT5);
|
||||||
|
adc_regular_channel_config(ADC0, 4, ADC_CHANNEL_4, ADC_SAMPLETIME_55POINT5);
|
||||||
|
adc_regular_channel_config(ADC0, 5, ADC_CHANNEL_5, ADC_SAMPLETIME_55POINT5);
|
||||||
|
adc_regular_channel_config(ADC0, 6, ADC_CHANNEL_6, ADC_SAMPLETIME_55POINT5);
|
||||||
|
adc_regular_channel_config(ADC0, 7, ADC_CHANNEL_7, ADC_SAMPLETIME_55POINT5);
|
||||||
|
|
||||||
|
/* ADC trigger config */
|
||||||
|
adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);
|
||||||
|
adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE);
|
||||||
|
|
||||||
|
/* ADC discontinuous mode */
|
||||||
|
adc_discontinuous_mode_config(ADC0, ADC_REGULAR_CHANNEL, 3);
|
||||||
|
|
||||||
|
/* enable ADC interface */
|
||||||
|
adc_enable(ADC0);
|
||||||
|
delay_1ms(1);
|
||||||
|
/* ADC calibration and reset calibration */
|
||||||
|
adc_calibration_enable(ADC0);
|
||||||
|
|
||||||
|
/* ADC DMA function enable */
|
||||||
|
adc_dma_mode_enable(ADC0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* retarget the C library printf function to the USART */
|
||||||
|
int fputc(int ch, FILE *f)
|
||||||
|
{
|
||||||
|
usart_data_transmit(EVAL_COM1, (uint8_t)ch);
|
||||||
|
while(RESET == usart_flag_get(EVAL_COM1, USART_FLAG_TBE));
|
||||||
|
return ch;
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
/*!
|
||||||
|
\file readme.txt
|
||||||
|
\brief description of the ADC discontinuous mode example
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
This demo is based on the GD32107C-EVAL-V1.3 board, it shows how to use the ADC discontinuous
|
||||||
|
mode. The ADC is configured in discontinuous mode, group length is 8, conversion length is 3,
|
||||||
|
using software trigger. Every trigger converts 3 channels.
|
||||||
|
|
||||||
|
We can watch array adc_value[] in debug mode or by COM1.
|
||||||
|
Jump JP4 to Usart1.
|
||||||
|
|
@ -0,0 +1,83 @@
|
|||||||
|
/*!
|
||||||
|
\file systick.c
|
||||||
|
\brief the systick configuration file
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
#include "systick.h"
|
||||||
|
|
||||||
|
volatile static uint32_t delay;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure systick
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void systick_config(void)
|
||||||
|
{
|
||||||
|
/* setup systick timer for 1000Hz interrupts */
|
||||||
|
if (SysTick_Config(SystemCoreClock / 1000U)){
|
||||||
|
/* capture error */
|
||||||
|
while (1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* configure the systick handler priority */
|
||||||
|
NVIC_SetPriority(SysTick_IRQn, 0x00U);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief delay a time in milliseconds
|
||||||
|
\param[in] count: count in milliseconds
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void delay_1ms(uint32_t count)
|
||||||
|
{
|
||||||
|
delay = count;
|
||||||
|
|
||||||
|
while(0U != delay){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief delay decrement
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void delay_decrement(void)
|
||||||
|
{
|
||||||
|
if (0U != delay){
|
||||||
|
delay--;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
/*!
|
||||||
|
\file systick.h
|
||||||
|
\brief the header file of systick
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SYS_TICK_H
|
||||||
|
#define SYS_TICK_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
/* configure systick */
|
||||||
|
void systick_config(void);
|
||||||
|
/* delay a time in milliseconds */
|
||||||
|
void delay_1ms(uint32_t count);
|
||||||
|
/* delay decrement */
|
||||||
|
void delay_decrement(void);
|
||||||
|
|
||||||
|
#endif /* SYS_TICK_H */
|
@ -0,0 +1,152 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.c
|
||||||
|
\brief interrupt service routines
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x_it.h"
|
||||||
|
#include "systick.h"
|
||||||
|
#include "gd32f10x_eval.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles NMI exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void NMI_Handler(void)
|
||||||
|
{
|
||||||
|
/* if NMI exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles HardFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void HardFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Hard Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles MemManage exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void MemManage_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Memory Manage exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles BusFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void BusFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Bus Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles UsageFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void UsageFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Usage Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SVC exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SVC_Handler(void)
|
||||||
|
{
|
||||||
|
/* if SVC exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles DebugMon exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void DebugMon_Handler(void)
|
||||||
|
{
|
||||||
|
/* if DebugMon exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles PendSV exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void PendSV_Handler(void)
|
||||||
|
{
|
||||||
|
/* if PendSV exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SysTick exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SysTick_Handler(void)
|
||||||
|
{
|
||||||
|
delay_decrement();
|
||||||
|
}
|
@ -0,0 +1,60 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.h
|
||||||
|
\brief the header file of the ISR
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_IT_H
|
||||||
|
#define GD32F10X_IT_H
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
|
||||||
|
/* function declarations */
|
||||||
|
/* this function handles NMI exception */
|
||||||
|
void NMI_Handler(void);
|
||||||
|
/* this function handles HardFault exception */
|
||||||
|
void HardFault_Handler(void);
|
||||||
|
/* this function handles MemManage exception */
|
||||||
|
void MemManage_Handler(void);
|
||||||
|
/* this function handles BusFault exception */
|
||||||
|
void BusFault_Handler(void);
|
||||||
|
/* this function handles UsageFault exception */
|
||||||
|
void UsageFault_Handler(void);
|
||||||
|
/* this function handles SVC exception */
|
||||||
|
void SVC_Handler(void);
|
||||||
|
/* this function handles DebugMon exception */
|
||||||
|
void DebugMon_Handler(void);
|
||||||
|
/* this function handles PendSV exception */
|
||||||
|
void PendSV_Handler(void);
|
||||||
|
/* this function handles SysTick exception */
|
||||||
|
void SysTick_Handler(void);
|
||||||
|
|
||||||
|
#endif /* GD32F10X_IT_H */
|
@ -0,0 +1,62 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_libopt.h
|
||||||
|
\brief library optional for gd32f10x
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_LIBOPT_H
|
||||||
|
#define GD32F10X_LIBOPT_H
|
||||||
|
|
||||||
|
#include "gd32f10x_adc.h"
|
||||||
|
#include "gd32f10x_bkp.h"
|
||||||
|
#include "gd32f10x_can.h"
|
||||||
|
#include "gd32f10x_crc.h"
|
||||||
|
#include "gd32f10x_dac.h"
|
||||||
|
#include "gd32f10x_dma.h"
|
||||||
|
#include "gd32f10x_enet.h"
|
||||||
|
#include "gd32f10x_exmc.h"
|
||||||
|
#include "gd32f10x_exti.h"
|
||||||
|
#include "gd32f10x_fmc.h"
|
||||||
|
#include "gd32f10x_gpio.h"
|
||||||
|
#include "gd32f10x_i2c.h"
|
||||||
|
#include "gd32f10x_fwdgt.h"
|
||||||
|
#include "gd32f10x_dbg.h"
|
||||||
|
#include "gd32f10x_misc.h"
|
||||||
|
#include "gd32f10x_pmu.h"
|
||||||
|
#include "gd32f10x_rcu.h"
|
||||||
|
#include "gd32f10x_rtc.h"
|
||||||
|
#include "gd32f10x_sdio.h"
|
||||||
|
#include "gd32f10x_spi.h"
|
||||||
|
#include "gd32f10x_timer.h"
|
||||||
|
#include "gd32f10x_usart.h"
|
||||||
|
#include "gd32f10x_wwdgt.h"
|
||||||
|
|
||||||
|
#endif /* GD32F10X_LIBOPT_H */
|
@ -0,0 +1,188 @@
|
|||||||
|
/*!
|
||||||
|
\file main.c
|
||||||
|
\brief ADC_regular_channel_with_DMA
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
#include "systick.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "gd32f10x_eval.h"
|
||||||
|
|
||||||
|
uint16_t adc_value[4];
|
||||||
|
|
||||||
|
void rcu_config(void);
|
||||||
|
void gpio_config(void);
|
||||||
|
void dma_config(void);
|
||||||
|
void adc_config(void);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief main function
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
/* system clocks configuration */
|
||||||
|
rcu_config();
|
||||||
|
/* systick configuration */
|
||||||
|
systick_config();
|
||||||
|
/* GPIO configuration */
|
||||||
|
gpio_config();
|
||||||
|
/* configure COM port */
|
||||||
|
gd_eval_com_init(EVAL_COM0);
|
||||||
|
/* DMA configuration */
|
||||||
|
dma_config();
|
||||||
|
/* ADC configuration */
|
||||||
|
adc_config();
|
||||||
|
|
||||||
|
while(1){
|
||||||
|
delay_1ms(1000);
|
||||||
|
printf("\r\n //*******************************//");
|
||||||
|
printf("\r\n ADC regular channel data = %04X", adc_value[0]);
|
||||||
|
printf("\r\n ADC regular channel data = %04X", adc_value[1]);
|
||||||
|
printf("\r\n ADC regular channel data = %04X", adc_value[2]);
|
||||||
|
printf("\r\n ADC regular channel data = %04X\r\n", adc_value[3]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the different system clocks
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void rcu_config(void)
|
||||||
|
{
|
||||||
|
/* enable GPIOA clock */
|
||||||
|
rcu_periph_clock_enable(RCU_GPIOA);
|
||||||
|
/* enable ADC clock */
|
||||||
|
rcu_periph_clock_enable(RCU_ADC0);
|
||||||
|
/* enable DMA0 clock */
|
||||||
|
rcu_periph_clock_enable(RCU_DMA0);
|
||||||
|
/* config ADC clock */
|
||||||
|
rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV8);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the GPIO peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void gpio_config(void)
|
||||||
|
{
|
||||||
|
/* config the GPIO as analog mode */
|
||||||
|
gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the DMA peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void dma_config(void)
|
||||||
|
{
|
||||||
|
/* ADC_DMA_channel configuration */
|
||||||
|
dma_parameter_struct dma_data_parameter;
|
||||||
|
|
||||||
|
/* ADC DMA_channel configuration */
|
||||||
|
dma_deinit(DMA0, DMA_CH0);
|
||||||
|
|
||||||
|
/* initialize DMA single data mode */
|
||||||
|
dma_data_parameter.periph_addr = (uint32_t)(&ADC_RDATA(ADC0));
|
||||||
|
dma_data_parameter.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
|
||||||
|
dma_data_parameter.memory_addr = (uint32_t)(&adc_value);
|
||||||
|
dma_data_parameter.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
|
||||||
|
dma_data_parameter.periph_width = DMA_PERIPHERAL_WIDTH_16BIT;
|
||||||
|
dma_data_parameter.memory_width = DMA_MEMORY_WIDTH_16BIT;
|
||||||
|
dma_data_parameter.direction = DMA_PERIPHERAL_TO_MEMORY;
|
||||||
|
dma_data_parameter.number = 4U;
|
||||||
|
dma_data_parameter.priority = DMA_PRIORITY_HIGH;
|
||||||
|
dma_init(DMA0, DMA_CH0, &dma_data_parameter);
|
||||||
|
dma_circulation_enable(DMA0, DMA_CH0);
|
||||||
|
|
||||||
|
/* enable DMA channel */
|
||||||
|
dma_channel_enable(DMA0, DMA_CH0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the ADC peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void adc_config(void)
|
||||||
|
{
|
||||||
|
/* reset ADC */
|
||||||
|
adc_deinit(ADC0);
|
||||||
|
/* ADC mode config */
|
||||||
|
adc_mode_config(ADC_MODE_FREE);
|
||||||
|
/* ADC contineous function enable */
|
||||||
|
adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, ENABLE);
|
||||||
|
/* ADC scan mode disable */
|
||||||
|
adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE);
|
||||||
|
/* ADC data alignment config */
|
||||||
|
adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);
|
||||||
|
/* ADC channel length config */
|
||||||
|
adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 4);
|
||||||
|
|
||||||
|
/* ADC regular channel config */
|
||||||
|
adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_0, ADC_SAMPLETIME_55POINT5);
|
||||||
|
adc_regular_channel_config(ADC0, 1, ADC_CHANNEL_1, ADC_SAMPLETIME_55POINT5);
|
||||||
|
adc_regular_channel_config(ADC0, 2, ADC_CHANNEL_2, ADC_SAMPLETIME_55POINT5);
|
||||||
|
adc_regular_channel_config(ADC0, 3, ADC_CHANNEL_3, ADC_SAMPLETIME_55POINT5);
|
||||||
|
|
||||||
|
/* ADC trigger config */
|
||||||
|
adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);
|
||||||
|
adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE);
|
||||||
|
|
||||||
|
/* enable ADC interface */
|
||||||
|
adc_enable(ADC0);
|
||||||
|
delay_1ms(1);
|
||||||
|
/* ADC calibration and reset calibration */
|
||||||
|
adc_calibration_enable(ADC0);
|
||||||
|
|
||||||
|
/* ADC DMA function enable */
|
||||||
|
adc_dma_mode_enable(ADC0);
|
||||||
|
/* ADC software trigger enable */
|
||||||
|
adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* retarget the C library printf function to the USART */
|
||||||
|
int fputc(int ch, FILE *f)
|
||||||
|
{
|
||||||
|
usart_data_transmit(EVAL_COM0, (uint8_t)ch);
|
||||||
|
while(RESET == usart_flag_get(EVAL_COM0, USART_FLAG_TBE));
|
||||||
|
return ch;
|
||||||
|
}
|
@ -0,0 +1,44 @@
|
|||||||
|
/*!
|
||||||
|
\file readme.txt
|
||||||
|
\brief description of the ADC regular channel with DMA
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
This demo is based on the GD32107C-EVAL-V1.3 board, it shows how to use the ADC to
|
||||||
|
convert analog signal to digital data through DMA. The ADC is configured in continuous
|
||||||
|
mode, PA0~PA3 is chosen as analog input pin.
|
||||||
|
|
||||||
|
As the ADC conversion begins by software, the converted data from ADC_RDATA register
|
||||||
|
to SRAM begins continuously. Users can change the voltage on the pins, and check if the
|
||||||
|
values match the converted data through the watch window.
|
||||||
|
|
||||||
|
The analog input pin should configured to AIN mode. We can watch array adc_value[] in
|
||||||
|
debug mode or COM.
|
@ -0,0 +1,83 @@
|
|||||||
|
/*!
|
||||||
|
\file systick.c
|
||||||
|
\brief the systick configuration file
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
#include "systick.h"
|
||||||
|
|
||||||
|
volatile static uint32_t delay;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure systick
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void systick_config(void)
|
||||||
|
{
|
||||||
|
/* setup systick timer for 1000Hz interrupts */
|
||||||
|
if (SysTick_Config(SystemCoreClock / 1000U)){
|
||||||
|
/* capture error */
|
||||||
|
while (1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* configure the systick handler priority */
|
||||||
|
NVIC_SetPriority(SysTick_IRQn, 0x00U);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief delay a time in milliseconds
|
||||||
|
\param[in] count: count in milliseconds
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void delay_1ms(uint32_t count)
|
||||||
|
{
|
||||||
|
delay = count;
|
||||||
|
|
||||||
|
while(0U != delay){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief delay decrement
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void delay_decrement(void)
|
||||||
|
{
|
||||||
|
if (0U != delay){
|
||||||
|
delay--;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
/*!
|
||||||
|
\file systick.h
|
||||||
|
\brief the header file of systick
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SYS_TICK_H
|
||||||
|
#define SYS_TICK_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
/* configure systick */
|
||||||
|
void systick_config(void);
|
||||||
|
/* delay a time in milliseconds */
|
||||||
|
void delay_1ms(uint32_t count);
|
||||||
|
/* delay decrement */
|
||||||
|
void delay_decrement(void);
|
||||||
|
|
||||||
|
#endif /* SYS_TICK_H */
|
@ -0,0 +1,152 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.c
|
||||||
|
\brief interrupt service routines
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x_it.h"
|
||||||
|
#include "systick.h"
|
||||||
|
#include "gd32f10x_eval.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles NMI exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void NMI_Handler(void)
|
||||||
|
{
|
||||||
|
/* if NMI exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles HardFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void HardFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Hard Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles MemManage exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void MemManage_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Memory Manage exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles BusFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void BusFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Bus Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles UsageFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void UsageFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Usage Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SVC exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SVC_Handler(void)
|
||||||
|
{
|
||||||
|
/* if SVC exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles DebugMon exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void DebugMon_Handler(void)
|
||||||
|
{
|
||||||
|
/* if DebugMon exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles PendSV exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void PendSV_Handler(void)
|
||||||
|
{
|
||||||
|
/* if PendSV exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SysTick exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SysTick_Handler(void)
|
||||||
|
{
|
||||||
|
delay_decrement();
|
||||||
|
}
|
@ -0,0 +1,60 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.h
|
||||||
|
\brief the header file of the ISR
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_IT_H
|
||||||
|
#define GD32F10X_IT_H
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
|
||||||
|
/* function declarations */
|
||||||
|
/* this function handles NMI exception */
|
||||||
|
void NMI_Handler(void);
|
||||||
|
/* this function handles HardFault exception */
|
||||||
|
void HardFault_Handler(void);
|
||||||
|
/* this function handles MemManage exception */
|
||||||
|
void MemManage_Handler(void);
|
||||||
|
/* this function handles BusFault exception */
|
||||||
|
void BusFault_Handler(void);
|
||||||
|
/* this function handles UsageFault exception */
|
||||||
|
void UsageFault_Handler(void);
|
||||||
|
/* this function handles SVC exception */
|
||||||
|
void SVC_Handler(void);
|
||||||
|
/* this function handles DebugMon exception */
|
||||||
|
void DebugMon_Handler(void);
|
||||||
|
/* this function handles PendSV exception */
|
||||||
|
void PendSV_Handler(void);
|
||||||
|
/* this function handles SysTick exception */
|
||||||
|
void SysTick_Handler(void);
|
||||||
|
|
||||||
|
#endif /* GD32F10X_IT_H */
|
@ -0,0 +1,62 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_libopt.h
|
||||||
|
\brief library optional for gd32f10x
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_LIBOPT_H
|
||||||
|
#define GD32F10X_LIBOPT_H
|
||||||
|
|
||||||
|
#include "gd32f10x_adc.h"
|
||||||
|
#include "gd32f10x_bkp.h"
|
||||||
|
#include "gd32f10x_can.h"
|
||||||
|
#include "gd32f10x_crc.h"
|
||||||
|
#include "gd32f10x_dac.h"
|
||||||
|
#include "gd32f10x_dma.h"
|
||||||
|
#include "gd32f10x_enet.h"
|
||||||
|
#include "gd32f10x_exmc.h"
|
||||||
|
#include "gd32f10x_exti.h"
|
||||||
|
#include "gd32f10x_fmc.h"
|
||||||
|
#include "gd32f10x_gpio.h"
|
||||||
|
#include "gd32f10x_i2c.h"
|
||||||
|
#include "gd32f10x_fwdgt.h"
|
||||||
|
#include "gd32f10x_dbg.h"
|
||||||
|
#include "gd32f10x_misc.h"
|
||||||
|
#include "gd32f10x_pmu.h"
|
||||||
|
#include "gd32f10x_rcu.h"
|
||||||
|
#include "gd32f10x_rtc.h"
|
||||||
|
#include "gd32f10x_sdio.h"
|
||||||
|
#include "gd32f10x_spi.h"
|
||||||
|
#include "gd32f10x_timer.h"
|
||||||
|
#include "gd32f10x_usart.h"
|
||||||
|
#include "gd32f10x_wwdgt.h"
|
||||||
|
|
||||||
|
#endif /* GD32F10X_LIBOPT_H */
|
@ -0,0 +1,148 @@
|
|||||||
|
/*!
|
||||||
|
\file main.c
|
||||||
|
\brief ADC software trigger regular channel polling
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
#include "systick.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "gd32f10x_eval.h"
|
||||||
|
|
||||||
|
__IO uint16_t adc_value[4];
|
||||||
|
|
||||||
|
void rcu_config(void);
|
||||||
|
void gpio_config(void);
|
||||||
|
void adc_config(void);
|
||||||
|
uint16_t adc_channel_sample(uint8_t channel);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief main function
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
/* system clocks configuration */
|
||||||
|
rcu_config();
|
||||||
|
/* systick configuration */
|
||||||
|
systick_config();
|
||||||
|
/* GPIO configuration */
|
||||||
|
gpio_config();
|
||||||
|
/* ADC configuration */
|
||||||
|
adc_config();
|
||||||
|
|
||||||
|
while(1){
|
||||||
|
adc_value[0] = adc_channel_sample(ADC_CHANNEL_1);
|
||||||
|
adc_value[1] = adc_channel_sample(ADC_CHANNEL_2);
|
||||||
|
adc_value[2] = adc_channel_sample(ADC_CHANNEL_3);
|
||||||
|
adc_value[3] = adc_channel_sample(ADC_CHANNEL_4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the different system clocks
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void rcu_config(void)
|
||||||
|
{
|
||||||
|
/* enable GPIOA clock */
|
||||||
|
rcu_periph_clock_enable(RCU_GPIOA);
|
||||||
|
/* enable ADC clock */
|
||||||
|
rcu_periph_clock_enable(RCU_ADC0);
|
||||||
|
/* enable DMA0 clock */
|
||||||
|
rcu_periph_clock_enable(RCU_DMA0);
|
||||||
|
/* config ADC clock */
|
||||||
|
rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV8);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the GPIO peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void gpio_config(void)
|
||||||
|
{
|
||||||
|
/* config the GPIO as analog mode */
|
||||||
|
gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the ADC peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void adc_config(void)
|
||||||
|
{
|
||||||
|
/* ADC mode config */
|
||||||
|
adc_mode_config(ADC_MODE_FREE);
|
||||||
|
/* ADC data alignment config */
|
||||||
|
adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);
|
||||||
|
/* ADC channel length config */
|
||||||
|
adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 1U);
|
||||||
|
|
||||||
|
/* ADC trigger config */
|
||||||
|
adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);
|
||||||
|
/* ADC external trigger config */
|
||||||
|
adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE);
|
||||||
|
|
||||||
|
/* enable ADC interface */
|
||||||
|
adc_enable(ADC0);
|
||||||
|
delay_1ms(1U);
|
||||||
|
/* ADC calibration and reset calibration */
|
||||||
|
adc_calibration_enable(ADC0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief ADC channel sample
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
uint16_t adc_channel_sample(uint8_t channel)
|
||||||
|
{
|
||||||
|
/* ADC regular channel config */
|
||||||
|
adc_regular_channel_config(ADC0, 0U, channel, ADC_SAMPLETIME_7POINT5);
|
||||||
|
/* ADC software trigger enable */
|
||||||
|
adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);
|
||||||
|
|
||||||
|
/* wait the end of conversion flag */
|
||||||
|
while(!adc_flag_get(ADC0, ADC_FLAG_EOC));
|
||||||
|
/* clear the end of conversion flag */
|
||||||
|
adc_flag_clear(ADC0, ADC_FLAG_EOC);
|
||||||
|
/* return regular channel sample value */
|
||||||
|
return (adc_regular_data_read(ADC0));
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
/*!
|
||||||
|
\file readme.txt
|
||||||
|
\brief description of the ADC software trigger regular channel polling
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
This demo is based on the GD32107C-EVAL-V1.3 board, it shows how to use the ADC to
|
||||||
|
convert analog signal to digital data, four channel analog signals are collected in a
|
||||||
|
certain sequence. PA1~PA4 are chosen as analog input pin(AIN mode).
|
||||||
|
|
||||||
|
As the ADC conversion begins by software, the conversion data will read with checking
|
||||||
|
the EOC flag.
|
||||||
|
|
||||||
|
Users can change the input signal on the GD32107C-EVAL-V1.3 board, and check if its
|
||||||
|
value matches the converted data through the watch window.
|
@ -0,0 +1,83 @@
|
|||||||
|
/*!
|
||||||
|
\file systick.c
|
||||||
|
\brief the systick configuration file
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
#include "systick.h"
|
||||||
|
|
||||||
|
volatile static uint32_t delay;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure systick
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void systick_config(void)
|
||||||
|
{
|
||||||
|
/* setup systick timer for 1000Hz interrupts */
|
||||||
|
if (SysTick_Config(SystemCoreClock / 1000U)){
|
||||||
|
/* capture error */
|
||||||
|
while (1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* configure the systick handler priority */
|
||||||
|
NVIC_SetPriority(SysTick_IRQn, 0x00U);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief delay a time in milliseconds
|
||||||
|
\param[in] count: count in milliseconds
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void delay_1ms(uint32_t count)
|
||||||
|
{
|
||||||
|
delay = count;
|
||||||
|
|
||||||
|
while(0U != delay){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief delay decrement
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void delay_decrement(void)
|
||||||
|
{
|
||||||
|
if (0U != delay){
|
||||||
|
delay--;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
/*!
|
||||||
|
\file systick.h
|
||||||
|
\brief the header file of systick
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SYS_TICK_H
|
||||||
|
#define SYS_TICK_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
/* configure systick */
|
||||||
|
void systick_config(void);
|
||||||
|
/* delay a time in milliseconds */
|
||||||
|
void delay_1ms(uint32_t count);
|
||||||
|
/* delay decrement */
|
||||||
|
void delay_decrement(void);
|
||||||
|
|
||||||
|
#endif /* SYS_TICK_H */
|
@ -0,0 +1,152 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.c
|
||||||
|
\brief interrupt service routines
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x_it.h"
|
||||||
|
#include "systick.h"
|
||||||
|
#include "gd32f10x_eval.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles NMI exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void NMI_Handler(void)
|
||||||
|
{
|
||||||
|
/* if NMI exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles HardFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void HardFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Hard Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles MemManage exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void MemManage_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Memory Manage exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles BusFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void BusFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Bus Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles UsageFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void UsageFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Usage Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SVC exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SVC_Handler(void)
|
||||||
|
{
|
||||||
|
/* if SVC exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles DebugMon exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void DebugMon_Handler(void)
|
||||||
|
{
|
||||||
|
/* if DebugMon exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles PendSV exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void PendSV_Handler(void)
|
||||||
|
{
|
||||||
|
/* if PendSV exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SysTick exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SysTick_Handler(void)
|
||||||
|
{
|
||||||
|
delay_decrement();
|
||||||
|
}
|
@ -0,0 +1,60 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.h
|
||||||
|
\brief the header file of the ISR
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_IT_H
|
||||||
|
#define GD32F10X_IT_H
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
|
||||||
|
/* function declarations */
|
||||||
|
/* this function handles NMI exception */
|
||||||
|
void NMI_Handler(void);
|
||||||
|
/* this function handles HardFault exception */
|
||||||
|
void HardFault_Handler(void);
|
||||||
|
/* this function handles MemManage exception */
|
||||||
|
void MemManage_Handler(void);
|
||||||
|
/* this function handles BusFault exception */
|
||||||
|
void BusFault_Handler(void);
|
||||||
|
/* this function handles UsageFault exception */
|
||||||
|
void UsageFault_Handler(void);
|
||||||
|
/* this function handles SVC exception */
|
||||||
|
void SVC_Handler(void);
|
||||||
|
/* this function handles DebugMon exception */
|
||||||
|
void DebugMon_Handler(void);
|
||||||
|
/* this function handles PendSV exception */
|
||||||
|
void PendSV_Handler(void);
|
||||||
|
/* this function handles SysTick exception */
|
||||||
|
void SysTick_Handler(void);
|
||||||
|
|
||||||
|
#endif /* GD32F10X_IT_H */
|
@ -0,0 +1,62 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_libopt.h
|
||||||
|
\brief library optional for gd32f10x
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_LIBOPT_H
|
||||||
|
#define GD32F10X_LIBOPT_H
|
||||||
|
|
||||||
|
#include "gd32f10x_adc.h"
|
||||||
|
#include "gd32f10x_bkp.h"
|
||||||
|
#include "gd32f10x_can.h"
|
||||||
|
#include "gd32f10x_crc.h"
|
||||||
|
#include "gd32f10x_dac.h"
|
||||||
|
#include "gd32f10x_dma.h"
|
||||||
|
#include "gd32f10x_enet.h"
|
||||||
|
#include "gd32f10x_exmc.h"
|
||||||
|
#include "gd32f10x_exti.h"
|
||||||
|
#include "gd32f10x_fmc.h"
|
||||||
|
#include "gd32f10x_gpio.h"
|
||||||
|
#include "gd32f10x_i2c.h"
|
||||||
|
#include "gd32f10x_fwdgt.h"
|
||||||
|
#include "gd32f10x_dbg.h"
|
||||||
|
#include "gd32f10x_misc.h"
|
||||||
|
#include "gd32f10x_pmu.h"
|
||||||
|
#include "gd32f10x_rcu.h"
|
||||||
|
#include "gd32f10x_rtc.h"
|
||||||
|
#include "gd32f10x_sdio.h"
|
||||||
|
#include "gd32f10x_spi.h"
|
||||||
|
#include "gd32f10x_timer.h"
|
||||||
|
#include "gd32f10x_usart.h"
|
||||||
|
#include "gd32f10x_wwdgt.h"
|
||||||
|
|
||||||
|
#endif /* GD32F10X_LIBOPT_H */
|
@ -0,0 +1,141 @@
|
|||||||
|
/*!
|
||||||
|
\file main.c
|
||||||
|
\brief ADC channel of temperature and Vref
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
#include "systick.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "gd32f10x_eval.h"
|
||||||
|
|
||||||
|
float temperature;
|
||||||
|
float vref_value;
|
||||||
|
|
||||||
|
void rcu_config(void);
|
||||||
|
void adc_config(void);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief main function
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
/* configure systick */
|
||||||
|
systick_config();
|
||||||
|
/* system clocks configuration */
|
||||||
|
rcu_config();
|
||||||
|
/* ADC configuration */
|
||||||
|
adc_config();
|
||||||
|
/* USART configuration */
|
||||||
|
gd_eval_com_init(EVAL_COM1);
|
||||||
|
|
||||||
|
while(1){
|
||||||
|
/* ADC software trigger enable */
|
||||||
|
adc_software_trigger_enable(ADC0, ADC_INSERTED_CHANNEL);
|
||||||
|
/* delay a time in milliseconds */
|
||||||
|
delay_1ms(2000);
|
||||||
|
|
||||||
|
/* value convert */
|
||||||
|
temperature = (1.42 - ADC_IDATA0(ADC0)*3.3/4096) * 1000 / 4.3 + 25;
|
||||||
|
vref_value = (ADC_IDATA1(ADC0) * 3.3 / 4096);
|
||||||
|
|
||||||
|
/* value print */
|
||||||
|
printf(" the temperature data is %2.0f degrees Celsius\r\n", temperature);
|
||||||
|
printf(" the reference voltage data is %5.3fV \r\n", vref_value);
|
||||||
|
printf(" \r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the different system clocks
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void rcu_config(void)
|
||||||
|
{
|
||||||
|
/* enable ADC clock */
|
||||||
|
rcu_periph_clock_enable(RCU_ADC0);
|
||||||
|
/* config ADC clock */
|
||||||
|
rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV8);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the ADC peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void adc_config(void)
|
||||||
|
{
|
||||||
|
/* reset ADC */
|
||||||
|
adc_deinit(ADC0);
|
||||||
|
/* ADC mode config */
|
||||||
|
adc_mode_config(ADC_MODE_FREE);
|
||||||
|
/* ADC scan function enable */
|
||||||
|
adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE);
|
||||||
|
/* ADC data alignment config */
|
||||||
|
adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);
|
||||||
|
/* ADC temperature and Vrefint enable */
|
||||||
|
adc_tempsensor_vrefint_enable();
|
||||||
|
|
||||||
|
/* ADC channel length config */
|
||||||
|
adc_channel_length_config(ADC0, ADC_INSERTED_CHANNEL, 2);
|
||||||
|
|
||||||
|
/* ADC temperature sensor channel config */
|
||||||
|
adc_inserted_channel_config(ADC0, 0, ADC_CHANNEL_16, ADC_SAMPLETIME_239POINT5);
|
||||||
|
/* ADC internal reference voltage channel config */
|
||||||
|
adc_inserted_channel_config(ADC0, 1, ADC_CHANNEL_17, ADC_SAMPLETIME_239POINT5);
|
||||||
|
|
||||||
|
/* ADC trigger config */
|
||||||
|
adc_external_trigger_source_config(ADC0, ADC_INSERTED_CHANNEL, ADC0_1_2_EXTTRIG_INSERTED_NONE);
|
||||||
|
|
||||||
|
adc_external_trigger_config(ADC0, ADC_INSERTED_CHANNEL, ENABLE);
|
||||||
|
|
||||||
|
/* enable ADC interface */
|
||||||
|
adc_enable(ADC0);
|
||||||
|
delay_1ms(1);
|
||||||
|
/* ADC calibration and reset calibration */
|
||||||
|
adc_calibration_enable(ADC0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* retarget the C library printf function to the USART */
|
||||||
|
int fputc(int ch, FILE *f)
|
||||||
|
{
|
||||||
|
usart_data_transmit(EVAL_COM1, (uint8_t)ch);
|
||||||
|
while(RESET == usart_flag_get(EVAL_COM1, USART_FLAG_TBE));
|
||||||
|
return ch;
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
/*!
|
||||||
|
\file readme.txt
|
||||||
|
\brief description of ADC channel of temperature and vref
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
This demo is based on the GD32107C-EVAL-V1.3 board, it shows how to use the ADC to
|
||||||
|
convert analog signal to digital data. The ADC is configured in dependent mode, inner
|
||||||
|
channel16(temperature sensor channel) and channel17(Vref channel) are chosen as analog
|
||||||
|
input pin.
|
||||||
|
|
||||||
|
As the ADC convertion begins by software, the converted data in the ADC_IDATAx register,
|
||||||
|
where the x is 0 to 1.
|
||||||
|
|
||||||
|
We can watch temperature and vref_value in debug mode or by COM1.
|
||||||
|
Jump JP4 to Usart1.
|
||||||
|
|
@ -0,0 +1,83 @@
|
|||||||
|
/*!
|
||||||
|
\file systick.c
|
||||||
|
\brief the systick configuration file
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
#include "systick.h"
|
||||||
|
|
||||||
|
volatile static uint32_t delay;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure systick
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void systick_config(void)
|
||||||
|
{
|
||||||
|
/* setup systick timer for 1000Hz interrupts */
|
||||||
|
if (SysTick_Config(SystemCoreClock / 1000U)){
|
||||||
|
/* capture error */
|
||||||
|
while (1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* configure the systick handler priority */
|
||||||
|
NVIC_SetPriority(SysTick_IRQn, 0x00U);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief delay a time in milliseconds
|
||||||
|
\param[in] count: count in milliseconds
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void delay_1ms(uint32_t count)
|
||||||
|
{
|
||||||
|
delay = count;
|
||||||
|
|
||||||
|
while(0U != delay){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief delay decrement
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void delay_decrement(void)
|
||||||
|
{
|
||||||
|
if (0U != delay){
|
||||||
|
delay--;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
/*!
|
||||||
|
\file systick.h
|
||||||
|
\brief the header file of systick
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SYS_TICK_H
|
||||||
|
#define SYS_TICK_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
/* configure systick */
|
||||||
|
void systick_config(void);
|
||||||
|
/* delay a time in milliseconds */
|
||||||
|
void delay_1ms(uint32_t count);
|
||||||
|
/* delay decrement */
|
||||||
|
void delay_decrement(void);
|
||||||
|
|
||||||
|
#endif /* SYS_TICK_H */
|
@ -0,0 +1,169 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.c
|
||||||
|
\brief interrupt service routines
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x_it.h"
|
||||||
|
#include "systick.h"
|
||||||
|
#include "gd32f10x_eval.h"
|
||||||
|
|
||||||
|
extern int data;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles NMI exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void NMI_Handler(void)
|
||||||
|
{
|
||||||
|
/* if NMI exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles HardFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void HardFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Hard Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles MemManage exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void MemManage_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Memory Manage exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles BusFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void BusFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Bus Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles UsageFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void UsageFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Usage Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SVC exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SVC_Handler(void)
|
||||||
|
{
|
||||||
|
/* if SVC exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles DebugMon exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void DebugMon_Handler(void)
|
||||||
|
{
|
||||||
|
/* if DebugMon exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles PendSV exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void PendSV_Handler(void)
|
||||||
|
{
|
||||||
|
/* if PendSV exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SysTick exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SysTick_Handler(void)
|
||||||
|
{
|
||||||
|
delay_decrement();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles ADC0_1 exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void ADC0_1_IRQHandler(void)
|
||||||
|
{
|
||||||
|
/* clear the ADC interrupt or status flag */
|
||||||
|
adc_interrupt_flag_clear(ADC1, ADC_INT_FLAG_WDE);
|
||||||
|
/* turn on LED2 */
|
||||||
|
gd_eval_led_on(LED2);
|
||||||
|
data = 1;
|
||||||
|
}
|
@ -0,0 +1,62 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.h
|
||||||
|
\brief the header file of the ISR
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_IT_H
|
||||||
|
#define GD32F10X_IT_H
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
|
||||||
|
/* function declarations */
|
||||||
|
/* this function handles NMI exception */
|
||||||
|
void NMI_Handler(void);
|
||||||
|
/* this function handles HardFault exception */
|
||||||
|
void HardFault_Handler(void);
|
||||||
|
/* this function handles MemManage exception */
|
||||||
|
void MemManage_Handler(void);
|
||||||
|
/* this function handles BusFault exception */
|
||||||
|
void BusFault_Handler(void);
|
||||||
|
/* this function handles UsageFault exception */
|
||||||
|
void UsageFault_Handler(void);
|
||||||
|
/* this function handles SVC exception */
|
||||||
|
void SVC_Handler(void);
|
||||||
|
/* this function handles DebugMon exception */
|
||||||
|
void DebugMon_Handler(void);
|
||||||
|
/* this function handles PendSV exception */
|
||||||
|
void PendSV_Handler(void);
|
||||||
|
/* this function handles SysTick exception */
|
||||||
|
void SysTick_Handler(void);
|
||||||
|
/* this function handles ADC0_1 exception */
|
||||||
|
void ADC0_1_IRQHandler(void);
|
||||||
|
|
||||||
|
#endif /* GD32F10X_IT_H */
|
@ -0,0 +1,62 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_libopt.h
|
||||||
|
\brief library optional for gd32f10x
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_LIBOPT_H
|
||||||
|
#define GD32F10X_LIBOPT_H
|
||||||
|
|
||||||
|
#include "gd32f10x_adc.h"
|
||||||
|
#include "gd32f10x_bkp.h"
|
||||||
|
#include "gd32f10x_can.h"
|
||||||
|
#include "gd32f10x_crc.h"
|
||||||
|
#include "gd32f10x_dac.h"
|
||||||
|
#include "gd32f10x_dma.h"
|
||||||
|
#include "gd32f10x_enet.h"
|
||||||
|
#include "gd32f10x_exmc.h"
|
||||||
|
#include "gd32f10x_exti.h"
|
||||||
|
#include "gd32f10x_fmc.h"
|
||||||
|
#include "gd32f10x_gpio.h"
|
||||||
|
#include "gd32f10x_i2c.h"
|
||||||
|
#include "gd32f10x_fwdgt.h"
|
||||||
|
#include "gd32f10x_dbg.h"
|
||||||
|
#include "gd32f10x_misc.h"
|
||||||
|
#include "gd32f10x_pmu.h"
|
||||||
|
#include "gd32f10x_rcu.h"
|
||||||
|
#include "gd32f10x_rtc.h"
|
||||||
|
#include "gd32f10x_sdio.h"
|
||||||
|
#include "gd32f10x_spi.h"
|
||||||
|
#include "gd32f10x_timer.h"
|
||||||
|
#include "gd32f10x_usart.h"
|
||||||
|
#include "gd32f10x_wwdgt.h"
|
||||||
|
|
||||||
|
#endif /* GD32F10X_LIBOPT_H */
|
@ -0,0 +1,165 @@
|
|||||||
|
/*!
|
||||||
|
\file main.c
|
||||||
|
\brief ADC analog watchdog
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
#include "systick.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "gd32f10x_eval.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define BOARD_ADC_CHANNEL ADC_CHANNEL_13
|
||||||
|
#define ADC_GPIO_PORT GPIOC
|
||||||
|
#define ADC_GPIO_PIN GPIO_PIN_3
|
||||||
|
|
||||||
|
uint16_t adc_value;
|
||||||
|
int data;
|
||||||
|
|
||||||
|
void rcu_config(void);
|
||||||
|
void gpio_config(void);
|
||||||
|
void nvic_config(void);
|
||||||
|
void adc_config(void);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief main function
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
/* system clocks configuration */
|
||||||
|
rcu_config();
|
||||||
|
/* systick configuration */
|
||||||
|
systick_config();
|
||||||
|
/* GPIO configuration */
|
||||||
|
gpio_config();
|
||||||
|
/* NVIC configuration */
|
||||||
|
nvic_config();
|
||||||
|
/* ADC configuration */
|
||||||
|
adc_config();
|
||||||
|
|
||||||
|
while(1){
|
||||||
|
if(1 == data){
|
||||||
|
/* turn off LED2 */
|
||||||
|
data = 0;
|
||||||
|
delay_1ms(3000);
|
||||||
|
gd_eval_led_off(LED2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the different system clocks
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void rcu_config(void)
|
||||||
|
{
|
||||||
|
/* enable GPIOC clock */
|
||||||
|
rcu_periph_clock_enable(RCU_GPIOC);
|
||||||
|
/* enable ADC1 clock */
|
||||||
|
rcu_periph_clock_enable(RCU_ADC1);
|
||||||
|
/* config ADC clock */
|
||||||
|
rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV8);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the GPIO peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void gpio_config(void)
|
||||||
|
{
|
||||||
|
/* configure led GPIO */
|
||||||
|
gd_eval_led_init(LED2);
|
||||||
|
/* config the GPIO as analog mode */
|
||||||
|
gpio_init(ADC_GPIO_PORT, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, ADC_GPIO_PIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure interrupt priority
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void nvic_config(void)
|
||||||
|
{
|
||||||
|
nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2);
|
||||||
|
nvic_irq_enable(ADC0_1_IRQn, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the ADC peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void adc_config(void)
|
||||||
|
{
|
||||||
|
/* reset ADC */
|
||||||
|
adc_deinit(ADC1);
|
||||||
|
/* ADC mode config */
|
||||||
|
adc_mode_config(ADC_MODE_FREE);
|
||||||
|
/* ADC contineous function enable */
|
||||||
|
adc_special_function_config(ADC1, ADC_CONTINUOUS_MODE, ENABLE);
|
||||||
|
/* ADC data alignment config */
|
||||||
|
adc_data_alignment_config(ADC1, ADC_DATAALIGN_RIGHT);
|
||||||
|
/* ADC channel length config */
|
||||||
|
adc_channel_length_config(ADC1, ADC_REGULAR_CHANNEL, 1);
|
||||||
|
|
||||||
|
/* ADC regular channel config */
|
||||||
|
adc_regular_channel_config(ADC1, 0, BOARD_ADC_CHANNEL, ADC_SAMPLETIME_55POINT5);
|
||||||
|
/* ADC trigger config */
|
||||||
|
adc_external_trigger_source_config(ADC1, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);
|
||||||
|
adc_external_trigger_config(ADC1, ADC_REGULAR_CHANNEL, ENABLE);
|
||||||
|
|
||||||
|
/* ADC analog watchdog threshold config */
|
||||||
|
adc_watchdog_threshold_config(ADC1, 0x0400, 0x0A00);
|
||||||
|
/* ADC analog watchdog single channel config */
|
||||||
|
adc_watchdog_single_channel_enable(ADC1, BOARD_ADC_CHANNEL);
|
||||||
|
/* ADC interrupt config */
|
||||||
|
adc_interrupt_enable(ADC1, ADC_INT_WDE);
|
||||||
|
|
||||||
|
/* enable ADC interface */
|
||||||
|
adc_enable(ADC1);
|
||||||
|
delay_1ms(1);
|
||||||
|
/* ADC calibration and reset calibration */
|
||||||
|
adc_calibration_enable(ADC1);
|
||||||
|
|
||||||
|
/* ADC software trigger enable */
|
||||||
|
adc_software_trigger_enable(ADC1, ADC_REGULAR_CHANNEL);
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
/*!
|
||||||
|
\file readme.txt
|
||||||
|
\brief description of the ADC analog watchdog example
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
This demo is based on the GD32107C-EVAL-V1.3 board, it shows how to use the ADC analog
|
||||||
|
watchdog to guard continuously an ADC channel. The ADC is configured in continuous mode,
|
||||||
|
the ADC1 clock is configured to 27MHz. PC3 is chosen as analog input pin.
|
||||||
|
|
||||||
|
Change the VR1 on the board, and measure TP2 pad, when the channe13 converted value is
|
||||||
|
over the programmed analog watchdog high threshold (value 0x0A00) or below the analog
|
||||||
|
watchdog low threshold(value 0x0400), an WDE interrupt will occur, and LED2 will be on.
|
||||||
|
When the channe13 converted value is in safe range(among 0x0400 and 0x0A00), the LED2
|
||||||
|
will be off.
|
||||||
|
|
||||||
|
The analog input pin should be configured to AIN mode.
|
@ -0,0 +1,83 @@
|
|||||||
|
/*!
|
||||||
|
\file systick.c
|
||||||
|
\brief the systick configuration file
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
#include "systick.h"
|
||||||
|
|
||||||
|
volatile static uint32_t delay;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure systick
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void systick_config(void)
|
||||||
|
{
|
||||||
|
/* setup systick timer for 1000Hz interrupts */
|
||||||
|
if (SysTick_Config(SystemCoreClock / 1000U)){
|
||||||
|
/* capture error */
|
||||||
|
while (1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* configure the systick handler priority */
|
||||||
|
NVIC_SetPriority(SysTick_IRQn, 0x00U);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief delay a time in milliseconds
|
||||||
|
\param[in] count: count in milliseconds
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void delay_1ms(uint32_t count)
|
||||||
|
{
|
||||||
|
delay = count;
|
||||||
|
|
||||||
|
while(0U != delay){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief delay decrement
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void delay_decrement(void)
|
||||||
|
{
|
||||||
|
if (0U != delay){
|
||||||
|
delay--;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
/*!
|
||||||
|
\file systick.h
|
||||||
|
\brief the header file of systick
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SYS_TICK_H
|
||||||
|
#define SYS_TICK_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
/* configure systick */
|
||||||
|
void systick_config(void);
|
||||||
|
/* delay a time in milliseconds */
|
||||||
|
void delay_1ms(uint32_t count);
|
||||||
|
/* delay decrement */
|
||||||
|
void delay_decrement(void);
|
||||||
|
|
||||||
|
#endif /* SYS_TICK_H */
|
@ -0,0 +1,138 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.c
|
||||||
|
\brief interrupt service routines
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
#include "gd32f10x_it.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles NMI exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void NMI_Handler(void)
|
||||||
|
{
|
||||||
|
/* if NMI exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles HardFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void HardFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Hard Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles MemManage exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void MemManage_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Memory Manage exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles BusFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void BusFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Bus Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles UsageFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void UsageFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Usage Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SVC exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SVC_Handler(void)
|
||||||
|
{
|
||||||
|
/* if SVC exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles DebugMon exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void DebugMon_Handler(void)
|
||||||
|
{
|
||||||
|
/* if DebugMon exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles PendSV exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void PendSV_Handler(void)
|
||||||
|
{
|
||||||
|
/* if PendSV exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,58 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.h
|
||||||
|
\brief the header file of the ISR
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_IT_H
|
||||||
|
#define GD32F10X_IT_H
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
|
||||||
|
/* function declarations */
|
||||||
|
/* this function handles NMI exception */
|
||||||
|
void NMI_Handler(void);
|
||||||
|
/* this function handles HardFault exception */
|
||||||
|
void HardFault_Handler(void);
|
||||||
|
/* this function handles MemManage exception */
|
||||||
|
void MemManage_Handler(void);
|
||||||
|
/* this function handles BusFault exception */
|
||||||
|
void BusFault_Handler(void);
|
||||||
|
/* this function handles UsageFault exception */
|
||||||
|
void UsageFault_Handler(void);
|
||||||
|
/* this function handles SVC exception */
|
||||||
|
void SVC_Handler(void);
|
||||||
|
/* this function handles DebugMon exception */
|
||||||
|
void DebugMon_Handler(void);
|
||||||
|
/* this function handles PendSV exception */
|
||||||
|
void PendSV_Handler(void);
|
||||||
|
|
||||||
|
#endif /* GD32F10X_IT_H */
|
@ -0,0 +1,62 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_libopt.h
|
||||||
|
\brief library optional for gd32f10x
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_LIBOPT_H
|
||||||
|
#define GD32F10X_LIBOPT_H
|
||||||
|
|
||||||
|
#include "gd32f10x_adc.h"
|
||||||
|
#include "gd32f10x_bkp.h"
|
||||||
|
#include "gd32f10x_can.h"
|
||||||
|
#include "gd32f10x_crc.h"
|
||||||
|
#include "gd32f10x_dac.h"
|
||||||
|
#include "gd32f10x_dma.h"
|
||||||
|
#include "gd32f10x_enet.h"
|
||||||
|
#include "gd32f10x_exmc.h"
|
||||||
|
#include "gd32f10x_exti.h"
|
||||||
|
#include "gd32f10x_fmc.h"
|
||||||
|
#include "gd32f10x_gpio.h"
|
||||||
|
#include "gd32f10x_i2c.h"
|
||||||
|
#include "gd32f10x_fwdgt.h"
|
||||||
|
#include "gd32f10x_dbg.h"
|
||||||
|
#include "gd32f10x_misc.h"
|
||||||
|
#include "gd32f10x_pmu.h"
|
||||||
|
#include "gd32f10x_rcu.h"
|
||||||
|
#include "gd32f10x_rtc.h"
|
||||||
|
#include "gd32f10x_sdio.h"
|
||||||
|
#include "gd32f10x_spi.h"
|
||||||
|
#include "gd32f10x_timer.h"
|
||||||
|
#include "gd32f10x_usart.h"
|
||||||
|
#include "gd32f10x_wwdgt.h"
|
||||||
|
|
||||||
|
#endif /* GD32F10X_LIBOPT_H */
|
@ -0,0 +1,148 @@
|
|||||||
|
/*!
|
||||||
|
\file main.c
|
||||||
|
\brief backup data register
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
#include "gd32f10x_eval.h"
|
||||||
|
|
||||||
|
#define BKP_DATA_REG_NUM 42
|
||||||
|
|
||||||
|
void led_config(void);
|
||||||
|
void write_backup_register(uint16_t data);
|
||||||
|
uint32_t check_backup_register(uint16_t data);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief main function
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
/* led configuration and turn on all led */
|
||||||
|
led_config();
|
||||||
|
/* PMU lock enable */
|
||||||
|
rcu_periph_clock_enable(RCU_PMU);
|
||||||
|
/* BKP clock enable */
|
||||||
|
rcu_periph_clock_enable(RCU_BKPI);
|
||||||
|
/* enable write access to the registers in backup domain */
|
||||||
|
pmu_backup_write_enable();
|
||||||
|
/* clear the bit flag of tamper event */
|
||||||
|
bkp_flag_clear();
|
||||||
|
|
||||||
|
/* check if the POR/PDR reset flag is set */
|
||||||
|
if(RESET != rcu_flag_get(RCU_FLAG_PORRST)){
|
||||||
|
/* clear the RCU all reset flags */
|
||||||
|
rcu_all_reset_flag_clear();
|
||||||
|
/* turn on LED4 */
|
||||||
|
gd_eval_led_on(LED4);
|
||||||
|
|
||||||
|
/* check if backup data registers has been written */
|
||||||
|
if(0x00 == check_backup_register(0x1226)){
|
||||||
|
/* Backup data registers values are correct */
|
||||||
|
/* turn on LED2 */
|
||||||
|
gd_eval_led_on(LED2);
|
||||||
|
}else{
|
||||||
|
/* backup data registers values are not correct or they are not written*/
|
||||||
|
/* write data to backup data registers */
|
||||||
|
write_backup_register(0x1226);
|
||||||
|
/* turn on LED3 */
|
||||||
|
gd_eval_led_on(LED3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* turn on LED5 */
|
||||||
|
gd_eval_led_on(LED5);;
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief write data to backup DATAx registers
|
||||||
|
\param[in] data: the data to be written to backup data registers
|
||||||
|
\arg 0x0000-0xFFFF
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void write_backup_register(uint16_t data)
|
||||||
|
{
|
||||||
|
uint32_t temp = 0;
|
||||||
|
/* write data to backup registers */
|
||||||
|
for (temp = 0; temp < BKP_DATA_REG_NUM; temp++){
|
||||||
|
if(temp < 10){
|
||||||
|
BKP_DATA0_9(temp) = data + (temp * 0x50);
|
||||||
|
}else{
|
||||||
|
BKP_DATA10_41(temp) = data + (temp * 0x50);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief check if the backup DATAx registers values are correct or not
|
||||||
|
\param[in] data: the data to be written to backup data registers
|
||||||
|
\arg 0x0000-0xFFFF
|
||||||
|
\param[out] none
|
||||||
|
\retval the number of data register
|
||||||
|
*/
|
||||||
|
uint32_t check_backup_register(uint16_t data)
|
||||||
|
{
|
||||||
|
uint32_t temp = 0;
|
||||||
|
/* check the data of backup registers */
|
||||||
|
for(temp = 0; temp < BKP_DATA_REG_NUM; temp++){
|
||||||
|
if(temp < 10){
|
||||||
|
/* get data from data register 0-9 */
|
||||||
|
if(data + (temp * 0x50) != BKP_DATA_GET(BKP_DATA0_9(temp))){
|
||||||
|
return temp+1;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
/* get data from data register 10-41 */
|
||||||
|
if(data + (temp * 0x50) != BKP_DATA_GET(BKP_DATA10_41(temp))){
|
||||||
|
return temp+1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure led
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void led_config(void)
|
||||||
|
{
|
||||||
|
gd_eval_led_init(LED2);
|
||||||
|
gd_eval_led_init(LED3);
|
||||||
|
gd_eval_led_init(LED4);
|
||||||
|
gd_eval_led_init(LED5);
|
||||||
|
}
|
@ -0,0 +1,62 @@
|
|||||||
|
/*!
|
||||||
|
\file readme.txt
|
||||||
|
\brief description of the Backup_Data demo
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
This demo is based on the GD32107C-EVAL-V1.3 board, it shows how to store user data
|
||||||
|
in the Backup data registers.
|
||||||
|
As the Backup domain still powered by VBAT when VDD is switched off, its contents
|
||||||
|
are not lost if a battery is connected to VBAT pin. When JP0 is connected to Vmcu,
|
||||||
|
the board is powered up, LED3, LED4 and LED5 are on. After an external reset, LED3
|
||||||
|
and LED4 are off, LED5 is on. Change JP0 connected to external battery, the board is
|
||||||
|
executed a power-down and power-up operation, LED2, LED4 and LED5 are on.
|
||||||
|
|
||||||
|
The program behaves as follows:
|
||||||
|
1. After startup the program checks if the board has been powered up. If yes, the
|
||||||
|
values in the BKP data registers are checked:
|
||||||
|
- if a battery is connected to the VBAT pin, the values in the BKP data registers
|
||||||
|
are retained
|
||||||
|
- if no battery is connected to the VBAT pin, the values in the BKP data registers
|
||||||
|
are lost
|
||||||
|
2. After an external reset, the BKP data registers contents are not checked.
|
||||||
|
|
||||||
|
Four LEDs are used to show the system state as follows:
|
||||||
|
1. LED4 on / LED2 on: a POR/PDR reset occurred and the values in the BKP data
|
||||||
|
registers are correct
|
||||||
|
2. LED4 on / LED3 on: a POR/PDR reset occurred and the values in the BKP data
|
||||||
|
registers are not correct or they have not yet been programmed (if it is the
|
||||||
|
first time the program is executed)
|
||||||
|
3. LED4 off / LED2 off / LED3 off: no POR/PDR reset occurred
|
||||||
|
4. LED5 on: program running
|
||||||
|
|
||||||
|
BT1 should have a 3.3V battery, JP0 can change the VBAT source.
|
||||||
|
|
@ -0,0 +1,181 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.c
|
||||||
|
\brief interrupt service routines
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x_it.h"
|
||||||
|
#include "gd32f10x_eval.h"
|
||||||
|
|
||||||
|
extern uint32_t is_backup_register_clear(void);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles NMI exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void NMI_Handler(void)
|
||||||
|
{
|
||||||
|
/* if NMI exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles HardFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void HardFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Hard Fault exception occurs, go to infinite loop */
|
||||||
|
while (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles MemManage exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void MemManage_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Memory Manage exception occurs, go to infinite loop */
|
||||||
|
while (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles BusFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void BusFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Bus Fault exception occurs, go to infinite loop */
|
||||||
|
while (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles UsageFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void UsageFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Usage Fault exception occurs, go to infinite loop */
|
||||||
|
while (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SVC exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SVC_Handler(void)
|
||||||
|
{
|
||||||
|
/* if SVC exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles DebugMon exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void DebugMon_Handler(void)
|
||||||
|
{
|
||||||
|
/* if DebugMon exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles PendSV exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void PendSV_Handler(void)
|
||||||
|
{
|
||||||
|
/* if PendSV exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SysTick exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SysTick_Handler(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function handles Tamper interrupt request.
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void TAMPER_IRQHandler(void)
|
||||||
|
{
|
||||||
|
if(RESET != bkp_interrupt_flag_get())
|
||||||
|
{
|
||||||
|
/* a tamper detection event occurred */
|
||||||
|
/* check if backup data registers are cleared */
|
||||||
|
if(0 == is_backup_register_clear()){
|
||||||
|
/* backup data registers are cleared */
|
||||||
|
/* turn on LED4 */
|
||||||
|
gd_eval_led_on(LED4);
|
||||||
|
}else{
|
||||||
|
/* backup data registers are not cleared */
|
||||||
|
/* turn on LED5 */
|
||||||
|
gd_eval_led_on(LED5);
|
||||||
|
}
|
||||||
|
/* clear the interrupt bit flag of tamper interrupt */
|
||||||
|
bkp_interrupt_flag_clear();
|
||||||
|
/* clear the bit flag of tamper event */
|
||||||
|
bkp_flag_clear();
|
||||||
|
/* disable the tamper pin */
|
||||||
|
bkp_interrupt_disable();
|
||||||
|
/* enable the tamper pin */
|
||||||
|
bkp_interrupt_enable();
|
||||||
|
/* tamper pin active level set */
|
||||||
|
bkp_tamper_active_level_set(TAMPER_PIN_ACTIVE_LOW);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,62 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.h
|
||||||
|
\brief the header file of the ISR
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_IT_H
|
||||||
|
#define GD32F10X_IT_H
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
|
||||||
|
/* function declarations */
|
||||||
|
/* NMI handle function */
|
||||||
|
void NMI_Handler(void);
|
||||||
|
/* HardFault handle function */
|
||||||
|
void HardFault_Handler(void);
|
||||||
|
/* MemManage handle function */
|
||||||
|
void MemManage_Handler(void);
|
||||||
|
/* BusFault handle function */
|
||||||
|
void BusFault_Handler(void);
|
||||||
|
/* UsageFault handle function */
|
||||||
|
void UsageFault_Handler(void);
|
||||||
|
/* SVC handle function */
|
||||||
|
void SVC_Handler(void);
|
||||||
|
/* DebugMon handle function */
|
||||||
|
void DebugMon_Handler(void);
|
||||||
|
/* PendSV handle function */
|
||||||
|
void PendSV_Handler(void);
|
||||||
|
/* SysTick handle function */
|
||||||
|
void SysTick_Handler(void);
|
||||||
|
/* TAMPER handle function */
|
||||||
|
void TAMPER_IRQHandler(void);
|
||||||
|
|
||||||
|
#endif /* GD32F10X_IT_H */
|
@ -0,0 +1,62 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_libopt.h
|
||||||
|
\brief library optional for gd32f10x
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_LIBOPT_H
|
||||||
|
#define GD32F10X_LIBOPT_H
|
||||||
|
|
||||||
|
#include "gd32f10x_adc.h"
|
||||||
|
#include "gd32f10x_bkp.h"
|
||||||
|
#include "gd32f10x_can.h"
|
||||||
|
#include "gd32f10x_crc.h"
|
||||||
|
#include "gd32f10x_dac.h"
|
||||||
|
#include "gd32f10x_dma.h"
|
||||||
|
#include "gd32f10x_enet.h"
|
||||||
|
#include "gd32f10x_exmc.h"
|
||||||
|
#include "gd32f10x_exti.h"
|
||||||
|
#include "gd32f10x_fmc.h"
|
||||||
|
#include "gd32f10x_gpio.h"
|
||||||
|
#include "gd32f10x_i2c.h"
|
||||||
|
#include "gd32f10x_fwdgt.h"
|
||||||
|
#include "gd32f10x_dbg.h"
|
||||||
|
#include "gd32f10x_misc.h"
|
||||||
|
#include "gd32f10x_pmu.h"
|
||||||
|
#include "gd32f10x_rcu.h"
|
||||||
|
#include "gd32f10x_rtc.h"
|
||||||
|
#include "gd32f10x_sdio.h"
|
||||||
|
#include "gd32f10x_spi.h"
|
||||||
|
#include "gd32f10x_timer.h"
|
||||||
|
#include "gd32f10x_usart.h"
|
||||||
|
#include "gd32f10x_wwdgt.h"
|
||||||
|
|
||||||
|
#endif /* GD32F10X_LIBOPT_H */
|
@ -0,0 +1,187 @@
|
|||||||
|
/*!
|
||||||
|
\file main.c
|
||||||
|
\brief tamper demo
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
#include "gd32f10x_eval.h"
|
||||||
|
|
||||||
|
#define BKP_DATA_REG_NUM 42
|
||||||
|
|
||||||
|
void led_config(void);
|
||||||
|
void nvic_config(void);
|
||||||
|
void write_backup_register(uint16_t data);
|
||||||
|
uint32_t check_backup_register(uint16_t data);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief main function
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
/* led configuration and turn on all led */
|
||||||
|
led_config();
|
||||||
|
/* NVIC configuration */
|
||||||
|
nvic_config();
|
||||||
|
/* PMU lock enable */
|
||||||
|
rcu_periph_clock_enable(RCU_PMU);
|
||||||
|
/* BKP clock enable */
|
||||||
|
rcu_periph_clock_enable(RCU_BKPI);
|
||||||
|
|
||||||
|
/* enable write access to the registers in backup domain */
|
||||||
|
pmu_backup_write_enable();
|
||||||
|
/* tamper pin active level set */
|
||||||
|
bkp_tamper_active_level_set(TAMPER_PIN_ACTIVE_LOW);
|
||||||
|
/* tamper detection disable */
|
||||||
|
bkp_tamper_detection_disable();
|
||||||
|
/* disable the tamper interrupt */
|
||||||
|
bkp_interrupt_disable();
|
||||||
|
/* clear the bit flag of tamper event */
|
||||||
|
bkp_flag_clear();
|
||||||
|
/* configure the tamper pin active on low level, and enable the tamper pin */
|
||||||
|
bkp_interrupt_enable();
|
||||||
|
/* tamper detection enable */
|
||||||
|
bkp_tamper_detection_enable();
|
||||||
|
/* write data to backup DATAx registers */
|
||||||
|
write_backup_register(0x1226);
|
||||||
|
|
||||||
|
/* check if the written data are correct */
|
||||||
|
if(0x00 == check_backup_register(0x1226)){
|
||||||
|
/* turn on LED2 */
|
||||||
|
gd_eval_led_on(LED2);
|
||||||
|
}else{
|
||||||
|
/* turn on LED3 */
|
||||||
|
gd_eval_led_on(LED3);
|
||||||
|
}
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief write data to backup DATAx registers
|
||||||
|
\param[in] data: the data to be written to backup data registers
|
||||||
|
\arg 0x0000-0xFFFF
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void write_backup_register(uint16_t data)
|
||||||
|
{
|
||||||
|
uint32_t temp = 0;
|
||||||
|
/* write data to backup data registers */
|
||||||
|
for (temp = 0; temp < BKP_DATA_REG_NUM; temp++){
|
||||||
|
if(temp < 10){
|
||||||
|
BKP_DATA0_9(temp) = data + (temp * 0x50);
|
||||||
|
}else{
|
||||||
|
BKP_DATA10_41(temp) = data + (temp * 0x50);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief check if the backup DATAx registers values are correct or not
|
||||||
|
\param[in] data: the data to be written to backup data registers
|
||||||
|
\arg 0x0000-0xFFFF
|
||||||
|
\param[out] none
|
||||||
|
\retval the number of data register
|
||||||
|
*/
|
||||||
|
uint32_t check_backup_register(uint16_t data)
|
||||||
|
{
|
||||||
|
uint32_t temp = 0;
|
||||||
|
/* check the data of backup data registers */
|
||||||
|
for(temp = 0; temp < BKP_DATA_REG_NUM; temp++){
|
||||||
|
if(temp < 10){
|
||||||
|
/* get data from data register 0-9 */
|
||||||
|
if(data + (temp * 0x50) != BKP_DATA_GET(BKP_DATA0_9(temp))){
|
||||||
|
return temp+1;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
/* get data from data register 10-41 */
|
||||||
|
if(data + (temp * 0x50) != BKP_DATA_GET(BKP_DATA10_41(temp))){
|
||||||
|
return temp+1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure led
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void led_config(void)
|
||||||
|
{
|
||||||
|
gd_eval_led_init(LED2);
|
||||||
|
gd_eval_led_init(LED3);
|
||||||
|
gd_eval_led_init(LED4);
|
||||||
|
gd_eval_led_init(LED5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief check if the backup data registers are clear or not
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval the number of data register
|
||||||
|
*/
|
||||||
|
uint32_t is_backup_register_clear(void)
|
||||||
|
{
|
||||||
|
uint32_t temp = 0;
|
||||||
|
|
||||||
|
for(temp = 0; temp < BKP_DATA_REG_NUM; temp++){
|
||||||
|
if(temp < 10){
|
||||||
|
/* check if the data of data register 0-9 is 0x0000 */
|
||||||
|
if(0x0000 != BKP_DATA_GET(BKP_DATA0_9(temp))){
|
||||||
|
return temp+1;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
/* check if the data of data register 10-41 is 0x0000 */
|
||||||
|
if(0x0000 != BKP_DATA_GET(BKP_DATA10_41(temp))){
|
||||||
|
return temp+1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the nested vectored interrupt controller
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void nvic_config(void)
|
||||||
|
{
|
||||||
|
nvic_irq_enable(TAMPER_IRQn,0,0);
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
/*!
|
||||||
|
\file readme.txt
|
||||||
|
\brief description of tamper demo
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
This demo is based on the GD32107C-EVAL-V1.3 board, it shows how to write/read data
|
||||||
|
to/from backup data registers and demonstrates the tamper detection function. In
|
||||||
|
this demo, the TAMPER pin is configured active on low level.
|
||||||
|
After system start-up, it writes the data to all backup data registers, then check
|
||||||
|
whether the data were correctly written. If yes, LED2 is on, otherwise LED3 is on.
|
||||||
|
When the tamper key(TAMPER pin) is pressed, the backup data registers are reset and
|
||||||
|
the tamper interrupt is generated. In the corresponding ISR, it checks whether the
|
||||||
|
backup data registers are cleared or not. If yes, LED4 is on, otherwise LED5 is on.
|
@ -0,0 +1,197 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.c
|
||||||
|
\brief interrupt service routines
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x_it.h"
|
||||||
|
|
||||||
|
extern ErrStatus test_flag_interrupt;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles NMI exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void NMI_Handler(void)
|
||||||
|
{
|
||||||
|
/* if NMI exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles HardFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void HardFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Hard Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles MemManage exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void MemManage_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Memory Manage exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles BusFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void BusFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Bus Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles UsageFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void UsageFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Usage Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SVC exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SVC_Handler(void)
|
||||||
|
{
|
||||||
|
/* if SVC exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles DebugMon exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void DebugMon_Handler(void)
|
||||||
|
{
|
||||||
|
/* if DebugMon exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles PendSV exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void PendSV_Handler(void)
|
||||||
|
{
|
||||||
|
/* if PendSV exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SysTick exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SysTick_Handler(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles CAN0 RX1 exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void CAN0_RX1_IRQHandler(void)
|
||||||
|
{
|
||||||
|
can_receive_message_struct g_receive_message;
|
||||||
|
/* initialize receive message */
|
||||||
|
can_struct_para_init(CAN_RX_MESSAGE_STRUCT, &g_receive_message);
|
||||||
|
|
||||||
|
/* check the receive message */
|
||||||
|
can_message_receive(CAN0, CAN_FIFO1, &g_receive_message);
|
||||||
|
|
||||||
|
if((0x1234 == g_receive_message.rx_efid) && (CAN_FF_EXTENDED == g_receive_message.rx_ff)
|
||||||
|
&& (2 == g_receive_message.rx_dlen) && (0xCADE == (g_receive_message.rx_data[1]<<8|g_receive_message.rx_data[0]))){
|
||||||
|
test_flag_interrupt = SUCCESS;
|
||||||
|
}else{
|
||||||
|
test_flag_interrupt = ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles CAN1 RX0 exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void CAN1_RX1_IRQHandler(void)
|
||||||
|
{
|
||||||
|
can_receive_message_struct g_receive_message;
|
||||||
|
/* initialize receive message */
|
||||||
|
can_struct_para_init(CAN_RX_MESSAGE_STRUCT, &g_receive_message);
|
||||||
|
|
||||||
|
/* check the receive message */
|
||||||
|
can_message_receive(CAN1, CAN_FIFO1, &g_receive_message);
|
||||||
|
|
||||||
|
if((0x1234 == g_receive_message.rx_efid) && (CAN_FF_EXTENDED == g_receive_message.rx_ff)
|
||||||
|
&& (2 == g_receive_message.rx_dlen) && (0xCADE == (g_receive_message.rx_data[1]<<8|g_receive_message.rx_data[0]))){
|
||||||
|
test_flag_interrupt = SUCCESS;
|
||||||
|
}else{
|
||||||
|
test_flag_interrupt = ERROR;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,64 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.h
|
||||||
|
\brief the header file of the ISR
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_IT_H
|
||||||
|
#define GD32F10X_IT_H
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
|
||||||
|
/* function declarations */
|
||||||
|
/* this function handles NMI exception */
|
||||||
|
void NMI_Handler(void);
|
||||||
|
/* this function handles HardFault exception */
|
||||||
|
void HardFault_Handler(void);
|
||||||
|
/* this function handles MemManage exception */
|
||||||
|
void MemManage_Handler(void);
|
||||||
|
/* this function handles BusFault exception */
|
||||||
|
void BusFault_Handler(void);
|
||||||
|
/* this function handles UsageFault exception */
|
||||||
|
void UsageFault_Handler(void);
|
||||||
|
/* this function handles SVC exception */
|
||||||
|
void SVC_Handler(void);
|
||||||
|
/* this function handles DebugMon exception */
|
||||||
|
void DebugMon_Handler(void);
|
||||||
|
/* this function handles PendSV exception */
|
||||||
|
void PendSV_Handler(void);
|
||||||
|
/* this function handles SysTick exception */
|
||||||
|
void SysTick_Handler(void);
|
||||||
|
/* CAN0 RX0 handle function */
|
||||||
|
void CAN0_RX0_IRQHandler(void);
|
||||||
|
/* CAN1 RX0 handle function */
|
||||||
|
void CAN1_RX0_IRQHandler(void);
|
||||||
|
|
||||||
|
#endif /* GD32F10X_IT_H */
|
@ -0,0 +1,62 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_libopt.h
|
||||||
|
\brief library optional for gd32f10x
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_LIBOPT_H
|
||||||
|
#define GD32F10X_LIBOPT_H
|
||||||
|
|
||||||
|
#include "gd32f10x_adc.h"
|
||||||
|
#include "gd32f10x_bkp.h"
|
||||||
|
#include "gd32f10x_can.h"
|
||||||
|
#include "gd32f10x_crc.h"
|
||||||
|
#include "gd32f10x_dac.h"
|
||||||
|
#include "gd32f10x_dma.h"
|
||||||
|
#include "gd32f10x_enet.h"
|
||||||
|
#include "gd32f10x_exmc.h"
|
||||||
|
#include "gd32f10x_exti.h"
|
||||||
|
#include "gd32f10x_fmc.h"
|
||||||
|
#include "gd32f10x_gpio.h"
|
||||||
|
#include "gd32f10x_i2c.h"
|
||||||
|
#include "gd32f10x_fwdgt.h"
|
||||||
|
#include "gd32f10x_dbg.h"
|
||||||
|
#include "gd32f10x_misc.h"
|
||||||
|
#include "gd32f10x_pmu.h"
|
||||||
|
#include "gd32f10x_rcu.h"
|
||||||
|
#include "gd32f10x_rtc.h"
|
||||||
|
#include "gd32f10x_sdio.h"
|
||||||
|
#include "gd32f10x_spi.h"
|
||||||
|
#include "gd32f10x_timer.h"
|
||||||
|
#include "gd32f10x_usart.h"
|
||||||
|
#include "gd32f10x_wwdgt.h"
|
||||||
|
|
||||||
|
#endif /* GD32F10X_LIBOPT_H */
|
@ -0,0 +1,310 @@
|
|||||||
|
/*!
|
||||||
|
\file main.c
|
||||||
|
\brief communication_Loopback in normal mode
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "gd32f10x_eval.h"
|
||||||
|
|
||||||
|
/* select CAN */
|
||||||
|
#define CAN0_USED
|
||||||
|
//#define CAN1_USED
|
||||||
|
|
||||||
|
#ifdef CAN0_USED
|
||||||
|
#define CANX CAN0
|
||||||
|
#else
|
||||||
|
#define CANX CAN1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define DEV_CAN_POLLING_ID 0x0AA
|
||||||
|
#define DEV_CAN_INTERRUPT_ID 0x1234
|
||||||
|
|
||||||
|
volatile ErrStatus test_flag;
|
||||||
|
volatile ErrStatus test_flag_interrupt;
|
||||||
|
|
||||||
|
void nvic_config(void);
|
||||||
|
void led_config(void);
|
||||||
|
ErrStatus can_loopback(void);
|
||||||
|
ErrStatus can_loopback_interrupt(void);
|
||||||
|
void can_loopback_init(void);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief main function
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
/* enable CAN clock */
|
||||||
|
rcu_periph_clock_enable(RCU_CAN0);
|
||||||
|
rcu_periph_clock_enable(RCU_CAN1);
|
||||||
|
|
||||||
|
/* configure NVIC */
|
||||||
|
nvic_config();
|
||||||
|
|
||||||
|
/* configure leds */
|
||||||
|
led_config();
|
||||||
|
/* set all the leds off */
|
||||||
|
gd_eval_led_off(LED2);
|
||||||
|
gd_eval_led_off(LED3);
|
||||||
|
gd_eval_led_off(LED4);
|
||||||
|
gd_eval_led_off(LED5);
|
||||||
|
/* loopback of polling */
|
||||||
|
test_flag = can_loopback();
|
||||||
|
|
||||||
|
if(SUCCESS == test_flag){
|
||||||
|
/* loopback test is success */
|
||||||
|
gd_eval_led_on(LED2);
|
||||||
|
gd_eval_led_on(LED3);
|
||||||
|
}else{
|
||||||
|
/* loopback test is failed */
|
||||||
|
gd_eval_led_off(LED2);
|
||||||
|
gd_eval_led_off(LED3);
|
||||||
|
}
|
||||||
|
/* loopback of interrupt */
|
||||||
|
test_flag_interrupt = can_loopback_interrupt();
|
||||||
|
|
||||||
|
if(SUCCESS == test_flag_interrupt){
|
||||||
|
/* interrupt loopback test is success */
|
||||||
|
gd_eval_led_on(LED4);
|
||||||
|
gd_eval_led_on(LED5);
|
||||||
|
}else{
|
||||||
|
/* interrupt loopback test is failed */
|
||||||
|
gd_eval_led_off(LED4);
|
||||||
|
gd_eval_led_off(LED5);
|
||||||
|
}
|
||||||
|
while (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief function for CAN loopback communication
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval ErrStatus
|
||||||
|
*/
|
||||||
|
ErrStatus can_loopback(void)
|
||||||
|
{
|
||||||
|
can_trasnmit_message_struct g_transmit_message;
|
||||||
|
can_receive_message_struct g_receive_message;
|
||||||
|
uint32_t timeout = 0xFFFF;
|
||||||
|
uint8_t transmit_mailbox = 0;
|
||||||
|
/* initialize CAN */
|
||||||
|
can_loopback_init();
|
||||||
|
|
||||||
|
/* initialize transmit message */
|
||||||
|
can_struct_para_init(CAN_TX_MESSAGE_STRUCT, &g_transmit_message);
|
||||||
|
g_transmit_message.tx_sfid = DEV_CAN_POLLING_ID;
|
||||||
|
g_transmit_message.tx_ft = CAN_FT_DATA;
|
||||||
|
g_transmit_message.tx_ff = CAN_FF_STANDARD;
|
||||||
|
g_transmit_message.tx_dlen = 2;
|
||||||
|
g_transmit_message.tx_data[0] = 0xAB;
|
||||||
|
g_transmit_message.tx_data[1] = 0xCD;
|
||||||
|
|
||||||
|
/* initialize receive message */
|
||||||
|
can_struct_para_init(CAN_RX_MESSAGE_STRUCT, &g_receive_message);
|
||||||
|
|
||||||
|
/* transmit message */
|
||||||
|
transmit_mailbox = can_message_transmit(CANX, &g_transmit_message);
|
||||||
|
/* waiting for transmit completed */
|
||||||
|
while((CAN_TRANSMIT_OK != can_transmit_states(CANX, transmit_mailbox)) && (0 != timeout)){
|
||||||
|
timeout--;
|
||||||
|
}
|
||||||
|
timeout = 0xFFFF;
|
||||||
|
/* waiting for receive completed */
|
||||||
|
while((can_receive_message_length_get(CANX, CAN_FIFO1) < 1) && (0 != timeout)){
|
||||||
|
timeout--;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* initialize receive message*/
|
||||||
|
g_receive_message.rx_sfid = 0x00;
|
||||||
|
g_receive_message.rx_ff = 0;
|
||||||
|
g_receive_message.rx_dlen = 0;
|
||||||
|
g_receive_message.rx_data[0] = 0x00;
|
||||||
|
g_receive_message.rx_data[1] = 0x00;
|
||||||
|
can_message_receive(CANX, CAN_FIFO1, &g_receive_message);
|
||||||
|
|
||||||
|
/* check the receive message */
|
||||||
|
if((DEV_CAN_POLLING_ID == g_receive_message.rx_sfid) && (CAN_FF_STANDARD == g_receive_message.rx_ff)
|
||||||
|
&& (2 == g_receive_message.rx_dlen) && (0xCDAB == (g_receive_message.rx_data[1]<<8|g_receive_message.rx_data[0]))){
|
||||||
|
return SUCCESS;
|
||||||
|
}else{
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief function for CAN loopback interrupt communication
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval ErrStatus
|
||||||
|
*/
|
||||||
|
ErrStatus can_loopback_interrupt(void)
|
||||||
|
{
|
||||||
|
can_trasnmit_message_struct g_transmit_message;
|
||||||
|
uint32_t timeout = 0x0000FFFF;
|
||||||
|
|
||||||
|
/* initialize CAN and filter */
|
||||||
|
can_loopback_init();
|
||||||
|
|
||||||
|
/* enable CAN receive FIFO1 not empty interrupt */
|
||||||
|
can_interrupt_enable(CANX, CAN_INT_RFNE1);
|
||||||
|
|
||||||
|
/* initialize transmit message */
|
||||||
|
g_transmit_message.tx_sfid = 0;
|
||||||
|
g_transmit_message.tx_efid = DEV_CAN_INTERRUPT_ID;
|
||||||
|
g_transmit_message.tx_ff = CAN_FF_EXTENDED;
|
||||||
|
g_transmit_message.tx_ft = CAN_FT_DATA;
|
||||||
|
g_transmit_message.tx_dlen = 2;
|
||||||
|
g_transmit_message.tx_data[0] = 0xDE;
|
||||||
|
g_transmit_message.tx_data[1] = 0xCA;
|
||||||
|
/* transmit a message */
|
||||||
|
can_message_transmit(CANX, &g_transmit_message);
|
||||||
|
|
||||||
|
/* waiting for receive completed */
|
||||||
|
while((SUCCESS != test_flag_interrupt) && (0 != timeout)){
|
||||||
|
timeout--;
|
||||||
|
}
|
||||||
|
if(0 == timeout){
|
||||||
|
test_flag_interrupt = ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* disable CAN receive FIFO1 not empty interrupt */
|
||||||
|
can_interrupt_disable(CANX, CAN_INTEN_RFNEIE1);
|
||||||
|
|
||||||
|
return test_flag_interrupt;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief initialize CAN and filter
|
||||||
|
\param[in] can_parameter
|
||||||
|
\arg can_parameter_struct
|
||||||
|
\param[in] can_filter
|
||||||
|
\arg can_filter_parameter_struct
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void can_loopback_init(void)
|
||||||
|
{
|
||||||
|
can_parameter_struct can_parameter;
|
||||||
|
can_filter_parameter_struct can_filter;
|
||||||
|
|
||||||
|
can_struct_para_init(CAN_INIT_STRUCT, &can_parameter);
|
||||||
|
can_struct_para_init(CAN_FILTER_STRUCT, &can_filter);
|
||||||
|
|
||||||
|
/* initialize CAN register */
|
||||||
|
can_deinit(CANX);
|
||||||
|
|
||||||
|
/* initialize CAN */
|
||||||
|
can_parameter.time_triggered = DISABLE;
|
||||||
|
can_parameter.auto_bus_off_recovery = DISABLE;
|
||||||
|
can_parameter.auto_wake_up = DISABLE;
|
||||||
|
can_parameter.auto_retrans = DISABLE;
|
||||||
|
can_parameter.rec_fifo_overwrite = DISABLE;
|
||||||
|
can_parameter.trans_fifo_order = DISABLE;
|
||||||
|
can_parameter.working_mode = CAN_LOOPBACK_MODE;
|
||||||
|
/* configure baudrate to 125kbps */
|
||||||
|
can_parameter.resync_jump_width = CAN_BT_SJW_1TQ;
|
||||||
|
can_parameter.time_segment_1 = CAN_BT_BS1_5TQ;
|
||||||
|
can_parameter.time_segment_2 = CAN_BT_BS2_3TQ;
|
||||||
|
can_parameter.prescaler = 48;
|
||||||
|
can_init(CANX, &can_parameter);
|
||||||
|
|
||||||
|
/* initialize filter */
|
||||||
|
#ifdef CAN0_USED
|
||||||
|
/* CAN0 filter number */
|
||||||
|
can_filter.filter_number = 0;
|
||||||
|
#else
|
||||||
|
/* CAN1 filter number */
|
||||||
|
can_filter.filter_number = 14;
|
||||||
|
#endif
|
||||||
|
/* initialize filter */
|
||||||
|
can_filter.filter_mode = CAN_FILTERMODE_MASK;
|
||||||
|
can_filter.filter_bits = CAN_FILTERBITS_32BIT;
|
||||||
|
can_filter.filter_list_high = (uint16_t)(DEV_CAN_POLLING_ID << 5);
|
||||||
|
can_filter.filter_list_low = 0x0000U;
|
||||||
|
/* ID and standard frame matched */
|
||||||
|
can_filter.filter_mask_high = (uint16_t)(0x7FF << 5);
|
||||||
|
can_filter.filter_mask_low = (uint16_t)(1U << 2);
|
||||||
|
can_filter.filter_fifo_number = CAN_FIFO1;
|
||||||
|
can_filter.filter_enable=ENABLE;
|
||||||
|
can_filter_init(&can_filter);
|
||||||
|
|
||||||
|
/* initialize filter */
|
||||||
|
#ifdef CAN0_USED
|
||||||
|
/* CAN0 filter number */
|
||||||
|
can_filter.filter_number = 1;
|
||||||
|
#else
|
||||||
|
/* CAN1 filter number */
|
||||||
|
can_filter.filter_number = 15;
|
||||||
|
#endif
|
||||||
|
/* initialize filter */
|
||||||
|
can_filter.filter_mode = CAN_FILTERMODE_MASK;
|
||||||
|
can_filter.filter_bits = CAN_FILTERBITS_32BIT;
|
||||||
|
/* ID and extend frame matched */
|
||||||
|
can_filter.filter_list_high = (uint16_t)(DEV_CAN_INTERRUPT_ID >> 13);
|
||||||
|
can_filter.filter_list_low = (uint16_t)(((uint16_t)DEV_CAN_INTERRUPT_ID << 3) | (1U << 2));
|
||||||
|
can_filter.filter_mask_high = (uint16_t)(0x1FFFFFFF >> 13);
|
||||||
|
can_filter.filter_mask_low = (uint16_t)(((uint16_t)0x1FFFFFFF << 3) | (1U << 2));
|
||||||
|
can_filter.filter_fifo_number = CAN_FIFO1;
|
||||||
|
can_filter.filter_enable=ENABLE;
|
||||||
|
can_filter_init(&can_filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the nested vectored interrupt controller
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void nvic_config(void)
|
||||||
|
{
|
||||||
|
/* configure CAN0 NVIC */
|
||||||
|
nvic_irq_enable(CAN0_RX1_IRQn,0,0);
|
||||||
|
/* configure CAN1 NVIC */
|
||||||
|
nvic_irq_enable(CAN1_RX1_IRQn,0,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the leds
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void led_config(void)
|
||||||
|
{
|
||||||
|
gd_eval_led_init(LED2);
|
||||||
|
gd_eval_led_init(LED3);
|
||||||
|
gd_eval_led_init(LED4);
|
||||||
|
gd_eval_led_init(LED5);
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
/*!
|
||||||
|
\file readme.txt
|
||||||
|
\brief description of the communication_Loopback demo
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
This demo is based on the GD32107C-EVAL board, it shows how to set a communication
|
||||||
|
with the CAN in loopback mode.
|
||||||
|
|
||||||
|
The example first performs a transmission and a reception of a standard data frame
|
||||||
|
by polling at 125 Kbps.If the received frame is successful, the LED2 and LED3 are on.
|
||||||
|
Otherwise,the LED2 and LED3 are off. Then, an extended data frame is transmitted at
|
||||||
|
125 Kbps. Reception is done in the interrupt handler when the message becomes pending
|
||||||
|
in the FIFO1. If the received frame is successful, the LED4 and LED5 are on. Otherwise,
|
||||||
|
the LED4 and LED5 are off.
|
||||||
|
|
||||||
|
User can select CAN0 or CAN1 cell using the private defines in main.c.
|
||||||
|
|
||||||
|
P2,P3 and P4 must be fitted.
|
@ -0,0 +1,190 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.c
|
||||||
|
\brief interrupt service routines
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x_it.h"
|
||||||
|
|
||||||
|
extern can_receive_message_struct g_receive_message;
|
||||||
|
extern FlagStatus can0_receive_flag;
|
||||||
|
extern FlagStatus can1_receive_flag;
|
||||||
|
extern FlagStatus can0_error_flag;
|
||||||
|
extern FlagStatus can1_error_flag;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles NMI exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void NMI_Handler(void)
|
||||||
|
{
|
||||||
|
/* if NMI exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles HardFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void HardFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Hard Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles MemManage exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void MemManage_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Memory Manage exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles BusFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void BusFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Bus Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles UsageFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void UsageFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Usage Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SVC exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SVC_Handler(void)
|
||||||
|
{
|
||||||
|
/* if SVC exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles DebugMon exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void DebugMon_Handler(void)
|
||||||
|
{
|
||||||
|
/* if DebugMon exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles PendSV exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void PendSV_Handler(void)
|
||||||
|
{
|
||||||
|
/* if PendSV exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SysTick exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SysTick_Handler(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles CAN0 RX0 exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void CAN0_RX0_IRQHandler(void)
|
||||||
|
{
|
||||||
|
/* check the receive message */
|
||||||
|
can_message_receive(CAN0, CAN_FIFO0, &g_receive_message);
|
||||||
|
|
||||||
|
if((0x7ab == g_receive_message.rx_sfid)&&(CAN_FF_STANDARD == g_receive_message.rx_ff)&&(8 == g_receive_message.rx_dlen)){
|
||||||
|
can0_receive_flag = SET;
|
||||||
|
}else{
|
||||||
|
can0_error_flag = SET;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*!
|
||||||
|
\brief this function handles CAN1 RX0 exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void CAN1_RX0_IRQHandler(void)
|
||||||
|
{
|
||||||
|
/* check the receive message */
|
||||||
|
can_message_receive(CAN1, CAN_FIFO0, &g_receive_message);
|
||||||
|
|
||||||
|
if((0x7ab == g_receive_message.rx_sfid)&&(CAN_FF_STANDARD == g_receive_message.rx_ff)&&(8 == g_receive_message.rx_dlen)){
|
||||||
|
can1_receive_flag = SET;
|
||||||
|
}else{
|
||||||
|
can1_error_flag = SET;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,64 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.h
|
||||||
|
\brief the header file of the ISR
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_IT_H
|
||||||
|
#define GD32F10X_IT_H
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
|
||||||
|
/* function declarations */
|
||||||
|
/* this function handles NMI exception */
|
||||||
|
void NMI_Handler(void);
|
||||||
|
/* this function handles HardFault exception */
|
||||||
|
void HardFault_Handler(void);
|
||||||
|
/* this function handles MemManage exception */
|
||||||
|
void MemManage_Handler(void);
|
||||||
|
/* this function handles BusFault exception */
|
||||||
|
void BusFault_Handler(void);
|
||||||
|
/* this function handles UsageFault exception */
|
||||||
|
void UsageFault_Handler(void);
|
||||||
|
/* this function handles SVC exception */
|
||||||
|
void SVC_Handler(void);
|
||||||
|
/* this function handles DebugMon exception */
|
||||||
|
void DebugMon_Handler(void);
|
||||||
|
/* this function handles PendSV exception */
|
||||||
|
void PendSV_Handler(void);
|
||||||
|
/* this function handles SysTick exception */
|
||||||
|
void SysTick_Handler(void);
|
||||||
|
/* CAN0 RX0 handle function */
|
||||||
|
void CAN0_RX0_IRQHandler(void);
|
||||||
|
/* CAN1 RX0 handle function */
|
||||||
|
void CAN1_RX0_IRQHandler(void);
|
||||||
|
|
||||||
|
#endif /* GD32F10X_IT_H */
|
@ -0,0 +1,62 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_libopt.h
|
||||||
|
\brief library optional for gd32f10x
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_LIBOPT_H
|
||||||
|
#define GD32F10X_LIBOPT_H
|
||||||
|
|
||||||
|
#include "gd32f10x_adc.h"
|
||||||
|
#include "gd32f10x_bkp.h"
|
||||||
|
#include "gd32f10x_can.h"
|
||||||
|
#include "gd32f10x_crc.h"
|
||||||
|
#include "gd32f10x_dac.h"
|
||||||
|
#include "gd32f10x_dma.h"
|
||||||
|
#include "gd32f10x_enet.h"
|
||||||
|
#include "gd32f10x_exmc.h"
|
||||||
|
#include "gd32f10x_exti.h"
|
||||||
|
#include "gd32f10x_fmc.h"
|
||||||
|
#include "gd32f10x_gpio.h"
|
||||||
|
#include "gd32f10x_i2c.h"
|
||||||
|
#include "gd32f10x_fwdgt.h"
|
||||||
|
#include "gd32f10x_dbg.h"
|
||||||
|
#include "gd32f10x_misc.h"
|
||||||
|
#include "gd32f10x_pmu.h"
|
||||||
|
#include "gd32f10x_rcu.h"
|
||||||
|
#include "gd32f10x_rtc.h"
|
||||||
|
#include "gd32f10x_sdio.h"
|
||||||
|
#include "gd32f10x_spi.h"
|
||||||
|
#include "gd32f10x_timer.h"
|
||||||
|
#include "gd32f10x_usart.h"
|
||||||
|
#include "gd32f10x_wwdgt.h"
|
||||||
|
|
||||||
|
#endif /* GD32F10X_LIBOPT_H */
|
@ -0,0 +1,323 @@
|
|||||||
|
/*!
|
||||||
|
\file main.c
|
||||||
|
\brief communication_among_CANS in normal mode
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "gd32f10x_eval.h"
|
||||||
|
|
||||||
|
/* select CAN baudrate */
|
||||||
|
/* 1MBps */
|
||||||
|
#define CAN_BAUDRATE 1000
|
||||||
|
/* 500kBps */
|
||||||
|
/* #define CAN_BAUDRATE 500 */
|
||||||
|
/* 250kBps */
|
||||||
|
/* #define CAN_BAUDRATE 250 */
|
||||||
|
/* 125kBps */
|
||||||
|
/* #define CAN_BAUDRATE 125 */
|
||||||
|
/* 100kBps */
|
||||||
|
/* #define CAN_BAUDRATE 100 */
|
||||||
|
/* 50kBps */
|
||||||
|
/* #define CAN_BAUDRATE 50 */
|
||||||
|
/* 20kBps */
|
||||||
|
/* #define CAN_BAUDRATE 20 */
|
||||||
|
|
||||||
|
FlagStatus can0_receive_flag;
|
||||||
|
FlagStatus can1_receive_flag;
|
||||||
|
FlagStatus can0_error_flag;
|
||||||
|
FlagStatus can1_error_flag;
|
||||||
|
can_parameter_struct can_init_parameter;
|
||||||
|
can_filter_parameter_struct can_filter_parameter;
|
||||||
|
can_trasnmit_message_struct g_transmit_message;
|
||||||
|
can_receive_message_struct g_receive_message;
|
||||||
|
|
||||||
|
void nvic_config(void);
|
||||||
|
void led_config(void);
|
||||||
|
void can_gpio_config(void);
|
||||||
|
void can_config(can_parameter_struct can_parameter, can_filter_parameter_struct can_filter);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief initialize CAN and filter
|
||||||
|
\param[in] can_parameter
|
||||||
|
\arg can_parameter_struct
|
||||||
|
\param[in] can_filter
|
||||||
|
\arg can_filter_parameter_struct
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void can_config(can_parameter_struct can_parameter, can_filter_parameter_struct can_filter)
|
||||||
|
{
|
||||||
|
can_struct_para_init(CAN_INIT_STRUCT, &can_parameter);
|
||||||
|
can_struct_para_init(CAN_INIT_STRUCT, &can_filter);
|
||||||
|
/* initialize CAN register */
|
||||||
|
can_deinit(CAN0);
|
||||||
|
can_deinit(CAN1);
|
||||||
|
|
||||||
|
/* initialize CAN parameters */
|
||||||
|
can_parameter.time_triggered = DISABLE;
|
||||||
|
can_parameter.auto_bus_off_recovery = DISABLE;
|
||||||
|
can_parameter.auto_wake_up = DISABLE;
|
||||||
|
can_parameter.auto_retrans = DISABLE;
|
||||||
|
can_parameter.rec_fifo_overwrite = DISABLE;
|
||||||
|
can_parameter.trans_fifo_order = DISABLE;
|
||||||
|
can_parameter.working_mode = CAN_NORMAL_MODE;
|
||||||
|
can_parameter.resync_jump_width = CAN_BT_SJW_1TQ;
|
||||||
|
can_parameter.time_segment_1 = CAN_BT_BS1_5TQ;
|
||||||
|
can_parameter.time_segment_2 = CAN_BT_BS2_3TQ;
|
||||||
|
|
||||||
|
/* 1MBps */
|
||||||
|
#if CAN_BAUDRATE == 1000
|
||||||
|
can_parameter.prescaler = 6;
|
||||||
|
/* 500KBps */
|
||||||
|
#elif CAN_BAUDRATE == 500
|
||||||
|
can_parameter.prescaler = 12;
|
||||||
|
/* 250KBps */
|
||||||
|
#elif CAN_BAUDRATE == 250
|
||||||
|
can_parameter.prescaler = 24;
|
||||||
|
/* 125KBps */
|
||||||
|
#elif CAN_BAUDRATE == 125
|
||||||
|
can_parameter.prescaler = 48;
|
||||||
|
/* 100KBps */
|
||||||
|
#elif CAN_BAUDRATE == 100
|
||||||
|
can_parameter.prescaler = 60;
|
||||||
|
/* 50KBps */
|
||||||
|
#elif CAN_BAUDRATE == 50
|
||||||
|
can_parameter.prescaler = 120;
|
||||||
|
/* 20KBps */
|
||||||
|
#elif CAN_BAUDRATE == 20
|
||||||
|
can_parameter.prescaler = 300;
|
||||||
|
#else
|
||||||
|
#error "please select list can baudrate in private defines in main.c "
|
||||||
|
#endif
|
||||||
|
/* initialize CAN */
|
||||||
|
can_init(CAN0, &can_parameter);
|
||||||
|
can_init(CAN1, &can_parameter);
|
||||||
|
|
||||||
|
/* initialize filter */
|
||||||
|
can_filter.filter_number=0;
|
||||||
|
can_filter.filter_mode = CAN_FILTERMODE_MASK;
|
||||||
|
can_filter.filter_bits = CAN_FILTERBITS_32BIT;
|
||||||
|
can_filter.filter_list_high = 0x3000;
|
||||||
|
can_filter.filter_list_low = 0x0000;
|
||||||
|
can_filter.filter_mask_high = 0x3000;
|
||||||
|
can_filter.filter_mask_low = 0x0000;
|
||||||
|
can_filter.filter_fifo_number = CAN_FIFO0;
|
||||||
|
can_filter.filter_enable = ENABLE;
|
||||||
|
|
||||||
|
can_filter_init(&can_filter);
|
||||||
|
|
||||||
|
/* CAN1 filter number */
|
||||||
|
can_filter.filter_number = 15;
|
||||||
|
can_filter_init(&can_filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the nested vectored interrupt controller
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void nvic_config(void)
|
||||||
|
{
|
||||||
|
/* configure CAN0 NVIC */
|
||||||
|
nvic_irq_enable(CAN0_RX0_IRQn,0,0);
|
||||||
|
|
||||||
|
/* configure CAN1 NVIC */
|
||||||
|
nvic_irq_enable(CAN1_RX0_IRQn,1,1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the leds
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void led_config(void)
|
||||||
|
{
|
||||||
|
gd_eval_led_init(LED2);
|
||||||
|
gd_eval_led_init(LED3);
|
||||||
|
gd_eval_led_init(LED4);
|
||||||
|
gd_eval_led_init(LED5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure GPIO
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void can_gpio_config(void)
|
||||||
|
{
|
||||||
|
/* enable CAN clock */
|
||||||
|
rcu_periph_clock_enable(RCU_CAN0);
|
||||||
|
rcu_periph_clock_enable(RCU_CAN1);
|
||||||
|
rcu_periph_clock_enable(RCU_GPIOB);
|
||||||
|
rcu_periph_clock_enable(RCU_GPIOD);
|
||||||
|
rcu_periph_clock_enable(RCU_AF);
|
||||||
|
|
||||||
|
/* configure CAN0 GPIO */
|
||||||
|
gpio_init(GPIOD,GPIO_MODE_IPU,GPIO_OSPEED_50MHZ,GPIO_PIN_0);
|
||||||
|
gpio_init(GPIOD,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_1);
|
||||||
|
gpio_pin_remap_config(GPIO_CAN0_FULL_REMAP,ENABLE);
|
||||||
|
|
||||||
|
/* configure CAN1 GPIO */
|
||||||
|
gpio_init(GPIOB,GPIO_MODE_IPU,GPIO_OSPEED_50MHZ,GPIO_PIN_5);
|
||||||
|
gpio_init(GPIOB,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_6);
|
||||||
|
gpio_pin_remap_config(GPIO_CAN1_REMAP,ENABLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief main function
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
uint8_t i = 0U;
|
||||||
|
|
||||||
|
can0_receive_flag = RESET;
|
||||||
|
can1_receive_flag = RESET;
|
||||||
|
can0_error_flag = RESET;
|
||||||
|
can1_error_flag = RESET;
|
||||||
|
|
||||||
|
/* configure GPIO */
|
||||||
|
can_gpio_config();
|
||||||
|
|
||||||
|
/* configure NVIC */
|
||||||
|
nvic_config();
|
||||||
|
|
||||||
|
/* configure USART */
|
||||||
|
gd_eval_com_init(EVAL_COM0);
|
||||||
|
|
||||||
|
/* configure Wakeup key or Tamper key */
|
||||||
|
gd_eval_key_init(KEY_WAKEUP, KEY_MODE_GPIO);
|
||||||
|
gd_eval_key_init(KEY_TAMPER, KEY_MODE_GPIO);
|
||||||
|
|
||||||
|
printf("\r\nGD32F10x dual CAN test, please press Wakeup key or Tamper key to start communication!\r\n");
|
||||||
|
/* configure leds */
|
||||||
|
led_config();
|
||||||
|
gd_eval_led_off(LED2);
|
||||||
|
gd_eval_led_off(LED3);
|
||||||
|
gd_eval_led_off(LED4);
|
||||||
|
gd_eval_led_off(LED5);
|
||||||
|
|
||||||
|
/* initialize CAN and filter */
|
||||||
|
can_config(can_init_parameter, can_filter_parameter);
|
||||||
|
/* enable can receive FIFO0 not empty interrupt */
|
||||||
|
can_interrupt_enable(CAN0, CAN_INT_RFNE0);
|
||||||
|
can_interrupt_enable(CAN1, CAN_INT_RFNE0);
|
||||||
|
|
||||||
|
/* initialize transmit message */
|
||||||
|
g_transmit_message.tx_sfid = 0x7ab;
|
||||||
|
g_transmit_message.tx_efid = 0x00;
|
||||||
|
g_transmit_message.tx_ft = CAN_FT_DATA;
|
||||||
|
g_transmit_message.tx_ff = CAN_FF_STANDARD;
|
||||||
|
g_transmit_message.tx_dlen = 8;
|
||||||
|
|
||||||
|
g_transmit_message.tx_data[0] = 0xA0U;
|
||||||
|
g_transmit_message.tx_data[1] = 0xA1U;
|
||||||
|
g_transmit_message.tx_data[2] = 0xA2U;
|
||||||
|
g_transmit_message.tx_data[3] = 0xA3U;
|
||||||
|
g_transmit_message.tx_data[4] = 0xA4U;
|
||||||
|
g_transmit_message.tx_data[5] = 0xA5U;
|
||||||
|
g_transmit_message.tx_data[6] = 0xA6U;
|
||||||
|
g_transmit_message.tx_data[7] = 0xA7U;
|
||||||
|
|
||||||
|
while(1){
|
||||||
|
/* test whether the Tamper key is pressed */
|
||||||
|
if(0 == gd_eval_key_state_get(KEY_TAMPER)){
|
||||||
|
g_transmit_message.tx_data[0] = 0x55;
|
||||||
|
g_transmit_message.tx_data[1] = 0xAA;
|
||||||
|
|
||||||
|
printf("\r\n can0 transmit data:");
|
||||||
|
for(i = 0; i < g_transmit_message.tx_dlen; i++){
|
||||||
|
printf(" %02x", g_transmit_message.tx_data[i]);
|
||||||
|
}
|
||||||
|
/* transmit message */
|
||||||
|
can_message_transmit(CAN0, &g_transmit_message);
|
||||||
|
/* waiting for the Tamper key up */
|
||||||
|
while(0 == gd_eval_key_state_get(KEY_TAMPER));
|
||||||
|
}
|
||||||
|
/* test whether the Wakeup key is pressed */
|
||||||
|
if(0 == gd_eval_key_state_get(KEY_WAKEUP)){
|
||||||
|
g_transmit_message.tx_data[0] = 0xAA;
|
||||||
|
g_transmit_message.tx_data[1] = 0x55;
|
||||||
|
printf("\r\n can1 transmit data:");
|
||||||
|
for(i = 0; i < g_transmit_message.tx_dlen; i++){
|
||||||
|
printf(" %02x", g_transmit_message.tx_data[i]);
|
||||||
|
}
|
||||||
|
/* transmit message */
|
||||||
|
can_message_transmit(CAN1, &g_transmit_message);
|
||||||
|
/* waiting for the Wakeup key up */
|
||||||
|
while(0 == gd_eval_key_state_get(KEY_WAKEUP));
|
||||||
|
}
|
||||||
|
/* CAN0 receive data correctly, the received data is printed */
|
||||||
|
if(SET == can0_receive_flag){
|
||||||
|
can0_receive_flag = RESET;
|
||||||
|
printf("\r\n can0 receive data:");
|
||||||
|
for(i = 0; i < g_receive_message.rx_dlen; i++){
|
||||||
|
printf(" %02x", g_receive_message.rx_data[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
gd_eval_led_toggle(LED4);
|
||||||
|
}
|
||||||
|
/* CAN1 receive data correctly, the received data is printed */
|
||||||
|
if(SET == can1_receive_flag){
|
||||||
|
can1_receive_flag = RESET;
|
||||||
|
gd_eval_led_toggle(LED5);
|
||||||
|
printf("\r\n can1 receive data:");
|
||||||
|
for(i = 0; i < g_receive_message.rx_dlen; i++){
|
||||||
|
printf(" %02x", g_receive_message.rx_data[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* CAN0 error */
|
||||||
|
if(SET == can0_error_flag){
|
||||||
|
can0_error_flag = RESET;
|
||||||
|
printf("\r\n can0 communication error");
|
||||||
|
}
|
||||||
|
/* CAN1 error */
|
||||||
|
if(SET == can1_error_flag){
|
||||||
|
can1_error_flag = RESET;
|
||||||
|
printf("\r\n can1 communication error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* retarget the C library printf function to the usart */
|
||||||
|
int fputc(int ch, FILE *f)
|
||||||
|
{
|
||||||
|
usart_data_transmit(EVAL_COM0, (uint8_t)ch);
|
||||||
|
while (RESET == usart_flag_get(EVAL_COM0, USART_FLAG_TBE));
|
||||||
|
return ch;
|
||||||
|
}
|
@ -0,0 +1,53 @@
|
|||||||
|
/*!
|
||||||
|
\file readme.txt
|
||||||
|
\brief description of the communication_among_CANS demo
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
This demo is based on the GD32107C-EVAL board, it shows how to configure the
|
||||||
|
CAN0 and CAN1 peripherals to send and receive CAN frames in normal mode. Pressing
|
||||||
|
Wakeup key or Tamper key:
|
||||||
|
|
||||||
|
When Tamper key is pressed, CAN0 sends a message to CAN1 and print it.when CAN1
|
||||||
|
receives correctly this message,the receive data will be printedand LED5 toggles
|
||||||
|
one time.
|
||||||
|
|
||||||
|
When Wakeup key is pressed, CAN1 sends a message to CAN0 and print it. When CAN0
|
||||||
|
receives correctly this message,the receive data will be printed and LED4 toggles
|
||||||
|
one time.
|
||||||
|
|
||||||
|
User can select one from the preconfigured CAN baud rates from the private
|
||||||
|
defines in main.c. These baudrates is correct only when the system clock frequency
|
||||||
|
is 108M.
|
||||||
|
|
||||||
|
P2,P3 and P4 must be fitted.
|
||||||
|
Connect JP14 CAN_L to JP15 CAN_L
|
||||||
|
Connect JP14 CAN_H to JP15 CAN_H
|
@ -0,0 +1,182 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.c
|
||||||
|
\brief interrupt service routines
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x_it.h"
|
||||||
|
|
||||||
|
extern FlagStatus receive_flag;
|
||||||
|
extern can_receive_message_struct g_receive_message;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles NMI exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void NMI_Handler(void)
|
||||||
|
{
|
||||||
|
/* if NMI exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles HardFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void HardFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Hard Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles MemManage exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void MemManage_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Memory Manage exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles BusFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void BusFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Bus Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles UsageFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void UsageFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Usage Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SVC exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SVC_Handler(void)
|
||||||
|
{
|
||||||
|
/* if SVC exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles DebugMon exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void DebugMon_Handler(void)
|
||||||
|
{
|
||||||
|
/* if DebugMon exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles PendSV exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void PendSV_Handler(void)
|
||||||
|
{
|
||||||
|
/* if PendSV exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SysTick exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SysTick_Handler(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles CAN0 RX0 exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void CAN0_RX1_IRQHandler(void)
|
||||||
|
{
|
||||||
|
/* check the receive message */
|
||||||
|
can_message_receive(CAN0, CAN_FIFO1, &g_receive_message);
|
||||||
|
if((0xaabb == g_receive_message.rx_efid)&&(CAN_FF_EXTENDED == g_receive_message.rx_ff) && (8 == g_receive_message.rx_dlen)){
|
||||||
|
receive_flag = SET;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles CAN1 RX0 exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void CAN1_RX1_IRQHandler(void)
|
||||||
|
{
|
||||||
|
/* check the receive message */
|
||||||
|
can_message_receive(CAN1, CAN_FIFO1, &g_receive_message);
|
||||||
|
if((0xaabb == g_receive_message.rx_efid)&&(CAN_FF_EXTENDED == g_receive_message.rx_ff) && (8 == g_receive_message.rx_dlen)){
|
||||||
|
receive_flag = SET;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,64 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.h
|
||||||
|
\brief the header file of the ISR
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_IT_H
|
||||||
|
#define GD32F10X_IT_H
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
|
||||||
|
/* function declarations */
|
||||||
|
/* this function handles NMI exception */
|
||||||
|
void NMI_Handler(void);
|
||||||
|
/* this function handles HardFault exception */
|
||||||
|
void HardFault_Handler(void);
|
||||||
|
/* this function handles MemManage exception */
|
||||||
|
void MemManage_Handler(void);
|
||||||
|
/* this function handles BusFault exception */
|
||||||
|
void BusFault_Handler(void);
|
||||||
|
/* this function handles UsageFault exception */
|
||||||
|
void UsageFault_Handler(void);
|
||||||
|
/* this function handles SVC exception */
|
||||||
|
void SVC_Handler(void);
|
||||||
|
/* this function handles DebugMon exception */
|
||||||
|
void DebugMon_Handler(void);
|
||||||
|
/* this function handles PendSV exception */
|
||||||
|
void PendSV_Handler(void);
|
||||||
|
/* this function handles SysTick exception */
|
||||||
|
void SysTick_Handler(void);
|
||||||
|
/* CAN0 RX0 handle function */
|
||||||
|
void CAN0_RX0_IRQHandler(void);
|
||||||
|
/* CAN1 RX0 handle function */
|
||||||
|
void CAN1_RX0_IRQHandler(void);
|
||||||
|
|
||||||
|
#endif /* GD32F10X_IT_H */
|
@ -0,0 +1,62 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_libopt.h
|
||||||
|
\brief library optional for gd32f10x
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_LIBOPT_H
|
||||||
|
#define GD32F10X_LIBOPT_H
|
||||||
|
|
||||||
|
#include "gd32f10x_adc.h"
|
||||||
|
#include "gd32f10x_bkp.h"
|
||||||
|
#include "gd32f10x_can.h"
|
||||||
|
#include "gd32f10x_crc.h"
|
||||||
|
#include "gd32f10x_dac.h"
|
||||||
|
#include "gd32f10x_dma.h"
|
||||||
|
#include "gd32f10x_enet.h"
|
||||||
|
#include "gd32f10x_exmc.h"
|
||||||
|
#include "gd32f10x_exti.h"
|
||||||
|
#include "gd32f10x_fmc.h"
|
||||||
|
#include "gd32f10x_gpio.h"
|
||||||
|
#include "gd32f10x_i2c.h"
|
||||||
|
#include "gd32f10x_fwdgt.h"
|
||||||
|
#include "gd32f10x_dbg.h"
|
||||||
|
#include "gd32f10x_misc.h"
|
||||||
|
#include "gd32f10x_pmu.h"
|
||||||
|
#include "gd32f10x_rcu.h"
|
||||||
|
#include "gd32f10x_rtc.h"
|
||||||
|
#include "gd32f10x_sdio.h"
|
||||||
|
#include "gd32f10x_spi.h"
|
||||||
|
#include "gd32f10x_timer.h"
|
||||||
|
#include "gd32f10x_usart.h"
|
||||||
|
#include "gd32f10x_wwdgt.h"
|
||||||
|
|
||||||
|
#endif /* GD32F10X_LIBOPT_H */
|
@ -0,0 +1,291 @@
|
|||||||
|
/*!
|
||||||
|
\file main.c
|
||||||
|
\brief communication_among_Devices in normal mode
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "gd32f10x_eval.h"
|
||||||
|
|
||||||
|
/* select can */
|
||||||
|
#define CAN0_USED
|
||||||
|
//#define CAN1_USED
|
||||||
|
|
||||||
|
#ifdef CAN0_USED
|
||||||
|
#define CANX CAN0
|
||||||
|
#else
|
||||||
|
#define CANX CAN1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
FlagStatus receive_flag;
|
||||||
|
uint8_t transmit_number = 0x0;
|
||||||
|
can_trasnmit_message_struct g_transmit_message;
|
||||||
|
can_receive_message_struct g_receive_message;
|
||||||
|
|
||||||
|
void nvic_config(void);
|
||||||
|
void led_config(void);
|
||||||
|
void gpio_config(void);
|
||||||
|
ErrStatus can_networking(void);
|
||||||
|
void can_networking_init(void);
|
||||||
|
void delay(void);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief main function
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
uint8_t i = 0;
|
||||||
|
uint32_t timeout = 0xFFFF;
|
||||||
|
uint8_t transmit_mailbox = 0;
|
||||||
|
|
||||||
|
receive_flag = RESET;
|
||||||
|
/* configure Tamper key */
|
||||||
|
gd_eval_key_init(KEY_TAMPER, KEY_MODE_GPIO);
|
||||||
|
/* configure GPIO */
|
||||||
|
gpio_config();
|
||||||
|
/* configure USART */
|
||||||
|
gd_eval_com_init(EVAL_COM0);
|
||||||
|
/* configure NVIC */
|
||||||
|
nvic_config();
|
||||||
|
/* configure leds */
|
||||||
|
led_config();
|
||||||
|
/* set all leds off */
|
||||||
|
gd_eval_led_off(LED2);
|
||||||
|
gd_eval_led_off(LED3);
|
||||||
|
gd_eval_led_off(LED4);
|
||||||
|
gd_eval_led_off(LED5);
|
||||||
|
/* initialize CAN */
|
||||||
|
can_networking_init();
|
||||||
|
|
||||||
|
/* enable CAN receive FIFO1 not empty interrupt */
|
||||||
|
can_interrupt_enable(CANX, CAN_INT_RFNE1);
|
||||||
|
|
||||||
|
/* initialize transmit message */
|
||||||
|
can_struct_para_init(CAN_TX_MESSAGE_STRUCT, &g_transmit_message);
|
||||||
|
g_transmit_message.tx_sfid = 0x00;
|
||||||
|
g_transmit_message.tx_efid = 0xaabb;
|
||||||
|
g_transmit_message.tx_ft = CAN_FT_DATA;
|
||||||
|
g_transmit_message.tx_ff = CAN_FF_EXTENDED;
|
||||||
|
g_transmit_message.tx_dlen = 8;
|
||||||
|
|
||||||
|
g_transmit_message.tx_data[0] = 0xA0U;
|
||||||
|
g_transmit_message.tx_data[1] = 0xA1U;
|
||||||
|
g_transmit_message.tx_data[2] = 0xA2U;
|
||||||
|
g_transmit_message.tx_data[3] = 0xA3U;
|
||||||
|
g_transmit_message.tx_data[4] = 0xA4U;
|
||||||
|
g_transmit_message.tx_data[5] = 0xA5U;
|
||||||
|
g_transmit_message.tx_data[6] = 0xA6U;
|
||||||
|
g_transmit_message.tx_data[7] = 0xA7U;
|
||||||
|
|
||||||
|
printf("please press the Tamper key to transmit data!\r\n");
|
||||||
|
|
||||||
|
/* initialize receive message */
|
||||||
|
can_struct_para_init(CAN_RX_MESSAGE_STRUCT, &g_receive_message);
|
||||||
|
|
||||||
|
while(1) {
|
||||||
|
/* waiting for the Tamper key pressed */
|
||||||
|
while(0 == gd_eval_key_state_get(KEY_TAMPER)){
|
||||||
|
/* if transmit_number is 0x10, set it to 0x00 */
|
||||||
|
if(transmit_number == 0x10){
|
||||||
|
transmit_number = 0x00;
|
||||||
|
}else{
|
||||||
|
g_transmit_message.tx_data[0] = transmit_number++;
|
||||||
|
printf("\r\n can transmit data:");
|
||||||
|
for(i = 0; i < g_transmit_message.tx_dlen; i++){
|
||||||
|
printf(" %02x", g_transmit_message.tx_data[i]);
|
||||||
|
}
|
||||||
|
/* transmit message */
|
||||||
|
transmit_mailbox = can_message_transmit(CANX, &g_transmit_message);
|
||||||
|
/* waiting for transmit completed */
|
||||||
|
timeout = 0xFFFF;
|
||||||
|
while((CAN_TRANSMIT_OK != can_transmit_states(CANX, transmit_mailbox)) && (0 != timeout)){
|
||||||
|
timeout--;
|
||||||
|
}
|
||||||
|
/* waiting for Tamper key up */
|
||||||
|
while(0 == gd_eval_key_state_get(KEY_TAMPER));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(SET == receive_flag) {
|
||||||
|
gd_eval_led_toggle(LED2);
|
||||||
|
receive_flag = RESET;
|
||||||
|
printf("\r\n receive data:");
|
||||||
|
for(i = 0; i < g_receive_message.rx_dlen; i++){
|
||||||
|
printf(" %02x", g_receive_message.rx_data[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief initialize CAN and filter
|
||||||
|
\param[in] can_parameter
|
||||||
|
\arg can_parameter_struct
|
||||||
|
\param[in] can_filter
|
||||||
|
\arg can_filter_parameter_struct
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void can_networking_init(void)
|
||||||
|
{
|
||||||
|
can_parameter_struct can_parameter;
|
||||||
|
can_filter_parameter_struct can_filter;
|
||||||
|
|
||||||
|
can_struct_para_init(CAN_INIT_STRUCT, &can_parameter);
|
||||||
|
can_struct_para_init(CAN_FILTER_STRUCT, &can_filter);
|
||||||
|
|
||||||
|
/* initialize CAN register */
|
||||||
|
can_deinit(CANX);
|
||||||
|
|
||||||
|
/* initialize CAN */
|
||||||
|
can_parameter.time_triggered = DISABLE;
|
||||||
|
can_parameter.auto_bus_off_recovery = DISABLE;
|
||||||
|
can_parameter.auto_wake_up = DISABLE;
|
||||||
|
can_parameter.auto_retrans = DISABLE;
|
||||||
|
can_parameter.rec_fifo_overwrite = DISABLE;
|
||||||
|
can_parameter.trans_fifo_order = DISABLE;
|
||||||
|
can_parameter.working_mode = CAN_NORMAL_MODE;
|
||||||
|
can_parameter.resync_jump_width = CAN_BT_SJW_1TQ;
|
||||||
|
can_parameter.time_segment_1 = CAN_BT_BS1_5TQ;
|
||||||
|
can_parameter.time_segment_2 = CAN_BT_BS2_3TQ;
|
||||||
|
/* baudrate 1Mbps */
|
||||||
|
can_parameter.prescaler = 6;
|
||||||
|
can_init(CANX, &can_parameter);
|
||||||
|
|
||||||
|
/* initialize filter */
|
||||||
|
#ifdef CAN0_USED
|
||||||
|
/* CAN0 filter number */
|
||||||
|
can_filter.filter_number = 0;
|
||||||
|
#else
|
||||||
|
/* CAN1 filter number */
|
||||||
|
can_filter.filter_number = 15;
|
||||||
|
#endif
|
||||||
|
/* initialize filter */
|
||||||
|
can_filter.filter_mode = CAN_FILTERMODE_MASK;
|
||||||
|
can_filter.filter_bits = CAN_FILTERBITS_32BIT;
|
||||||
|
can_filter.filter_list_high = 0x0000U;
|
||||||
|
can_filter.filter_list_low = 0x0000U;
|
||||||
|
can_filter.filter_mask_high = 0x0000U;
|
||||||
|
can_filter.filter_mask_low = 0x0000U;
|
||||||
|
can_filter.filter_fifo_number = CAN_FIFO1;
|
||||||
|
can_filter.filter_enable = ENABLE;
|
||||||
|
can_filter_init(&can_filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the nested vectored interrupt controller
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void nvic_config(void)
|
||||||
|
{
|
||||||
|
#ifdef CAN0_USED
|
||||||
|
/* configure CAN0 NVIC */
|
||||||
|
nvic_irq_enable(CAN0_RX1_IRQn,0,0);
|
||||||
|
#else
|
||||||
|
/* configure CAN1 NVIC */
|
||||||
|
nvic_irq_enable(CAN1_RX1_IRQn,0,0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief delay
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void delay(void)
|
||||||
|
{
|
||||||
|
uint16_t nTime = 0x0000;
|
||||||
|
|
||||||
|
for(nTime = 0; nTime < 0xFFFF; nTime++){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure the leds
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void led_config(void)
|
||||||
|
{
|
||||||
|
gd_eval_led_init(LED2);
|
||||||
|
gd_eval_led_init(LED3);
|
||||||
|
gd_eval_led_init(LED4);
|
||||||
|
gd_eval_led_init(LED5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure GPIO
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void gpio_config(void)
|
||||||
|
{
|
||||||
|
/* enable CAN clock */
|
||||||
|
rcu_periph_clock_enable(RCU_CAN0);
|
||||||
|
|
||||||
|
#ifdef GD32F10X_CL
|
||||||
|
rcu_periph_clock_enable(RCU_CAN1);
|
||||||
|
rcu_periph_clock_enable(RCU_GPIOB);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
rcu_periph_clock_enable(RCU_GPIOD);
|
||||||
|
rcu_periph_clock_enable(RCU_AF);
|
||||||
|
|
||||||
|
/* configure CAN0 GPIO */
|
||||||
|
gpio_init(GPIOD,GPIO_MODE_IPU,GPIO_OSPEED_50MHZ,GPIO_PIN_0);
|
||||||
|
gpio_init(GPIOD,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_1);
|
||||||
|
gpio_pin_remap_config(GPIO_CAN0_FULL_REMAP,ENABLE);
|
||||||
|
|
||||||
|
#ifdef GD32F10X_CL
|
||||||
|
/* configure CAN1 GPIO */
|
||||||
|
gpio_init(GPIOB,GPIO_MODE_IPU,GPIO_OSPEED_50MHZ,GPIO_PIN_5);
|
||||||
|
gpio_init(GPIOB,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_6);
|
||||||
|
gpio_pin_remap_config(GPIO_CAN1_REMAP,ENABLE);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/* retarget the C library printf function to the usart */
|
||||||
|
int fputc(int ch, FILE *f)
|
||||||
|
{
|
||||||
|
usart_data_transmit(EVAL_COM0, (uint8_t) ch);
|
||||||
|
while (RESET == usart_flag_get(EVAL_COM0, USART_FLAG_TBE)) {
|
||||||
|
}
|
||||||
|
return ch;
|
||||||
|
}
|
@ -0,0 +1,46 @@
|
|||||||
|
/*!
|
||||||
|
\file readme.txt
|
||||||
|
\brief description of the communication_among_Devices demo
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
This demo is based on the GD32107C-EVAL board, it shows how to configure the CAN
|
||||||
|
peripheral to send and receive CAN frames in normal mode.The frames are sent and print
|
||||||
|
transmit data by pressing Tamper Key. When the frames are received, the receive data
|
||||||
|
will be printed and the LED2 will toggle.
|
||||||
|
|
||||||
|
This example is tested with at least two GD32107C-EVAL boards. The same program example
|
||||||
|
is loaded in all boards and connect CAN_L and CAN_H pin of CAN0 or CAN1 to bus for sending
|
||||||
|
and receiving frames.
|
||||||
|
|
||||||
|
User can select CAN0 or CAN1 cell using the private defines in main.c.
|
||||||
|
|
||||||
|
|
@ -0,0 +1,138 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.c
|
||||||
|
\brief interrupt service routines
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
#include "gd32f10x_it.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles NMI exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void NMI_Handler(void)
|
||||||
|
{
|
||||||
|
/* if NMI exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles HardFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void HardFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Hard Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles MemManage exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void MemManage_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Memory Manage exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles BusFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void BusFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Bus Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles UsageFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void UsageFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Usage Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SVC exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SVC_Handler(void)
|
||||||
|
{
|
||||||
|
/* if SVC exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles DebugMon exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void DebugMon_Handler(void)
|
||||||
|
{
|
||||||
|
/* if DebugMon exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles PendSV exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void PendSV_Handler(void)
|
||||||
|
{
|
||||||
|
/* if PendSV exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,58 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.h
|
||||||
|
\brief the header file of the ISR
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_IT_H
|
||||||
|
#define GD32F10X_IT_H
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
|
||||||
|
/* function declarations */
|
||||||
|
/* this function handles NMI exception */
|
||||||
|
void NMI_Handler(void);
|
||||||
|
/* this function handles HardFault exception */
|
||||||
|
void HardFault_Handler(void);
|
||||||
|
/* this function handles MemManage exception */
|
||||||
|
void MemManage_Handler(void);
|
||||||
|
/* this function handles BusFault exception */
|
||||||
|
void BusFault_Handler(void);
|
||||||
|
/* this function handles UsageFault exception */
|
||||||
|
void UsageFault_Handler(void);
|
||||||
|
/* this function handles SVC exception */
|
||||||
|
void SVC_Handler(void);
|
||||||
|
/* this function handles DebugMon exception */
|
||||||
|
void DebugMon_Handler(void);
|
||||||
|
/* this function handles PendSV exception */
|
||||||
|
void PendSV_Handler(void);
|
||||||
|
|
||||||
|
#endif /* GD32F10X_IT_H */
|
@ -0,0 +1,62 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_libopt.h
|
||||||
|
\brief library optional for gd32f10x
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_LIBOPT_H
|
||||||
|
#define GD32F10X_LIBOPT_H
|
||||||
|
|
||||||
|
#include "gd32f10x_adc.h"
|
||||||
|
#include "gd32f10x_bkp.h"
|
||||||
|
#include "gd32f10x_can.h"
|
||||||
|
#include "gd32f10x_crc.h"
|
||||||
|
#include "gd32f10x_dac.h"
|
||||||
|
#include "gd32f10x_dma.h"
|
||||||
|
#include "gd32f10x_enet.h"
|
||||||
|
#include "gd32f10x_exmc.h"
|
||||||
|
#include "gd32f10x_exti.h"
|
||||||
|
#include "gd32f10x_fmc.h"
|
||||||
|
#include "gd32f10x_gpio.h"
|
||||||
|
#include "gd32f10x_i2c.h"
|
||||||
|
#include "gd32f10x_fwdgt.h"
|
||||||
|
#include "gd32f10x_dbg.h"
|
||||||
|
#include "gd32f10x_misc.h"
|
||||||
|
#include "gd32f10x_pmu.h"
|
||||||
|
#include "gd32f10x_rcu.h"
|
||||||
|
#include "gd32f10x_rtc.h"
|
||||||
|
#include "gd32f10x_sdio.h"
|
||||||
|
#include "gd32f10x_spi.h"
|
||||||
|
#include "gd32f10x_timer.h"
|
||||||
|
#include "gd32f10x_usart.h"
|
||||||
|
#include "gd32f10x_wwdgt.h"
|
||||||
|
|
||||||
|
#endif /* GD32F10X_LIBOPT_H */
|
@ -0,0 +1,73 @@
|
|||||||
|
/*!
|
||||||
|
\file main.c
|
||||||
|
\brief CRC calculate demo
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
#include "gd32f10x_eval.h"
|
||||||
|
|
||||||
|
uint32_t val = 0, valcrc1 = 0, valcrc2 = 0;
|
||||||
|
uint32_t val_data[] = {0x11223344, 0x55667788, 0x99aabbcc, 0xddeeffff};
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief main function
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
val = (uint32_t)0xabcd1234;
|
||||||
|
|
||||||
|
/* initialize the LED2 and LED3, turn off them */
|
||||||
|
gd_eval_led_init(LED2);
|
||||||
|
gd_eval_led_init(LED3);
|
||||||
|
gd_eval_led_off(LED2);
|
||||||
|
gd_eval_led_off(LED3);
|
||||||
|
rcu_periph_clock_enable(RCU_CRC);
|
||||||
|
|
||||||
|
/* reset the CRC data register and calculate the CRC of the value */
|
||||||
|
crc_data_register_reset();
|
||||||
|
valcrc1 = crc_single_data_calculate(val);
|
||||||
|
|
||||||
|
/* reset the CRC data register and calculate the CRC of the value group */
|
||||||
|
crc_data_register_reset();
|
||||||
|
valcrc2 = crc_block_data_calculate(val_data, sizeof(val_data)/sizeof(val_data[0]));
|
||||||
|
|
||||||
|
if(0xf7018a40 == valcrc1 && 0x85A317CB == valcrc2){
|
||||||
|
gd_eval_led_on(LED2);
|
||||||
|
gd_eval_led_on(LED3);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (1){
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
/*!
|
||||||
|
\file readme.txt
|
||||||
|
\brief description of CRC example
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
This example is based on the GD32107C board, it shows how to use CRC to
|
||||||
|
calculate the CRC value.
|
||||||
|
In this demo, 1 CRC value and a value group are calculated for a 32-bit data, If
|
||||||
|
the result is success, turn on the LED2 and LED3.
|
@ -0,0 +1,138 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.c
|
||||||
|
\brief interrupt service routines
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
#include "gd32f10x_it.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles NMI exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void NMI_Handler(void)
|
||||||
|
{
|
||||||
|
/* if NMI exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles HardFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void HardFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Hard Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles MemManage exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void MemManage_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Memory Manage exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles BusFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void BusFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Bus Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles UsageFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void UsageFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Usage Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SVC exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SVC_Handler(void)
|
||||||
|
{
|
||||||
|
/* if SVC exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles DebugMon exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void DebugMon_Handler(void)
|
||||||
|
{
|
||||||
|
/* if DebugMon exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles PendSV exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void PendSV_Handler(void)
|
||||||
|
{
|
||||||
|
/* if PendSV exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,58 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.h
|
||||||
|
\brief the header file of the ISR
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_IT_H
|
||||||
|
#define GD32F10X_IT_H
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
|
||||||
|
/* function declarations */
|
||||||
|
/* this function handles NMI exception */
|
||||||
|
void NMI_Handler(void);
|
||||||
|
/* this function handles HardFault exception */
|
||||||
|
void HardFault_Handler(void);
|
||||||
|
/* this function handles MemManage exception */
|
||||||
|
void MemManage_Handler(void);
|
||||||
|
/* this function handles BusFault exception */
|
||||||
|
void BusFault_Handler(void);
|
||||||
|
/* this function handles UsageFault exception */
|
||||||
|
void UsageFault_Handler(void);
|
||||||
|
/* this function handles SVC exception */
|
||||||
|
void SVC_Handler(void);
|
||||||
|
/* this function handles DebugMon exception */
|
||||||
|
void DebugMon_Handler(void);
|
||||||
|
/* this function handles PendSV exception */
|
||||||
|
void PendSV_Handler(void);
|
||||||
|
|
||||||
|
#endif /* GD32F10X_IT_H */
|
@ -0,0 +1,62 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_libopt.h
|
||||||
|
\brief library optional for gd32f10x
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_LIBOPT_H
|
||||||
|
#define GD32F10X_LIBOPT_H
|
||||||
|
|
||||||
|
#include "gd32f10x_fmc.h"
|
||||||
|
#include "gd32f10x_pmu.h"
|
||||||
|
#include "gd32f10x_bkp.h"
|
||||||
|
#include "gd32f10x_rcu.h"
|
||||||
|
#include "gd32f10x_exti.h"
|
||||||
|
#include "gd32f10x_gpio.h"
|
||||||
|
#include "gd32f10x_crc.h"
|
||||||
|
#include "gd32f10x_dma.h"
|
||||||
|
#include "gd32f10x_dbg.h"
|
||||||
|
#include "gd32f10x_adc.h"
|
||||||
|
#include "gd32f10x_dac.h"
|
||||||
|
#include "gd32f10x_fwdgt.h"
|
||||||
|
#include "gd32f10x_wwdgt.h"
|
||||||
|
#include "gd32f10x_rtc.h"
|
||||||
|
#include "gd32f10x_timer.h"
|
||||||
|
#include "gd32f10x_usart.h"
|
||||||
|
#include "gd32f10x_i2c.h"
|
||||||
|
#include "gd32f10x_spi.h"
|
||||||
|
#include "gd32f10x_sdio.h"
|
||||||
|
#include "gd32f10x_exmc.h"
|
||||||
|
#include "gd32f10x_can.h"
|
||||||
|
#include "gd32f10x_enet.h"
|
||||||
|
#include "gd32f10x_misc.h"
|
||||||
|
|
||||||
|
#endif /* GD32F10X_LIBOPT_H */
|
@ -0,0 +1,187 @@
|
|||||||
|
/*!
|
||||||
|
\file main.c
|
||||||
|
\brief DAC concurrent mode independent trigger with different LFSR demo
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
|
||||||
|
/* configure RCU peripheral */
|
||||||
|
void rcu_config(void);
|
||||||
|
/* configure GPIO peripheral */
|
||||||
|
void gpio_config(void);
|
||||||
|
/* configure DAC peripheral */
|
||||||
|
void dac_config(void);
|
||||||
|
/* configure TIMER peripheral */
|
||||||
|
void timer5_config(void);
|
||||||
|
void timer6_config(void);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief main function
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
/* configure RCU peripheral */
|
||||||
|
rcu_config();
|
||||||
|
/* configure GPIO peripheral */
|
||||||
|
gpio_config();
|
||||||
|
/* configure DAC peripheral */
|
||||||
|
dac_config();
|
||||||
|
/* configure TIMER peripheral */
|
||||||
|
timer5_config();
|
||||||
|
timer6_config();
|
||||||
|
|
||||||
|
while(1) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure RCU peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void rcu_config(void)
|
||||||
|
{
|
||||||
|
/* enable GPIOA clock */
|
||||||
|
rcu_periph_clock_enable(RCU_GPIOA);
|
||||||
|
/* enable DAC clock */
|
||||||
|
rcu_periph_clock_enable(RCU_DAC);
|
||||||
|
/* enable TIMER clock */
|
||||||
|
rcu_periph_clock_enable(RCU_TIMER5);
|
||||||
|
rcu_periph_clock_enable(RCU_TIMER6);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure GPIO peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void gpio_config(void)
|
||||||
|
{
|
||||||
|
/* configure PA4 and PA5 as DAC output */
|
||||||
|
gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_4 | GPIO_PIN_5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure DAC peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void dac_config(void)
|
||||||
|
{
|
||||||
|
/* initialize DAC */
|
||||||
|
dac_deinit(DAC0);
|
||||||
|
/* DAC trigger config */
|
||||||
|
dac_trigger_source_config(DAC0, DAC_OUT0, DAC_TRIGGER_T5_TRGO);
|
||||||
|
dac_trigger_source_config(DAC0, DAC_OUT1, DAC_TRIGGER_T6_TRGO);
|
||||||
|
/* DAC trigger enable */
|
||||||
|
dac_trigger_enable(DAC0, DAC_OUT0);
|
||||||
|
dac_trigger_enable(DAC0, DAC_OUT1);
|
||||||
|
/* DAC wave mode config */
|
||||||
|
dac_wave_mode_config(DAC0, DAC_OUT0, DAC_WAVE_MODE_LFSR);
|
||||||
|
dac_lfsr_noise_config(DAC0, DAC_OUT0, DAC_LFSR_BITS9_0);
|
||||||
|
dac_wave_mode_config(DAC0, DAC_OUT1, DAC_WAVE_MODE_LFSR);
|
||||||
|
dac_lfsr_noise_config(DAC0, DAC_OUT1, DAC_LFSR_BITS10_0);
|
||||||
|
|
||||||
|
/* DAC enable */
|
||||||
|
dac_concurrent_enable(DAC0);
|
||||||
|
dac_concurrent_data_set(DAC0, DAC_ALIGN_12B_R, 0x7F0, 0x7F0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure TIMER5 peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void timer5_config(void)
|
||||||
|
{
|
||||||
|
timer_parameter_struct timer_initpara;
|
||||||
|
|
||||||
|
/* TIMER deinitialize */
|
||||||
|
timer_deinit(TIMER5);
|
||||||
|
|
||||||
|
/* TIMER configuration */
|
||||||
|
timer_struct_para_init(&timer_initpara);
|
||||||
|
timer_initpara.prescaler = 107;
|
||||||
|
timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
|
||||||
|
timer_initpara.counterdirection = TIMER_COUNTER_UP;
|
||||||
|
timer_initpara.period = 999;
|
||||||
|
timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
|
||||||
|
timer_initpara.repetitioncounter = 0;
|
||||||
|
|
||||||
|
/* initialize TIMER init parameter struct */
|
||||||
|
timer_init(TIMER5, &timer_initpara);
|
||||||
|
|
||||||
|
/* TIMER master mode output trigger source: Update event */
|
||||||
|
timer_master_output_trigger_source_select(TIMER5, TIMER_TRI_OUT_SRC_UPDATE);
|
||||||
|
|
||||||
|
/* enable TIMER */
|
||||||
|
timer_enable(TIMER5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure TIMER6 peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void timer6_config(void)
|
||||||
|
{
|
||||||
|
timer_parameter_struct timer_initpara;
|
||||||
|
|
||||||
|
/* TIMER deinitialize */
|
||||||
|
timer_deinit(TIMER6);
|
||||||
|
|
||||||
|
/* TIMER configuration */
|
||||||
|
timer_struct_para_init(&timer_initpara);
|
||||||
|
timer_initpara.prescaler = 107;
|
||||||
|
timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
|
||||||
|
timer_initpara.counterdirection = TIMER_COUNTER_UP;
|
||||||
|
timer_initpara.period = 999;
|
||||||
|
timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
|
||||||
|
timer_initpara.repetitioncounter = 0;
|
||||||
|
|
||||||
|
/* initialize TIMER init parameter struct */
|
||||||
|
timer_init(TIMER6, &timer_initpara);
|
||||||
|
|
||||||
|
/* TIMER master mode output trigger source: Update event */
|
||||||
|
timer_master_output_trigger_source_select(TIMER6, TIMER_TRI_OUT_SRC_UPDATE);
|
||||||
|
|
||||||
|
/* enable TIMER */
|
||||||
|
timer_enable(TIMER6);
|
||||||
|
}
|
@ -0,0 +1,49 @@
|
|||||||
|
/*!
|
||||||
|
\file readme.txt
|
||||||
|
\brief description of DACC_independent_trigger_LFSR_noise example
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
This example is based on the GD32F107C-EVAL-V1.3 board, it shows how to use DAC concurrent
|
||||||
|
mode to generate LFSR noise wave with different trigger signal TIMER5 and TIMER6.
|
||||||
|
|
||||||
|
TIMER5 and TIMER6 are configured as following:
|
||||||
|
- Up counting mode.
|
||||||
|
- System clock devide into 1Mhz.
|
||||||
|
- Update event per millisecond.
|
||||||
|
- Update event as TRGO to trigger DAC0_OUT0/DAC0_OUT1.
|
||||||
|
DAC is configured as following:
|
||||||
|
- Data 12-bit right alligned.
|
||||||
|
- TIMER5/TIMER6 TRGO signal trigger DAC0_OUT0/DAC0_OUT1.
|
||||||
|
- DAC0_OUT0/DAC0_OUT1 is configured as PA4/PA5.
|
||||||
|
- LFSR mode, with 0-9/0-10 bit masking and offset value 0x7f0.
|
||||||
|
|
||||||
|
After system start-up, the LFSR noise wave can be observed through the scilloscope.
|
@ -0,0 +1,138 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.c
|
||||||
|
\brief interrupt service routines
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
#include "gd32f10x_it.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles NMI exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void NMI_Handler(void)
|
||||||
|
{
|
||||||
|
/* if NMI exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles HardFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void HardFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Hard Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles MemManage exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void MemManage_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Memory Manage exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles BusFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void BusFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Bus Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles UsageFault exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void UsageFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* if Usage Fault exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles SVC exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void SVC_Handler(void)
|
||||||
|
{
|
||||||
|
/* if SVC exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles DebugMon exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void DebugMon_Handler(void)
|
||||||
|
{
|
||||||
|
/* if DebugMon exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief this function handles PendSV exception
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void PendSV_Handler(void)
|
||||||
|
{
|
||||||
|
/* if PendSV exception occurs, go to infinite loop */
|
||||||
|
while(1){
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,58 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_it.h
|
||||||
|
\brief the header file of the ISR
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_IT_H
|
||||||
|
#define GD32F10X_IT_H
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
|
||||||
|
/* function declarations */
|
||||||
|
/* this function handles NMI exception */
|
||||||
|
void NMI_Handler(void);
|
||||||
|
/* this function handles HardFault exception */
|
||||||
|
void HardFault_Handler(void);
|
||||||
|
/* this function handles MemManage exception */
|
||||||
|
void MemManage_Handler(void);
|
||||||
|
/* this function handles BusFault exception */
|
||||||
|
void BusFault_Handler(void);
|
||||||
|
/* this function handles UsageFault exception */
|
||||||
|
void UsageFault_Handler(void);
|
||||||
|
/* this function handles SVC exception */
|
||||||
|
void SVC_Handler(void);
|
||||||
|
/* this function handles DebugMon exception */
|
||||||
|
void DebugMon_Handler(void);
|
||||||
|
/* this function handles PendSV exception */
|
||||||
|
void PendSV_Handler(void);
|
||||||
|
|
||||||
|
#endif /* GD32F10X_IT_H */
|
@ -0,0 +1,62 @@
|
|||||||
|
/*!
|
||||||
|
\file gd32f10x_libopt.h
|
||||||
|
\brief library optional for gd32f10x
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GD32F10X_LIBOPT_H
|
||||||
|
#define GD32F10X_LIBOPT_H
|
||||||
|
|
||||||
|
#include "gd32f10x_fmc.h"
|
||||||
|
#include "gd32f10x_pmu.h"
|
||||||
|
#include "gd32f10x_bkp.h"
|
||||||
|
#include "gd32f10x_rcu.h"
|
||||||
|
#include "gd32f10x_exti.h"
|
||||||
|
#include "gd32f10x_gpio.h"
|
||||||
|
#include "gd32f10x_crc.h"
|
||||||
|
#include "gd32f10x_dma.h"
|
||||||
|
#include "gd32f10x_dbg.h"
|
||||||
|
#include "gd32f10x_adc.h"
|
||||||
|
#include "gd32f10x_dac.h"
|
||||||
|
#include "gd32f10x_fwdgt.h"
|
||||||
|
#include "gd32f10x_wwdgt.h"
|
||||||
|
#include "gd32f10x_rtc.h"
|
||||||
|
#include "gd32f10x_timer.h"
|
||||||
|
#include "gd32f10x_usart.h"
|
||||||
|
#include "gd32f10x_i2c.h"
|
||||||
|
#include "gd32f10x_spi.h"
|
||||||
|
#include "gd32f10x_sdio.h"
|
||||||
|
#include "gd32f10x_exmc.h"
|
||||||
|
#include "gd32f10x_can.h"
|
||||||
|
#include "gd32f10x_enet.h"
|
||||||
|
#include "gd32f10x_misc.h"
|
||||||
|
|
||||||
|
#endif /* GD32F10X_LIBOPT_H */
|
@ -0,0 +1,109 @@
|
|||||||
|
/*!
|
||||||
|
\file main.c
|
||||||
|
\brief DAC concurrent mode output voltage demo
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gd32f10x.h"
|
||||||
|
|
||||||
|
/* configure RCU peripheral */
|
||||||
|
void rcu_config(void);
|
||||||
|
/* configure GPIO peripheral */
|
||||||
|
void gpio_config(void);
|
||||||
|
/* configure DAC peripheral */
|
||||||
|
void dac_config(void);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief main function
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
/* configure RCU peripheral */
|
||||||
|
rcu_config();
|
||||||
|
/* configure GPIO peripheral */
|
||||||
|
gpio_config();
|
||||||
|
/* configure DAC peripheral */
|
||||||
|
dac_config();
|
||||||
|
|
||||||
|
while(1) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure RCU peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void rcu_config(void)
|
||||||
|
{
|
||||||
|
/* enable GPIOA clock */
|
||||||
|
rcu_periph_clock_enable(RCU_GPIOA);
|
||||||
|
/* enable DAC clock */
|
||||||
|
rcu_periph_clock_enable(RCU_DAC);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure GPIO peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void gpio_config(void)
|
||||||
|
{
|
||||||
|
/* configure PA4 and PA5 as DAC output */
|
||||||
|
gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_4 | GPIO_PIN_5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief configure DAC peripheral
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
*/
|
||||||
|
void dac_config(void)
|
||||||
|
{
|
||||||
|
/* initialize DAC */
|
||||||
|
dac_deinit(DAC0);
|
||||||
|
/* DAC trigger disable */
|
||||||
|
dac_trigger_disable(DAC0, DAC_OUT0);
|
||||||
|
dac_trigger_disable(DAC0, DAC_OUT1);
|
||||||
|
/* DAC wave mode config */
|
||||||
|
dac_wave_mode_config(DAC0, DAC_OUT0, DAC_WAVE_DISABLE);
|
||||||
|
dac_wave_mode_config(DAC0, DAC_OUT1, DAC_WAVE_DISABLE);
|
||||||
|
|
||||||
|
/* DAC enable */
|
||||||
|
dac_concurrent_enable(DAC0);
|
||||||
|
dac_concurrent_data_set(DAC0, DAC_ALIGN_12B_L, 0x7FF0, 0x1FF0);
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
/*!
|
||||||
|
\file readme.txt
|
||||||
|
\brief description of DACC_output_voltage example
|
||||||
|
|
||||||
|
\version 2024-01-05, V2.3.0, firmware for GD32F10x
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2024, GigaDevice Semiconductor Inc.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
This example is based on the GD32F107C-EVAL-V1.3 board, it shows how to use DAC concurrent
|
||||||
|
mode to output voltage.
|
||||||
|
|
||||||
|
DAC is configured as following:
|
||||||
|
- Data 12-bit left alligned.
|
||||||
|
- DAC0_OUT0/DAC0_OUT1 is configured as PA4/PA5.
|
||||||
|
|
||||||
|
After system start-up, VREF/2(PA4) and VREF/8(PA5) can be observed through the scilloscope.
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user