|
@@ -10,20 +10,20 @@
|
|
|
|
|
|
void LED_Init(void)
|
|
void LED_Init(void)
|
|
{
|
|
{
|
|
- struct port_config config_port_pin;
|
|
|
|
|
|
+ struct port_config config_port_pin;
|
|
|
|
|
|
- port_get_config_defaults(&config_port_pin);
|
|
|
|
- config_port_pin.direction = PORT_PIN_DIR_INPUT;
|
|
|
|
- config_port_pin.input_pull = PORT_PIN_PULL_UP;
|
|
|
|
- port_pin_set_config(PIN_PA15, &config_port_pin);
|
|
|
|
|
|
+ port_get_config_defaults(&config_port_pin);
|
|
|
|
+ config_port_pin.direction = PORT_PIN_DIR_INPUT;
|
|
|
|
+ config_port_pin.input_pull = PORT_PIN_PULL_UP;
|
|
|
|
+ port_pin_set_config(PIN_PA15, &config_port_pin);
|
|
|
|
|
|
- config_port_pin.direction = PORT_PIN_DIR_OUTPUT;
|
|
|
|
- port_pin_set_config(PIN_PB30, &config_port_pin);
|
|
|
|
|
|
+ config_port_pin.direction = PORT_PIN_DIR_OUTPUT;
|
|
|
|
+ port_pin_set_config(PIN_PB30, &config_port_pin);
|
|
}
|
|
}
|
|
|
|
|
|
void LED_ON(void)
|
|
void LED_ON(void)
|
|
{
|
|
{
|
|
- port_pin_set_output_level(PIN_PB30, false);
|
|
|
|
|
|
+ port_pin_set_output_level(PIN_PB30, false);
|
|
}
|
|
}
|
|
|
|
|
|
void LED_OFF(void)
|
|
void LED_OFF(void)
|
|
@@ -36,106 +36,109 @@ void extint_detection_callback(void);
|
|
void configure_extint_channel(void)
|
|
void configure_extint_channel(void)
|
|
{
|
|
{
|
|
//! [setup_1]
|
|
//! [setup_1]
|
|
- struct extint_chan_conf config_extint_chan;
|
|
|
|
|
|
+ struct extint_chan_conf config_extint_chan;
|
|
//! [setup_1]
|
|
//! [setup_1]
|
|
//! [setup_2]
|
|
//! [setup_2]
|
|
- extint_chan_get_config_defaults(&config_extint_chan);
|
|
|
|
|
|
+ extint_chan_get_config_defaults(&config_extint_chan);
|
|
//! [setup_2]
|
|
//! [setup_2]
|
|
|
|
|
|
//! [setup_3]
|
|
//! [setup_3]
|
|
- config_extint_chan.gpio_pin = PIN_PA15A_EIC_EXTINT15;
|
|
|
|
- config_extint_chan.gpio_pin_mux = MUX_PA15A_EIC_EXTINT15;
|
|
|
|
- config_extint_chan.gpio_pin_pull = EXTINT_PULL_UP;
|
|
|
|
- config_extint_chan.detection_criteria = EXTINT_DETECT_BOTH;
|
|
|
|
|
|
+ config_extint_chan.gpio_pin = PIN_PA15A_EIC_EXTINT15;
|
|
|
|
+ config_extint_chan.gpio_pin_mux = MUX_PA15A_EIC_EXTINT15;
|
|
|
|
+ config_extint_chan.gpio_pin_pull = EXTINT_PULL_UP;
|
|
|
|
+ config_extint_chan.detection_criteria = EXTINT_DETECT_BOTH;
|
|
//! [setup_3]
|
|
//! [setup_3]
|
|
//! [setup_4]
|
|
//! [setup_4]
|
|
- extint_chan_set_config(15, &config_extint_chan);
|
|
|
|
|
|
+ extint_chan_set_config(15, &config_extint_chan);
|
|
//! [setup_4]
|
|
//! [setup_4]
|
|
}
|
|
}
|
|
|
|
|
|
void configure_extint_callbacks(void)
|
|
void configure_extint_callbacks(void)
|
|
{
|
|
{
|
|
//! [setup_5]
|
|
//! [setup_5]
|
|
- extint_register_callback(extint_detection_callback, 15, EXTINT_CALLBACK_TYPE_DETECT);
|
|
|
|
|
|
+ extint_register_callback(extint_detection_callback, 15, EXTINT_CALLBACK_TYPE_DETECT);
|
|
//! [setup_5]
|
|
//! [setup_5]
|
|
//! [setup_6]
|
|
//! [setup_6]
|
|
- extint_chan_enable_callback(15, EXTINT_CALLBACK_TYPE_DETECT);
|
|
|
|
|
|
+ extint_chan_enable_callback(15, EXTINT_CALLBACK_TYPE_DETECT);
|
|
//! [setup_6]
|
|
//! [setup_6]
|
|
}
|
|
}
|
|
|
|
|
|
//! [setup_7]
|
|
//! [setup_7]
|
|
void extint_detection_callback(void)
|
|
void extint_detection_callback(void)
|
|
{
|
|
{
|
|
- bool pin_state = port_pin_get_input_level(PIN_PA15);
|
|
|
|
- port_pin_set_output_level(PIN_PB30, pin_state);
|
|
|
|
|
|
+ bool pin_state = port_pin_get_input_level(PIN_PA15);
|
|
|
|
+ port_pin_set_output_level(PIN_PB30, pin_state);
|
|
}
|
|
}
|
|
|
|
|
|
static struct rt_semaphore _rx_sem;
|
|
static struct rt_semaphore _rx_sem;
|
|
|
|
|
|
static rt_err_t _rx_ind(rt_device_t dev, rt_size_t size)
|
|
static rt_err_t _rx_ind(rt_device_t dev, rt_size_t size)
|
|
{
|
|
{
|
|
- return rt_sem_release(&_rx_sem);
|
|
|
|
|
|
+ return rt_sem_release(&_rx_sem);
|
|
}
|
|
}
|
|
|
|
|
|
void rt_init_thread_entry(void* parameter)
|
|
void rt_init_thread_entry(void* parameter)
|
|
{
|
|
{
|
|
- rt_thread_t thread;
|
|
|
|
- rt_device_t dev;
|
|
|
|
|
|
+ rt_thread_t thread;
|
|
|
|
+ rt_device_t dev;
|
|
|
|
|
|
- rt_kprintf("SYSTEM running at %uhz\n", SystemCoreClock);
|
|
|
|
|
|
+ rt_kprintf("SYSTEM running at %uhz\n", SystemCoreClock);
|
|
|
|
+ LED_Init();
|
|
|
|
+ configure_extint_channel();
|
|
|
|
+ configure_extint_callbacks();
|
|
|
|
|
|
- sleep_timer_init();
|
|
|
|
|
|
+#if defined(TEST_UART_RX)
|
|
|
|
+
|
|
|
|
+ sleep_timer_init();
|
|
// sleep_timer_start(1500);
|
|
// sleep_timer_start(1500);
|
|
|
|
|
|
- LED_Init();
|
|
|
|
- configure_extint_channel();
|
|
|
|
- configure_extint_callbacks();
|
|
|
|
-
|
|
|
|
- while (1)
|
|
|
|
- {
|
|
|
|
- rt_kprintf("init thread running tick:%u\n", rt_tick_get());
|
|
|
|
- rt_thread_delay(2*RT_TICK_PER_SECOND);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-#if 0
|
|
|
|
- dev = rt_device_find("uart3");
|
|
|
|
- if (dev != RT_NULL)
|
|
|
|
- {
|
|
|
|
- rt_sem_init(&_rx_sem, "rxsem", 0, RT_IPC_FLAG_FIFO);
|
|
|
|
- rt_device_set_rx_indicate(dev, _rx_ind);
|
|
|
|
- rt_device_open(dev, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX);
|
|
|
|
- }
|
|
|
|
|
|
+ while (1)
|
|
|
|
+ {
|
|
|
|
+ rt_kprintf("init thread running tick:%u\n", rt_tick_get());
|
|
|
|
+ rt_thread_delay(2*RT_TICK_PER_SECOND);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+#else
|
|
|
|
+
|
|
|
|
+ dev = rt_device_find("uart3");
|
|
|
|
+ if (dev != RT_NULL)
|
|
|
|
+ {
|
|
|
|
+ rt_sem_init(&_rx_sem, "rxsem", 0, RT_IPC_FLAG_FIFO);
|
|
|
|
+ rt_device_set_rx_indicate(dev, _rx_ind);
|
|
|
|
+ rt_device_open(dev, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX);
|
|
|
|
+ }
|
|
|
|
|
|
while (1)
|
|
while (1)
|
|
{
|
|
{
|
|
- rt_size_t r_size;
|
|
|
|
- rt_uint8_t r_buf[1];
|
|
|
|
- // rt_kprintf("SAMD2xJ18A hello thread\n");
|
|
|
|
- // rt_thread_delay(RT_TICK_PER_SECOND);
|
|
|
|
- rt_sem_take(&_rx_sem, RT_WAITING_FOREVER);
|
|
|
|
- while ((r_size = rt_device_read(dev, 0, r_buf, 1)) > 0)
|
|
|
|
- {
|
|
|
|
- rt_device_write(dev, 0, r_buf, r_size);
|
|
|
|
- if (r_buf[0] == '\r')
|
|
|
|
- {
|
|
|
|
- r_buf[0] = '\n';
|
|
|
|
- rt_device_write(dev, 0, r_buf, r_size);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ rt_size_t r_size;
|
|
|
|
+ rt_uint8_t r_buf[1];
|
|
|
|
+
|
|
|
|
+ rt_sem_take(&_rx_sem, RT_WAITING_FOREVER);
|
|
|
|
+ while ((r_size = rt_device_read(dev, 0, r_buf, 1)) > 0)
|
|
|
|
+ {
|
|
|
|
+ rt_device_write(dev, 0, r_buf, r_size);
|
|
|
|
+ if (r_buf[0] == '\r')
|
|
|
|
+ {
|
|
|
|
+ r_buf[0] = '\n';
|
|
|
|
+ rt_device_write(dev, 0, r_buf, r_size);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
#endif
|
|
#endif
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
int rt_application_init(void)
|
|
int rt_application_init(void)
|
|
{
|
|
{
|
|
- rt_thread_t tid;
|
|
|
|
|
|
+ rt_thread_t tid;
|
|
|
|
|
|
- tid = rt_thread_create("init", rt_init_thread_entry, RT_NULL,
|
|
|
|
|
|
+ tid = rt_thread_create("init", rt_init_thread_entry, RT_NULL,
|
|
512, RT_THREAD_PRIORITY_MAX / 3, 20);
|
|
512, RT_THREAD_PRIORITY_MAX / 3, 20);
|
|
|
|
|
|
- if (tid != RT_NULL)
|
|
|
|
- rt_thread_startup(tid);
|
|
|
|
|
|
+ if (tid != RT_NULL)
|
|
|
|
+ rt_thread_startup(tid);
|
|
|
|
|
|
- return 0;
|
|
|
|
|
|
+ return 0;
|
|
}
|
|
}
|
|
|
|
|