Hi,
I init the bsp for button, but there is no callback in handler when press on button.
The board is NRF52810, and there are so many problems when I test this borad.
It's software is really bad.
These are my code.
#include <string.h> #include "hal_nfc7963.h" #include "hal_spi.h" #include "nordic_common.h" #include "hal_user.h" #include "boards.h" #include "bsp.h" #include "nrf_log.h" #include "nrf_log_ctrl.h" #include "hal_nfc_task.h" #include "hal_uart.h" #include "math.h" #include "app_timer.h" #include "app_scheduler.h" #define SCHED_MAX_EVENT_DATA_SIZE APP_TIMER_SCHED_EVENT_DATA_SIZE /**< Maximum size of scheduler events. */ #ifdef SVCALL_AS_NORMAL_FUNCTION #define SCHED_QUEUE_SIZE 20 /**< Maximum number of events in the scheduler queue. More is needed in case of Serialization. */ #else #define SCHED_QUEUE_SIZE 10 /**< Maximum number of events in the scheduler queue. */ #endif uint8_t eve_data = 0; static void idle_state_handle(void); static void scheduler_init(void); static void bsp_evt_handler(bsp_event_t evt); static void app_sched_event_handle(void * p_event_data, uint16_t event_size); static void app_sched_event_handle(void * p_event_data, uint16_t event_size) { bsp_board_led_invert(BSP_BOARD_LED_0); // hal_beep_enable(); // HAL_NFC_SPI_Read(0x00,1); } static void bsp_evt_handler(bsp_event_t evt) { switch(evt) { case BSP_BOARD_BUTTON_0: app_sched_event_put(&eve_data,sizeof(eve_data),app_sched_event_handle); break; default: break; } } void bsp_configuration() { uint32_t err_code; err_code = bsp_init(BSP_INIT_BUTTONS | BSP_INIT_LEDS, bsp_evt_handler); APP_ERROR_CHECK(err_code); } static void scheduler_init(void) { APP_SCHED_INIT(SCHED_MAX_EVENT_DATA_SIZE, SCHED_QUEUE_SIZE); } static void idle_state_handle(void) { app_sched_execute(); // if (NRF_LOG_PROCESS() == false) // { // nrf_pwr_mgmt_run(); // } } int main(void) { hal_user_init(); // hal_uart_init(); bsp_configuration(); // hal_spi_init(); // hal_nfc_init(); // hal_nfc_enable(); scheduler_init(); for (;;) { idle_state_handle(); } }
#include <stdbool.h> #include "boards.h" #include "app_error.h" #include "app_timer.h" #include "hal_user.h" #include "app_button.h" #include "bsp.h" #include "nrf_drv_clock.h" #include "sdk_errors.h" #include "app_error.h" #include "nrf_log.h" #include "nrf_log_ctrl.h" #include "nrf_log_default_backends.h" #include "nrf_drv_systick.h" #include "nrf_drv_pwm.h" #include "app_util_platform.h" #include "nrf_gpiote.h" #include "nrf_gpio.h" #include "nrf_drv_gpiote.h" static nrf_drv_pwm_t pwm0 = NRF_DRV_PWM_INSTANCE(0); static uint16_t const pwm0_top = 150; static uint16_t const pwm0_step = 200; static nrf_pwm_values_common_t /*const*/ seq_values[] = { 0, 0x8000, 0, 0x8000, }; static nrf_pwm_sequence_t const pwm0_seq = { .values.p_common = seq_values, .length = NRF_PWM_VALUES_LENGTH(seq_values), .repeats = 0, .end_delay = 0 }; static void pwm_init(void); static void pwm0_handler(nrf_drv_pwm_evt_type_t event_type); static void clock_init(void); static void timer_init(void); static void system_clock_init(void); static void log_init(void); static void clock_init(void); static void drv_clock_init(); static void leds_init(void) { bsp_board_init(BSP_INIT_LEDS); } static void pwm0_handler(nrf_drv_pwm_evt_type_t event_type) { if(event_type == NRFX_PWM_EVT_FINISHED || event_type == NRFX_PWM_EVT_STOPPED) { hal_beep_disable(); } } static void pwm_init() { // nrf_drv_gpiote_out_config_t pwm_pin_config = GPIOTE_CONFIG_OUT_SIMPLE(true); // APP_ERROR_CHECK(nrf_drv_gpiote_out_init(BEEP, &pwm_pin_config)); nrf_drv_pwm_config_t const config0 = { .output_pins = { BEEP | NRF_DRV_PWM_PIN_INVERTED, // channel 0 NRF_DRV_PWM_PIN_NOT_USED, NRF_DRV_PWM_PIN_NOT_USED, NRF_DRV_PWM_PIN_NOT_USED, }, .irq_priority = APP_IRQ_PRIORITY_LOWEST, .base_clock = NRF_PWM_CLK_1MHz, .count_mode = NRF_PWM_MODE_UP, .top_value = pwm0_top, .load_mode = NRF_PWM_LOAD_COMMON, .step_mode = NRF_PWM_STEP_AUTO }; APP_ERROR_CHECK(nrf_drv_pwm_init(&pwm0, &config0, pwm0_handler)); } void timer_init() { uint32_t err_code; err_code = app_timer_init(); APP_ERROR_CHECK(err_code); } static void clock_init() { NRF_CLOCK->LFCLKSRC = (CLOCK_LFCLKSRC_SRC_Xtal << CLOCK_LFCLKSRC_SRC_Pos); NRF_CLOCK->EVENTS_LFCLKSTARTED = 0; NRF_CLOCK->TASKS_LFCLKSTART = 1; while (NRF_CLOCK->EVENTS_LFCLKSTARTED == 0) { // Do nothing. } } static void drv_clock_init() { ret_code_t err_code; err_code = nrf_drv_clock_init(); APP_ERROR_CHECK(err_code); nrf_drv_clock_lfclk_request(NULL); } static void system_clock_init() { nrf_drv_systick_init(); } static void log_init() { APP_ERROR_CHECK(NRF_LOG_INIT(NULL)); NRF_LOG_DEFAULT_BACKENDS_INIT(); } void hal_user_init() { // hal_user_log_init(); drv_clock_init(); clock_init(); system_clock_init(); timer_init(); } void hal_beep_enable() { pwm_init(); (void)nrf_drv_pwm_simple_playback(&pwm0, &pwm0_seq, 1000, NRFX_PWM_FLAG_STOP); } void hal_beep_disable() { nrfx_pwm_stop(&pwm0,false); nrfx_pwm_uninit(&pwm0); nrfx_gpiote_out_toggle(BEEP); }
//========================================================== // <q> BUTTON_ENABLED - Enables Button module #ifndef BUTTON_ENABLED #define BUTTON_ENABLED 1 #endif // <q> BUTTON_HIGH_ACCURACY_ENABLED - Enables GPIOTE high accuracy for buttons #ifndef BUTTON_HIGH_ACCURACY_ENABLED #define BUTTON_HIGH_ACCURACY_ENABLED 0 #endif // <e> APP_TIMER_ENABLED - app_timer - Application timer functionality //========================================================== #ifndef APP_TIMER_ENABLED #define APP_TIMER_ENABLED 1 #endif // <o> APP_TIMER_CONFIG_RTC_FREQUENCY - Configure RTC prescaler. // <0=> 32768 Hz // <1=> 16384 Hz // <3=> 8192 Hz // <7=> 4096 Hz // <15=> 2048 Hz // <31=> 1024 Hz #ifndef APP_TIMER_CONFIG_RTC_FREQUENCY #define APP_TIMER_CONFIG_RTC_FREQUENCY 0 #endif // <o> APP_TIMER_CONFIG_IRQ_PRIORITY - Interrupt priority // <i> Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice // <0=> 0 (highest) // <1=> 1 // <2=> 2 // <3=> 3 // <4=> 4 // <5=> 5 // <6=> 6 // <7=> 7 #ifndef APP_TIMER_CONFIG_IRQ_PRIORITY #define APP_TIMER_CONFIG_IRQ_PRIORITY 7 #endif // <o> APP_TIMER_CONFIG_OP_QUEUE_SIZE - Capacity of timer requests queue. // <i> Size of the queue depends on how many timers are used // <i> in the system, how often timers are started and overall // <i> system latency. If queue size is too small app_timer calls // <i> will fail. #ifndef APP_TIMER_CONFIG_OP_QUEUE_SIZE #define APP_TIMER_CONFIG_OP_QUEUE_SIZE 10 #endif // <q> APP_TIMER_CONFIG_USE_SCHEDULER - Enable scheduling app_timer events to app_scheduler #ifndef APP_TIMER_CONFIG_USE_SCHEDULER #define APP_TIMER_CONFIG_USE_SCHEDULER 0 #endif // <q> APP_TIMER_KEEPS_RTC_ACTIVE - Enable RTC always on // <i> If option is enabled RTC is kept running even if there is no active timers. // <i> This option can be used when app_timer is used for timestamping. #ifndef APP_TIMER_KEEPS_RTC_ACTIVE #define APP_TIMER_KEEPS_RTC_ACTIVE 0 #endif // <h> App Timer Legacy configuration - Legacy configuration. //========================================================== // <q> APP_TIMER_WITH_PROFILER - Enable app_timer profiling #ifndef APP_TIMER_WITH_PROFILER #define APP_TIMER_WITH_PROFILER 0 #endif // <q> APP_TIMER_CONFIG_SWI_NUMBER - Configure SWI instance used. #ifndef APP_TIMER_CONFIG_SWI_NUMBER #define APP_TIMER_CONFIG_SWI_NUMBER 0 #endif // </h> // <e> RTC_ENABLED - nrf_drv_rtc - RTC peripheral driver - legacy layer //========================================================== #ifndef RTC_ENABLED #define RTC_ENABLED 0 #endif // <o> RTC_DEFAULT_CONFIG_FREQUENCY - Frequency <16-32768> #ifndef RTC_DEFAULT_CONFIG_FREQUENCY #define RTC_DEFAULT_CONFIG_FREQUENCY 32768 #endif // <q> RTC_DEFAULT_CONFIG_RELIABLE - Ensures safe compare event triggering #ifndef RTC_DEFAULT_CONFIG_RELIABLE #define RTC_DEFAULT_CONFIG_RELIABLE 0 #endif // <o> RTC_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority // <i> Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice // <0=> 0 (highest) // <1=> 1 // <2=> 2 // <3=> 3 // <4=> 4 // <5=> 5 // <6=> 6 // <7=> 7 #ifndef RTC_DEFAULT_CONFIG_IRQ_PRIORITY #define RTC_DEFAULT_CONFIG_IRQ_PRIORITY 7 #endif // <q> RTC0_ENABLED - Enable RTC0 instance #ifndef RTC0_ENABLED #define RTC0_ENABLED 1 #endif // <q> RTC1_ENABLED - Enable RTC1 instance #ifndef RTC1_ENABLED #define RTC1_ENABLED 1 #endif // <q> RTC2_ENABLED - Enable RTC2 instance #ifndef RTC2_ENABLED #define RTC2_ENABLED 1 #endif // </e> // <e> NRFX_RTC_ENABLED - nrfx_rtc - RTC peripheral driver //========================================================== #ifndef NRFX_RTC_ENABLED #define NRFX_RTC_ENABLED 0 #endif // <q> NRFX_RTC0_ENABLED - Enable RTC0 instance #ifndef NRFX_RTC0_ENABLED #define NRFX_RTC0_ENABLED 1 #endif // <q> NRFX_RTC1_ENABLED - Enable RTC1 instance #ifndef NRFX_RTC1_ENABLED #define NRFX_RTC1_ENABLED 1 #endif // <o> NRFX_RTC_MAXIMUM_LATENCY_US - Maximum possible time[us] in highest priority interrupt #ifndef NRFX_RTC_MAXIMUM_LATENCY_US #define NRFX_RTC_MAXIMUM_LATENCY_US 2000 #endif // <o> NRFX_RTC_DEFAULT_CONFIG_FREQUENCY - Frequency <16-32768> #ifndef NRFX_RTC_DEFAULT_CONFIG_FREQUENCY #define NRFX_RTC_DEFAULT_CONFIG_FREQUENCY 32768 #endif // <q> NRFX_RTC_DEFAULT_CONFIG_RELIABLE - Ensures safe compare event triggering #ifndef NRFX_RTC_DEFAULT_CONFIG_RELIABLE #define NRFX_RTC_DEFAULT_CONFIG_RELIABLE 0 #endif // <o> NRFX_RTC_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority // <0=> 0 (highest) // <1=> 1 // <2=> 2 // <3=> 3 // <4=> 4 // <5=> 5 // <6=> 6 // <7=> 7 #ifndef NRFX_RTC_DEFAULT_CONFIG_IRQ_PRIORITY #define NRFX_RTC_DEFAULT_CONFIG_IRQ_PRIORITY 7 #endif // <e> NRFX_RTC_CONFIG_LOG_ENABLED - Enables logging in the module. //========================================================== #ifndef NRFX_RTC_CONFIG_LOG_ENABLED #define NRFX_RTC_CONFIG_LOG_ENABLED 0 #endif // <o> NRFX_RTC_CONFIG_LOG_LEVEL - Default Severity level // <0=> Off // <1=> Error // <2=> Warning // <3=> Info // <4=> Debug #ifndef NRFX_RTC_CONFIG_LOG_LEVEL #define NRFX_RTC_CONFIG_LOG_LEVEL 3 #endif // <o> NRFX_RTC_CONFIG_INFO_COLOR - ANSI escape code prefix. // <0=> Default // <1=> Black // <2=> Red // <3=> Green // <4=> Yellow // <5=> Blue // <6=> Magenta // <7=> Cyan // <8=> White #ifndef NRFX_RTC_CONFIG_INFO_COLOR #define NRFX_RTC_CONFIG_INFO_COLOR 0 #endif // <o> NRFX_RTC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. // <0=> Default // <1=> Black // <2=> Red // <3=> Green // <4=> Yellow // <5=> Blue // <6=> Magenta // <7=> Cyan // <8=> White #ifndef NRFX_RTC_CONFIG_DEBUG_COLOR #define NRFX_RTC_CONFIG_DEBUG_COLOR 0 #endif // </e> //==========================================================
//these are my symbol. BOARD_CUSTOM CONFIG_GPIO_AS_PINRESET DEVELOP_IN_NRF52832 FLOAT_ABI_SOFT NRF52810_XXAA NRF52_PAN_74 __HEAP_SIZE=2048 __STACK_SIZE=2048 USE_APP_CONFIG SWI_DISABLE0
Thanks.
Best Regards.