hi i'm use nrf52dk
and segger embedded studio
also i'm mcu beginner
The value was obtained using a magnetic sensor.
now i want using the ble
Now we want to send the value to bluetooth using ble.
but example src is hard..
i don understand..
so..
Could you tell me the source from which to interpret the sample source or send the sensor value using ble?
thankyou
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include "nrf.h"
#include "nrf_drv_timer.h"
#include "bsp.h"
#include "app_error.h"
#include "app_uart.h"
#include "nrf_drv_timer.h"
#include "nrf_gpio.h"
#include "nrf_gpiote.h"
#include "nrf_delay.h"
#include "nrf_log.h"
#include "nrf_log_ctrl.h"
#include "nrf_log_default_backends.h"
#define FREQ_MEASURE_PIN 11
static void timer_init() {
NRF_TIMER1->TASKS_STOP = 1;
NRF_TIMER1->MODE = TIMER_MODE_MODE_Timer;
NRF_TIMER1->PRESCALER = 8; // Fhck / 2^8
NRF_TIMER1->CC[0] = 62500; // 62500 - 1s
NRF_TIMER1->BITMODE = (TIMER_BITMODE_BITMODE_16Bit << TIMER_BITMODE_BITMODE_Pos);
NRF_TIMER1->TASKS_CLEAR = 1;
NRF_TIMER1->INTENSET = (TIMER_INTENSET_COMPARE0_Enabled << TIMER_INTENSET_COMPARE0_Pos);
NRF_TIMER1->EVENTS_COMPARE[0] = 0;
}
static void counter_init() {
NRF_TIMER2->TASKS_STOP = 1;
NRF_TIMER2->MODE = TIMER_MODE_MODE_Counter;
NRF_TIMER2->BITMODE = (TIMER_BITMODE_BITMODE_24Bit << TIMER_BITMODE_BITMODE_Pos);
NRF_TIMER2->TASKS_CLEAR = 1;
NRF_TIMER2->EVENTS_COMPARE[0] = 0;
}
static void gpiote_init(uint32_t pin)
{
NRF_GPIOTE->CONFIG[0]
= 0x01 << 0; // MODE: Event
NRF_GPIOTE->CONFIG[0] |= pin << 8; // Pin number
NRF_GPIOTE->CONFIG[0] |= NRF_GPIOTE_POLARITY_LOTOHI << 16; // Event rising edge
}
static void ppi_timer_stop_counter_init() {
NRF_PPI->CHEN |= 1 << 0;
*(&(NRF_PPI->CH0_EEP)) = (uint32_t)&NRF_TIMER1->EVENTS_COMPARE[0];
*(&(NRF_PPI->CH0_TEP)) = (uint32_t)&NRF_TIMER2->TASKS_STOP;
NRF_PPI->CHENSET |= 1 << 0;
}
static void ppi_gpiote_counter_init() {
NRF_PPI->CHEN |= 1 << 1;
*(&(NRF_PPI->CH1_EEP)) = (uint32_t)&NRF_GPIOTE->EVENTS_IN[0];
*(&(NRF_PPI->CH1_TEP)) = (uint32_t)&NRF_TIMER2->TASKS_COUNT;
NRF_PPI->CHENSET |= 1 << 1;
}
int main(void)
{
APP_ERROR_CHECK(NRF_LOG_INIT(NULL));
NRF_LOG_DEFAULT_BACKENDS_INIT();
NVIC_EnableIRQ(TIMER1_IRQn);
NVIC_SetPriority(TIMER1_IRQn, APP_IRQ_PRIORITY_LOW);
nrf_gpio_cfg_input(FREQ_MEASURE_PIN, NRF_GPIO_PIN_NOPULL);
counter_init();
timer_init();
gpiote_init(FREQ_MEASURE_PIN);
ppi_gpiote_counter_init();
ppi_timer_stop_counter_init();
while(true){
NRF_TIMER1->TASKS_START = 1;
NRF_TIMER2->TASKS_START = 1;
nrf_delay_ms(1000);
NRF_LOG_FLUSH();
}
}
void TIMER1_IRQHandler(void)
{
if (NRF_TIMER1->EVENTS_COMPARE[0] != 0)
{
NRF_TIMER1->EVENTS_COMPARE[0] = 0;
NRF_TIMER2->TASKS_CAPTURE[0] = 1;
NRF_LOG_INFO("cc: %dHz", NRF_TIMER2->CC[0]);
NRF_TIMER1->TASKS_CLEAR = 1;
NRF_TIMER2->TASKS_CLEAR = 1;
NRF_TIMER2->TASKS_START = 1;
}
}