URL
https://opencores.org/ocsvn/neorv32/neorv32/trunk
Subversion Repositories neorv32
Compare Revisions
- This comparison shows the changes necessary to convert path
/neorv32/trunk/sw
- from Rev 66 to Rev 67
- ↔ Reverse comparison
Rev 66 → Rev 67
/common/common.mk
1,3 → 1,39
################################################################################################# |
# << NEORV32 - Application Makefile >> # |
# ********************************************************************************************* # |
# Make sure to add the RISC-V GCC compiler's bin folder to your PATH environment variable. # |
# ********************************************************************************************* # |
# BSD 3-Clause License # |
# # |
# Copyright (c) 2021, Stephan Nolting. All rights reserved. # |
# # |
# 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. # |
# ********************************************************************************************* # |
# The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting # |
################################################################################################# |
|
# ----------------------------------------------------------------------------- |
# USER CONFIGURATION |
# ----------------------------------------------------------------------------- |
/example/demo_gptmr/main.c
0,0 → 1,120
// ################################################################################################# |
// # << NEORV32 - General Purpose Timer (GPTMR) Demo Program >> # |
// # ********************************************************************************************* # |
// # BSD 3-Clause License # |
// # # |
// # Copyright (c) 2021, Stephan Nolting. All rights reserved. # |
// # # |
// # 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. # |
// # ********************************************************************************************* # |
// # The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting # |
// ################################################################################################# |
|
|
/**********************************************************************//** |
* @file demo_gptmr/main.c |
* @author Stephan Nolting |
* @brief Simple GPTMR usage example. |
**************************************************************************/ |
|
#include <neorv32.h> |
|
|
/**********************************************************************//** |
* @name User configuration |
**************************************************************************/ |
/**@{*/ |
/** UART BAUD rate */ |
#define BAUD_RATE 19200 |
/**@}*/ |
|
|
// Prototypes |
void gptmr_firq_handler(void); |
|
|
/**********************************************************************//** |
* This program blinks an LED at GPIO.output(0) at 1Hz using the general purpose timer interrupt. |
* |
* @note This program requires the GPTMR unit to be synthesized. |
* |
* @return Should not return; |
**************************************************************************/ |
int main() { |
|
// capture all exceptions and give debug info via UART |
neorv32_rte_setup(); |
|
// init UART at default baud rate, no parity bits, ho hw flow control |
neorv32_uart0_setup(BAUD_RATE, PARITY_NONE, FLOW_CONTROL_NONE); |
|
|
// check if GPTMR unit is implemented at all |
if (neorv32_gptmr_available() == 0) { |
neorv32_uart0_print("General purpose timer not implemented!\n"); |
return 1; |
} |
|
// Intro |
neorv32_uart0_print("General purpose timer (GPTMR) demo Program.\n" |
"Toggles GPIO.output(0) at 1Hz using the GPTMR interrupt.\n\n"); |
|
|
// clear GPIO output port |
neorv32_gpio_port_set(0); |
|
|
// install GPTMR interrupt handler |
neorv32_rte_exception_install(GPTMR_RTE_ID, gptmr_firq_handler); |
|
// configure timer for 1Hz in continuous mode |
uint32_t soc_clock = NEORV32_SYSINFO.CLK; |
soc_clock = soc_clock / 2; // divide by two as we are using the 1/2 clock prescaler |
neorv32_gptmr_setup(CLK_PRSC_2, 1, soc_clock); |
|
// enable interrupt |
neorv32_cpu_irq_enable(GPTMR_FIRQ_ENABLE); // enable GPTRM FIRQ channel |
neorv32_cpu_eint(); // enable global interrupt flag |
|
|
// do nothing, wait for interrupt |
while(1); |
|
return 0; |
} |
|
|
/**********************************************************************//** |
* GPTMR FIRQ handler. |
* |
* @warning This function has to be of type "void xyz(void)" and must not use any interrupt attributes! |
**************************************************************************/ |
void gptmr_firq_handler(void) { |
|
neorv32_gptmr_ack_irq(); // IRQ acknowledge / clear pending alarm interrupt |
|
neorv32_uart0_putc('.'); // send tick symbol via UART |
neorv32_gpio_pin_toggle(0); // toggle output port bit 0 |
} |
/example/demo_gptmr/makefile
0,0 → 1,39
################################################################################################# |
# << NEORV32 - Application Makefile >> # |
# ********************************************************************************************* # |
# Make sure to add the RISC-V GCC compiler's bin folder to your PATH environment variable. # |
# ********************************************************************************************* # |
# BSD 3-Clause License # |
# # |
# Copyright (c) 2021, Stephan Nolting. All rights reserved. # |
# # |
# 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. # |
# ********************************************************************************************* # |
# The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting # |
################################################################################################# |
|
NEORV32_HOME ?= ../../.. |
|
include ../../common/common.mk |
/example/processor_check/main.c
201,6 → 201,9
// test intro |
PRINT_STANDARD("\nStarting tests.\n\n"); |
|
// sync (test) |
asm volatile ("fence.i"); |
|
// enable global interrupts |
neorv32_cpu_eint(); |
|
445,26 → 448,6
|
|
// ---------------------------------------------------------- |
// Test FENCE.I instruction (instruction buffer / i-cache clear & reload) |
// if Zifencei is not implemented FENCE.I should execute as NOP |
// ---------------------------------------------------------- |
neorv32_cpu_csr_write(CSR_MCAUSE, 0); |
PRINT_STANDARD("[%i] FENCE.I: ", cnt_test); |
|
cnt_test++; |
|
asm volatile ("fence.i"); |
|
// make sure there was no exception (and that the cpu did not crash...) |
if (neorv32_cpu_csr_read(CSR_MCAUSE) == 0) { |
test_ok(); |
} |
else { |
test_fail(); |
} |
|
|
// ---------------------------------------------------------- |
// Illegal CSR access (CSR not implemented) |
// ---------------------------------------------------------- |
neorv32_cpu_csr_write(CSR_MCAUSE, 0); |
1311,10 → 1294,45
} |
|
|
// ---------------------------------------------------------- |
// Fast interrupt channel 12 (GPTMR) |
// ---------------------------------------------------------- |
if (neorv32_slink_available()) { |
neorv32_cpu_csr_write(CSR_MCAUSE, 0); |
PRINT_STANDARD("[%i] FIRQ12 (GPTMR): ", cnt_test); |
|
cnt_test++; |
|
// enable GPTMR FIRQ |
neorv32_cpu_irq_enable(CSR_MIE_FIRQ12E); |
|
// configure timer IRQ for one-shot mode after 2*4 clock cycles |
neorv32_gptmr_setup(CLK_PRSC_2, 0, 4); |
|
// wait some time for the IRQ to arrive the CPU |
asm volatile("nop"); |
asm volatile("nop"); |
|
// disable GPTMR interrupt |
neorv32_cpu_irq_disable(CSR_MIE_FIRQ12E); |
|
// check if RX FIFO fires IRQ |
if (neorv32_cpu_csr_read(CSR_MCAUSE) == TRAP_CODE_FIRQ_12) { |
test_ok(); |
} |
else { |
test_fail(); |
} |
|
// disable GPTMR |
neorv32_gptmr_disable(); |
} |
|
|
//// ---------------------------------------------------------- |
//// Fast interrupt channel 12..15 (reserved) |
//// Fast interrupt channel 13..15 (reserved) |
//// ---------------------------------------------------------- |
//PRINT_STANDARD("[%i] FIRQ12..15: ", cnt_test); |
//PRINT_STANDARD("[%i] FIRQ13..15: ", cnt_test); |
//PRINT_STANDARD("skipped (n.a.)\n"); |
|
|
/lib/include/neorv32.h
571,7 → 571,14
#define SLINK_TX_RTE_ID RTE_TRAP_FIRQ_11 /**< RTE entry code (#NEORV32_RTE_TRAP_enum) */ |
#define SLINK_TX_TRAP_CODE TRAP_CODE_FIRQ_11 /**< MCAUSE CSR trap code (#NEORV32_EXCEPTION_CODES_enum) */ |
/**@}*/ |
/** @name General Purpose Timer (GPTMR) */ |
/**@{*/ |
#define GPTMR_FIRQ_ENABLE CSR_MIE_FIRQ12E /**< MIE CSR bit (#NEORV32_CSR_MIE_enum) */ |
#define GPTMR_FIRQ_PENDING CSR_MIP_FIRQ12P /**< MIP CSR bit (#NEORV32_CSR_MIP_enum) */ |
#define GPTMR_RTE_ID RTE_TRAP_FIRQ_12 /**< RTE entry code (#NEORV32_RTE_TRAP_enum) */ |
#define GPTMR_TRAP_CODE TRAP_CODE_FIRQ_12 /**< MCAUSE CSR trap code (#NEORV32_EXCEPTION_CODES_enum) */ |
/**@}*/ |
/**@}*/ |
|
|
/**********************************************************************//** |
802,6 → 809,33
|
|
/**********************************************************************//** |
* @name IO Device: General Purpose Timer (GPTMR) |
**************************************************************************/ |
/**@{*/ |
/** GPTMR module prototype */ |
typedef struct __attribute__((packed,aligned(4))) { |
uint32_t CTRL; /**< offset 0: control register (#NEORV32_GPTMR_CTRL_enum) */ |
uint32_t THRES; /**< offset 4: threshold register */ |
uint32_t COUNT; /**< offset 8: counter register */ |
const uint32_t reserved; /**< offset 12: reserved */ |
} neorv32_gptmr_t; |
|
/** GPTMR module hardware access (#neorv32_gptmr_t) */ |
#define NEORV32_GPTMR (*((volatile neorv32_gptmr_t*) (0xFFFFFF60UL))) |
|
/** GPTMR control/data register bits */ |
enum NEORV32_GPTMR_CTRL_enum { |
GPTMR_CTRL_EN = 0, /**< GPTIMR control register(0) (r/w): Timer unit enable */ |
GPTMR_CTRL_PRSC0 = 1, /**< GPTIMR control register(1) (r/w): Clock prescaler select bit 0 */ |
GPTMR_CTRL_PRSC1 = 2, /**< GPTIMR control register(2) (r/w): Clock prescaler select bit 1 */ |
GPTMR_CTRL_PRSC2 = 3, /**< GPTIMR control register(3) (r/w): Clock prescaler select bit 2 */ |
GPTMR_CTRL_MODE = 4, /**< GPTIMR control register(4) (r/w): Timer mode: 0=single-shot mode, 1=continuous mode */ |
GPTMR_CTRL_ALARM = 5 /**< GPTIMR control register(5) (r/c): Interrupt/alarm pending, cleared by setting bit to zero */ |
}; |
/**@}*/ |
|
|
/**********************************************************************//** |
* @name IO Device: Bus Monitor (BUSKEEPER) |
**************************************************************************/ |
/**@{*/ |
1196,7 → 1230,8
SYSINFO_SOC_IO_SLINK = 25, /**< SYSINFO_FEATURES (25) (r/-): Stream link interface implemented when 1 (via SLINK_NUM_RX & SLINK_NUM_TX generics) */ |
SYSINFO_SOC_IO_UART1 = 26, /**< SYSINFO_FEATURES (26) (r/-): Secondary universal asynchronous receiver/transmitter 1 implemented when 1 (via IO_UART1_EN generic) */ |
SYSINFO_SOC_IO_NEOLED = 27, /**< SYSINFO_FEATURES (27) (r/-): NeoPixel-compatible smart LED interface implemented when 1 (via IO_NEOLED_EN generic) */ |
SYSINFO_SOC_IO_XIRQ = 28 /**< SYSINFO_FEATURES (28) (r/-): External interrupt controller implemented when 1 (via XIRQ_NUM_IO generic) */ |
SYSINFO_SOC_IO_XIRQ = 28, /**< SYSINFO_FEATURES (28) (r/-): External interrupt controller implemented when 1 (via XIRQ_NUM_IO generic) */ |
SYSINFO_SOC_IO_GPTMR = 29 /**< SYSINFO_FEATURES (29) (r/-): General purpose timer implemented when 1 (via IO_GPTMR_EN generic) */ |
}; |
|
/** NEORV32_SYSINFO.CACHE (r/-): Cache configuration */ |
1242,6 → 1277,7
// io/peripheral devices |
#include "neorv32_cfs.h" |
#include "neorv32_gpio.h" |
#include "neorv32_gptmr.h" |
#include "neorv32_mtime.h" |
#include "neorv32_neoled.h" |
#include "neorv32_pwm.h" |
/lib/include/neorv32_gptmr.h
0,0 → 1,55
// ################################################################################################# |
// # << NEORV32: neorv32_gptmr.h - General Purpose Timer (GPTMR) HW Driver >> # |
// # ********************************************************************************************* # |
// # BSD 3-Clause License # |
// # # |
// # Copyright (c) 2021, Stephan Nolting. All rights reserved. # |
// # # |
// # 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. # |
// # ********************************************************************************************* # |
// # The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting # |
// ################################################################################################# |
|
|
/**********************************************************************//** |
* @file neorv32_gptmr.h |
* @author Stephan Nolting |
* @brief General purpose timer (GPTMR) HW driver header file. |
* |
* @note These functions should only be used if the GPTMR unit was synthesized (IO_GPTMR_EN = true). |
**************************************************************************/ |
|
#ifndef neorv32_gptmr_h |
#define neorv32_gptmr_h |
|
// prototypes |
int neorv32_gptmr_available(void); |
void neorv32_gptmr_setup(uint8_t prsc, uint8_t mode, uint32_t threshold); |
void neorv32_gptmr_disable(void); |
void neorv32_gptmr_enable(void); |
void neorv32_gptmr_restart(void); |
void neorv32_gptmr_ack_irq(void); |
|
#endif // neorv32_gptmr_h |
/lib/source/neorv32_gptmr.c
0,0 → 1,125
// ################################################################################################# |
// # << NEORV32: neorv32_gptmr.c - General Purpose Timer (GPTMR) HW Driver >> # |
// # ********************************************************************************************* # |
// # BSD 3-Clause License # |
// # # |
// # Copyright (c) 2021, Stephan Nolting. All rights reserved. # |
// # # |
// # 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. # |
// # ********************************************************************************************* # |
// # The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting # |
// ################################################################################################# |
|
|
/**********************************************************************//** |
* @file neorv32_spi.c |
* @author Stephan Nolting |
* @brief General purpose timer (GPTMR) HW driver source file. |
* |
* @note These functions should only be used if the GPTMR unit was synthesized (IO_GPTMR_EN = true). |
**************************************************************************/ |
|
#include "neorv32.h" |
#include "neorv32_gptmr.h" |
|
|
/**********************************************************************//** |
* Check if GPTMR unit was synthesized. |
* |
* @return 0 if GPTMR was not synthesized, 1 if GPTMR is available. |
**************************************************************************/ |
int neorv32_gptmr_available(void) { |
|
if (NEORV32_SYSINFO.SOC & (1 << SYSINFO_SOC_IO_GPTMR)) { |
return 1; |
} |
else { |
return 0; |
} |
} |
|
|
/**********************************************************************//** |
* Enable and configure GP timer. |
* |
* @param[in] prsc Clock prescaler select (0..7). See #NEORV32_CLOCK_PRSC_enum. |
* @param[in] mode 0=single-shot mode, 1=continuous mode |
* @param[in] threshold Threshold value to trigger interrupt. |
**************************************************************************/ |
void neorv32_gptmr_setup(uint8_t prsc, uint8_t mode, uint32_t threshold) { |
|
NEORV32_GPTMR.CTRL = 0; // reset control |
|
NEORV32_GPTMR.THRES = threshold; |
|
NEORV32_GPTMR.COUNT = 0; // reset counter |
|
uint32_t ct_enable = 1; |
ct_enable = ct_enable << GPTMR_CTRL_EN; |
|
uint32_t ct_prsc = (uint32_t)(prsc & 0x07); |
ct_prsc = ct_prsc << GPTMR_CTRL_PRSC0; |
|
uint32_t ct_mode = (uint32_t)(mode & 0x01); |
ct_mode = ct_mode << GPTMR_CTRL_MODE; |
|
NEORV32_GPTMR.CTRL = ct_enable | ct_prsc | ct_mode; |
} |
|
|
/**********************************************************************//** |
* Disable GP timer. |
**************************************************************************/ |
void neorv32_gptmr_disable(void) { |
|
NEORV32_GPTMR.CTRL &= ~((uint32_t)(1 << GPTMR_CTRL_EN)); |
} |
|
|
/**********************************************************************//** |
* Enable GP timer. |
**************************************************************************/ |
void neorv32_gptmr_enable(void) { |
|
NEORV32_GPTMR.CTRL |= ((uint32_t)(1 << GPTMR_CTRL_EN)); |
} |
|
|
/**********************************************************************//** |
* Reset GP timer's counter register. |
**************************************************************************/ |
void neorv32_gptmr_restart(void) { |
|
NEORV32_GPTMR.COUNT = 0; |
} |
|
|
/**********************************************************************//** |
* Acknowledge interrupt / clear pending alarm. |
**************************************************************************/ |
void neorv32_gptmr_ack_irq(void) { |
|
NEORV32_GPTMR.CTRL &= ~((uint32_t)(1 << GPTMR_CTRL_ALARM)); |
} |
/lib/source/neorv32_rte.c
476,6 → 476,7
__neorv32_rte_print_checkbox(tmp & (1 << SYSINFO_SOC_IO_SLINK)); neorv32_uart0_printf(" SLINK\n"); |
__neorv32_rte_print_checkbox(tmp & (1 << SYSINFO_SOC_IO_NEOLED)); neorv32_uart0_printf(" NEOLED\n"); |
__neorv32_rte_print_checkbox(tmp & (1 << SYSINFO_SOC_IO_XIRQ)); neorv32_uart0_printf(" XIRQ\n"); |
__neorv32_rte_print_checkbox(tmp & (1 << SYSINFO_SOC_IO_GPTMR)); neorv32_uart0_printf(" GPTMR\n"); |
} |
|
|