summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorJoey Castillo <jose.castillo@gmail.com>2021-10-25 16:04:10 -0400
committerJoey Castillo <jose.castillo@gmail.com>2021-10-25 16:06:08 -0400
commitf98bc9bb4ebdab19834a7dd1c8cd8984181d3d3e (patch)
treef158284fb3ecce9291b969b244a3d45f45951528 /apps
parent22c072ac3f4fb450315b204dc4a6f2644c8665a7 (diff)
downloadSensor-Watch-f98bc9bb4ebdab19834a7dd1c8cd8984181d3d3e.tar.gz
Sensor-Watch-f98bc9bb4ebdab19834a7dd1c8cd8984181d3d3e.tar.bz2
Sensor-Watch-f98bc9bb4ebdab19834a7dd1c8cd8984181d3d3e.zip
steps toward SPI support in watch library
Diffstat (limited to 'apps')
-rw-r--r--apps/Sensor Watch SPI Test/app.c71
-rwxr-xr-xapps/Sensor Watch SPI Test/make/.gitignore1
-rwxr-xr-xapps/Sensor Watch SPI Test/make/Makefile10
3 files changed, 82 insertions, 0 deletions
diff --git a/apps/Sensor Watch SPI Test/app.c b/apps/Sensor Watch SPI Test/app.c
new file mode 100644
index 00000000..3fba9386
--- /dev/null
+++ b/apps/Sensor Watch SPI Test/app.c
@@ -0,0 +1,71 @@
+#include <stdio.h>
+#include <string.h>
+#include <peripheral_clk_config.h>
+#include "watch.h"
+
+// NOTE: as of this writing (10/25/21) there is no SPI controller functionality in the watch library.
+// this is a very basic app to confirm that SPI is working, tested with board OSO-MISC-21-001 and a GD25Q16C Flash chip.
+// The updated SPI Flash sensor board design is OSO-MISC-21-017 (it's easier to build, 0603 passives instead of 0402's).
+
+struct io_descriptor *io;
+struct spi_m_sync_descriptor SPI_0;
+
+void app_init() {
+ // SPI_0_CLOCK_init
+ hri_gclk_write_PCHCTRL_reg(GCLK, SERCOM3_GCLK_ID_CORE, CONF_GCLK_SERCOM3_CORE_SRC | (1 << GCLK_PCHCTRL_CHEN_Pos));
+ hri_gclk_write_PCHCTRL_reg(GCLK, SERCOM3_GCLK_ID_SLOW, CONF_GCLK_SERCOM3_SLOW_SRC | (1 << GCLK_PCHCTRL_CHEN_Pos));
+ hri_mclk_set_APBCMASK_SERCOM3_bit(MCLK);
+
+ spi_m_sync_init(&SPI_0, SERCOM3);
+
+ // SPI_0_PORT_init
+ gpio_set_pin_level(A3, true);
+ gpio_set_pin_direction(A3, GPIO_DIRECTION_OUT);
+ gpio_set_pin_function(A3, GPIO_PIN_FUNCTION_OFF);
+
+ gpio_set_pin_level(A2, false);
+ gpio_set_pin_direction(A2, GPIO_DIRECTION_OUT);
+ gpio_set_pin_function(A2, PINMUX_PB02C_SERCOM3_PAD0);
+
+ gpio_set_pin_direction(A4, GPIO_DIRECTION_IN);
+ gpio_set_pin_pull_mode(A4, GPIO_PULL_OFF);
+ gpio_set_pin_function(A4, PINMUX_PB00C_SERCOM3_PAD2);
+
+ gpio_set_pin_level(A1, false);
+ gpio_set_pin_direction(A1, GPIO_DIRECTION_OUT);
+ gpio_set_pin_function(A1, PINMUX_PB01C_SERCOM3_PAD3);
+
+ spi_m_sync_get_io_descriptor(&SPI_0, &io);
+ spi_m_sync_enable(&SPI_0);
+}
+
+void app_wake_from_backup() {
+}
+
+void app_setup() {
+}
+
+void app_prepare_for_standby() {
+}
+
+void app_wake_from_standby() {
+}
+
+static uint8_t get_id_command[4] = {0x9F};
+
+bool app_loop() {
+ watch_set_pin_level(A3, false);
+ io_write(io, get_id_command, 1);
+ uint8_t buf[3] = {0};
+
+ // should print 0, 0, 0
+ printf("blank: %x, %x, %x\n", buf[0], buf[1], buf[2]);
+ io_read(io, buf, 3);
+ watch_set_pin_level(A3, true);
+ // should print c8, 40, 15
+ printf("ident: %x, %x, %x\n", buf[0], buf[1], buf[2]);
+
+ delay_ms(100);
+
+ return false;
+}
diff --git a/apps/Sensor Watch SPI Test/make/.gitignore b/apps/Sensor Watch SPI Test/make/.gitignore
new file mode 100755
index 00000000..3722ac63
--- /dev/null
+++ b/apps/Sensor Watch SPI Test/make/.gitignore
@@ -0,0 +1 @@
+build/
diff --git a/apps/Sensor Watch SPI Test/make/Makefile b/apps/Sensor Watch SPI Test/make/Makefile
new file mode 100755
index 00000000..c66ad20c
--- /dev/null
+++ b/apps/Sensor Watch SPI Test/make/Makefile
@@ -0,0 +1,10 @@
+TOP = ../../..
+include $(TOP)/make.mk
+
+INCLUDES += \
+ -I../
+
+SRCS += \
+ ../app.c
+
+include $(TOP)/rules.mk