From 6d0a26bd9d9dd68323e7c0c3d1d54be951b4d43a Mon Sep 17 00:00:00 2001
From: SEEKFREE_BUDING <2289331269@qq.com>
Date: Fri, 7 Feb 2025 16:06:42 +0800
Subject: [PATCH] =?UTF-8?q?V3.3.2=20=20=20=20=20=20=20=20=20=E6=96=B0?=
=?UTF-8?q?=E5=A2=9Ezf=5Fdevice=5Fmenc15a=E7=A3=81=E7=BC=96=E7=A0=81?=
=?UTF-8?q?=E5=99=A8=E5=A4=96=E8=AE=BE=E9=A9=B1=E5=8A=A8=20=20=20=20=20=20?=
=?UTF-8?q?=20=20=20=E6=9B=B4=E6=94=B9uart=E6=8E=A5=E6=94=B6=E6=9C=BA?=
=?UTF-8?q?=E9=83=A8=E5=88=86=E8=AF=AD=E5=8F=A5=20=20=20=20=20=20=20=20=20?=
=?UTF-8?q?=E4=BF=AE=E6=AD=A3SPI=E7=9A=8416=E4=BD=8D=E9=80=9A=E8=AE=AF?=
=?UTF-8?q?=E9=94=99=E4=BD=8D=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../E01_gpio_demo/libraries/doc/version.txt | 4 +
.../libraries/zf_common/zf_common_headfile.h | 1 +
.../seekfree_assistant_interface.c | 2 +
.../libraries/zf_device/zf_device_menc15a.c | 188 ++++++++++++++++++
.../libraries/zf_device/zf_device_menc15a.h | 102 ++++++++++
.../zf_device/zf_device_uart_receiver.c | 2 +-
.../zf_device/zf_device_uart_receiver.h | 3 +-
.../libraries/zf_device/外设文件说明.txt | 2 +
.../libraries/zf_driver/zf_driver_spi.c | 8 +-
.../E02_uart_demo/libraries/doc/version.txt | 4 +
.../libraries/zf_common/zf_common_headfile.h | 1 +
.../seekfree_assistant_interface.c | 2 +
.../libraries/zf_device/zf_device_menc15a.c | 188 ++++++++++++++++++
.../libraries/zf_device/zf_device_menc15a.h | 102 ++++++++++
.../zf_device/zf_device_uart_receiver.c | 2 +-
.../zf_device/zf_device_uart_receiver.h | 3 +-
.../libraries/zf_device/外设文件说明.txt | 2 +
.../libraries/zf_driver/zf_driver_spi.c | 8 +-
.../E03_adc_demo/libraries/doc/version.txt | 4 +
.../libraries/zf_common/zf_common_headfile.h | 1 +
.../seekfree_assistant_interface.c | 2 +
.../libraries/zf_device/zf_device_menc15a.c | 188 ++++++++++++++++++
.../libraries/zf_device/zf_device_menc15a.h | 102 ++++++++++
.../zf_device/zf_device_uart_receiver.c | 2 +-
.../zf_device/zf_device_uart_receiver.h | 3 +-
.../libraries/zf_device/外设文件说明.txt | 2 +
.../libraries/zf_driver/zf_driver_spi.c | 8 +-
.../E04_pwm_demo/libraries/doc/version.txt | 4 +
.../libraries/zf_common/zf_common_headfile.h | 1 +
.../seekfree_assistant_interface.c | 2 +
.../libraries/zf_device/zf_device_menc15a.c | 188 ++++++++++++++++++
.../libraries/zf_device/zf_device_menc15a.h | 102 ++++++++++
.../zf_device/zf_device_uart_receiver.c | 2 +-
.../zf_device/zf_device_uart_receiver.h | 3 +-
.../libraries/zf_device/外设文件说明.txt | 2 +
.../libraries/zf_driver/zf_driver_spi.c | 8 +-
.../E05_pit_demo/libraries/doc/version.txt | 4 +
.../libraries/zf_common/zf_common_headfile.h | 1 +
.../seekfree_assistant_interface.c | 2 +
.../libraries/zf_device/zf_device_menc15a.c | 188 ++++++++++++++++++
.../libraries/zf_device/zf_device_menc15a.h | 102 ++++++++++
.../zf_device/zf_device_uart_receiver.c | 2 +-
.../zf_device/zf_device_uart_receiver.h | 3 +-
.../libraries/zf_device/外设文件说明.txt | 2 +
.../libraries/zf_driver/zf_driver_spi.c | 8 +-
.../E06_exit_demo/libraries/doc/version.txt | 4 +
.../libraries/zf_common/zf_common_headfile.h | 1 +
.../seekfree_assistant_interface.c | 2 +
.../libraries/zf_device/zf_device_menc15a.c | 188 ++++++++++++++++++
.../libraries/zf_device/zf_device_menc15a.h | 102 ++++++++++
.../zf_device/zf_device_uart_receiver.c | 2 +-
.../zf_device/zf_device_uart_receiver.h | 3 +-
.../libraries/zf_device/外设文件说明.txt | 2 +
.../libraries/zf_driver/zf_driver_spi.c | 8 +-
.../libraries/doc/version.txt | 4 +
.../libraries/zf_common/zf_common_headfile.h | 1 +
.../seekfree_assistant_interface.c | 2 +
.../libraries/zf_device/zf_device_menc15a.c | 188 ++++++++++++++++++
.../libraries/zf_device/zf_device_menc15a.h | 102 ++++++++++
.../zf_device/zf_device_uart_receiver.c | 2 +-
.../zf_device/zf_device_uart_receiver.h | 3 +-
.../libraries/zf_device/外设文件说明.txt | 2 +
.../libraries/zf_driver/zf_driver_spi.c | 8 +-
.../E08_eeprom_demo/libraries/doc/version.txt | 4 +
.../libraries/zf_common/zf_common_headfile.h | 1 +
.../seekfree_assistant_interface.c | 2 +
.../libraries/zf_device/zf_device_menc15a.c | 188 ++++++++++++++++++
.../libraries/zf_device/zf_device_menc15a.h | 102 ++++++++++
.../zf_device/zf_device_uart_receiver.c | 2 +-
.../zf_device/zf_device_uart_receiver.h | 3 +-
.../libraries/zf_device/外设文件说明.txt | 2 +
.../libraries/zf_driver/zf_driver_spi.c | 8 +-
.../E09_timer_demo/libraries/doc/version.txt | 4 +
.../libraries/zf_common/zf_common_headfile.h | 1 +
.../seekfree_assistant_interface.c | 2 +
.../libraries/zf_device/zf_device_menc15a.c | 188 ++++++++++++++++++
.../libraries/zf_device/zf_device_menc15a.h | 102 ++++++++++
.../zf_device/zf_device_uart_receiver.c | 2 +-
.../zf_device/zf_device_uart_receiver.h | 3 +-
.../libraries/zf_device/外设文件说明.txt | 2 +
.../libraries/zf_driver/zf_driver_spi.c | 8 +-
.../libraries/doc/version.txt | 4 +
.../libraries/zf_common/zf_common_headfile.h | 1 +
.../seekfree_assistant_interface.c | 2 +
.../libraries/zf_device/zf_device_menc15a.c | 188 ++++++++++++++++++
.../libraries/zf_device/zf_device_menc15a.h | 102 ++++++++++
.../zf_device/zf_device_uart_receiver.c | 2 +-
.../zf_device/zf_device_uart_receiver.h | 3 +-
.../libraries/zf_device/外设文件说明.txt | 2 +
.../libraries/zf_driver/zf_driver_spi.c | 8 +-
.../libraries/doc/version.txt | 4 +
.../libraries/zf_common/zf_common_headfile.h | 1 +
.../seekfree_assistant_interface.c | 2 +
.../libraries/zf_device/zf_device_menc15a.c | 188 ++++++++++++++++++
.../libraries/zf_device/zf_device_menc15a.h | 102 ++++++++++
.../zf_device/zf_device_uart_receiver.c | 2 +-
.../zf_device/zf_device_uart_receiver.h | 3 +-
.../libraries/zf_device/外设文件说明.txt | 2 +
.../libraries/zf_driver/zf_driver_spi.c | 8 +-
.../libraries/doc/version.txt | 4 +
.../libraries/zf_common/zf_common_headfile.h | 1 +
.../seekfree_assistant_interface.c | 2 +
.../libraries/zf_device/zf_device_menc15a.c | 188 ++++++++++++++++++
.../libraries/zf_device/zf_device_menc15a.h | 102 ++++++++++
.../zf_device/zf_device_uart_receiver.c | 2 +-
.../zf_device/zf_device_uart_receiver.h | 3 +-
.../libraries/zf_device/外设文件说明.txt | 2 +
.../libraries/zf_driver/zf_driver_spi.c | 8 +-
.../libraries/doc/version.txt | 4 +
.../libraries/zf_common/zf_common_headfile.h | 1 +
.../seekfree_assistant_interface.c | 2 +
.../libraries/zf_device/zf_device_menc15a.c | 188 ++++++++++++++++++
.../libraries/zf_device/zf_device_menc15a.h | 102 ++++++++++
.../zf_device/zf_device_uart_receiver.c | 2 +-
.../zf_device/zf_device_uart_receiver.h | 3 +-
.../libraries/zf_device/外设文件说明.txt | 2 +
.../libraries/zf_driver/zf_driver_spi.c | 8 +-
.../libraries/doc/version.txt | 4 +
.../libraries/zf_common/zf_common_headfile.h | 1 +
.../seekfree_assistant_interface.c | 2 +
.../libraries/zf_device/zf_device_menc15a.c | 188 ++++++++++++++++++
.../libraries/zf_device/zf_device_menc15a.h | 102 ++++++++++
.../zf_device/zf_device_uart_receiver.c | 2 +-
.../zf_device/zf_device_uart_receiver.h | 3 +-
.../libraries/zf_device/外设文件说明.txt | 2 +
.../libraries/zf_driver/zf_driver_spi.c | 8 +-
.../E15_fft_demo/libraries/doc/version.txt | 4 +
.../libraries/zf_common/zf_common_headfile.h | 1 +
.../seekfree_assistant_interface.c | 2 +
.../libraries/zf_device/zf_device_menc15a.c | 188 ++++++++++++++++++
.../libraries/zf_device/zf_device_menc15a.h | 102 ++++++++++
.../zf_device/zf_device_uart_receiver.c | 2 +-
.../zf_device/zf_device_uart_receiver.h | 3 +-
.../libraries/zf_device/外设文件说明.txt | 2 +
.../libraries/zf_driver/zf_driver_spi.c | 8 +-
.../libraries/doc/version.txt | 4 +
.../libraries/zf_common/zf_common_headfile.h | 1 +
.../seekfree_assistant_interface.c | 2 +
.../libraries/zf_device/zf_device_menc15a.c | 188 ++++++++++++++++++
.../libraries/zf_device/zf_device_menc15a.h | 102 ++++++++++
.../zf_device/zf_device_uart_receiver.c | 2 +-
.../zf_device/zf_device_uart_receiver.h | 3 +-
.../libraries/zf_device/外设文件说明.txt | 2 +
.../libraries/zf_driver/zf_driver_spi.c | 8 +-
144 files changed, 4880 insertions(+), 112 deletions(-)
create mode 100644 Example/E01_gpio_demo/libraries/zf_device/zf_device_menc15a.c
create mode 100644 Example/E01_gpio_demo/libraries/zf_device/zf_device_menc15a.h
create mode 100644 Example/E02_uart_demo/libraries/zf_device/zf_device_menc15a.c
create mode 100644 Example/E02_uart_demo/libraries/zf_device/zf_device_menc15a.h
create mode 100644 Example/E03_adc_demo/libraries/zf_device/zf_device_menc15a.c
create mode 100644 Example/E03_adc_demo/libraries/zf_device/zf_device_menc15a.h
create mode 100644 Example/E04_pwm_demo/libraries/zf_device/zf_device_menc15a.c
create mode 100644 Example/E04_pwm_demo/libraries/zf_device/zf_device_menc15a.h
create mode 100644 Example/E05_pit_demo/libraries/zf_device/zf_device_menc15a.c
create mode 100644 Example/E05_pit_demo/libraries/zf_device/zf_device_menc15a.h
create mode 100644 Example/E06_exit_demo/libraries/zf_device/zf_device_menc15a.c
create mode 100644 Example/E06_exit_demo/libraries/zf_device/zf_device_menc15a.h
create mode 100644 Example/E07_encoder_demo/libraries/zf_device/zf_device_menc15a.c
create mode 100644 Example/E07_encoder_demo/libraries/zf_device/zf_device_menc15a.h
create mode 100644 Example/E08_eeprom_demo/libraries/zf_device/zf_device_menc15a.c
create mode 100644 Example/E08_eeprom_demo/libraries/zf_device/zf_device_menc15a.h
create mode 100644 Example/E09_timer_demo/libraries/zf_device/zf_device_menc15a.c
create mode 100644 Example/E09_timer_demo/libraries/zf_device/zf_device_menc15a.h
create mode 100644 Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_menc15a.c
create mode 100644 Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_menc15a.h
create mode 100644 Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_menc15a.c
create mode 100644 Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_menc15a.h
create mode 100644 Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_menc15a.c
create mode 100644 Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_menc15a.h
create mode 100644 Example/E13_dual_core_demo/libraries/zf_device/zf_device_menc15a.c
create mode 100644 Example/E13_dual_core_demo/libraries/zf_device/zf_device_menc15a.h
create mode 100644 Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_menc15a.c
create mode 100644 Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_menc15a.h
create mode 100644 Example/E15_fft_demo/libraries/zf_device/zf_device_menc15a.c
create mode 100644 Example/E15_fft_demo/libraries/zf_device/zf_device_menc15a.h
create mode 100644 Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_menc15a.c
create mode 100644 Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_menc15a.h
diff --git a/Example/E01_gpio_demo/libraries/doc/version.txt b/Example/E01_gpio_demo/libraries/doc/version.txt
index f45bf81..4df6214 100644
--- a/Example/E01_gpio_demo/libraries/doc/version.txt
+++ b/Example/E01_gpio_demo/libraries/doc/version.txt
@@ -1,3 +1,7 @@
+V3.3.2
+ ÐÂÔözf_device_menc15a´Å±àÂëÆ÷ÍâÉèÇý¶¯
+ ¸ü¸Äuart½ÓÊÕ»ú²¿·ÖÓï¾ä
+ ÐÞÕýSPIµÄ16λͨѶ´íλÎÊÌâ
V3.3.1
ÒÆ³ýÕý½»±àÂëÆ÷µÄ¶ÏÑÔ¼ì²â
ÐÂÔöÖØÃüÃû¹¤³Ì¹¤¾ß
diff --git a/Example/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h b/Example/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h
index 3a140e3..c8f75f2 100644
--- a/Example/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h
@@ -93,6 +93,7 @@
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
#include "zf_device_key.h"
+#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
#include "zf_device_mt9v03x.h"
#include "zf_device_oled.h"
diff --git a/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.c
index cc42e43..adfc4a3 100644
--- a/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -91,8 +91,10 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
+#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
+#endif
}break;
case SEEKFREE_ASSISTANT_WIRELESS_UART:
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_menc15a.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_menc15a.c
new file mode 100644
index 0000000..faaeba2
--- /dev/null
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_menc15a.c
@@ -0,0 +1,188 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* SCL/SPC ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SPC_PIN ºê¶¨Òå
+* SDA/DSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDI_PIN ºê¶¨Òå
+* SA0/SDO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_device_config.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_spi.h"
+
+#include "zf_device_menc15a.h"
+
+uint16 menc15a_absolute_data[2] = {0};
+
+int16 menc15a_absolute_offset_data[2] = {0};
+
+int16 menc15a_speed_data[2] = {0};
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ¼ÆËã±àÂëÆ÷Ðýתƫ²î
+// ²ÎÊý˵Ã÷ encoder_max ±àÂëÆ÷¾«¶È Ìîдʮ½øÖÆÊý¾Ý
+// ²ÎÊý˵Ã÷ now_location µ±Ç°Î»ÖÃÐÅÏ¢
+// ²ÎÊý˵Ã÷ last_location ÉÏÒ»´ÎµÄλÖÃÐÅÏ¢
+// ·µ»Ø²ÎÊý int32 ¼ÆËãµÄÆ«²îÖµ
+// ʹÓÃʾÀý magnetic_encoder_get_offset();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+static int32 magnetic_encoder_get_offset (int32 encoder_max, int32 now_location, int32 last_location)
+{
+ int32 result_data = 0;
+
+ if((encoder_max / 2) < func_abs(now_location - last_location))
+ {
+ result_data = ((encoder_max / 2) < now_location ? (now_location - encoder_max - last_location) : (now_location + encoder_max - last_location));
+ }
+ else
+ {
+ result_data = (now_location - last_location);
+ }
+
+ return result_data;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý uint16 ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ʹÓÃʾÀý menc15a_1_get_absolute_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module)
+{
+ uint16 read_data = 0;
+
+ uint16 data_last = menc15a_absolute_data[menc15a_module];
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8021);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ spi_write_8bit(MENC15A_2_SPI, 0x80);
+ spi_write_8bit(MENC15A_2_SPI, 0x21);
+ read_data = spi_read_8bit(MENC15A_2_SPI);
+ read_data = ((read_data << 8) | spi_read_8bit(MENC15A_2_SPI));
+
+ MENC15A_2_CS(1);
+ }
+
+ menc15a_absolute_data[menc15a_module] = (read_data & 0x7fff);
+
+ menc15a_absolute_offset_data[menc15a_module] = (int16)magnetic_encoder_get_offset(32768, menc15a_absolute_data[menc15a_module], data_last);
+
+ return menc15a_absolute_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ תËÙÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý int16 תËÙÊý¾Ý(ÿÃëÐýת»¡¶È rad/s)
+// ʹÓÃʾÀý menc15a_1_get_speed_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module)
+{
+ int16 read_data = 0;
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8032);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_2_SPI, 0x8032);
+
+ MENC15A_2_CS(1);
+ }
+
+ read_data = (read_data & 0x7fff);
+
+ if(read_data > 16384)
+ {
+ read_data = read_data - 32768;
+ }
+
+ menc15a_speed_data[menc15a_module] = (int16)((float)read_data * 1.917476f);
+
+ return menc15a_speed_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ³õʼ»¯ MENC15A
+// ²ÎÊý˵Ã÷ void
+// ·µ»Ø²ÎÊý uint8 1-³õʼ»¯Ê§°Ü 0-³õʼ»¯³É¹¦
+// ʹÓÃʾÀý menc15a_init();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+uint8 menc15a_init(void)
+{
+ spi_init(MENC15A_1_SPI, SPI_MODE1, MENC15A_1_SPI_SPEED, MENC15A_1_CLK_PIN, MENC15A_1_MOSI_PIN, MENC15A_1_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-1 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_1_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-1 µÄ CS¶Ë¿Ú
+
+ spi_init(MENC15A_2_SPI, SPI_MODE1, MENC15A_2_SPI_SPEED, MENC15A_2_CLK_PIN, MENC15A_2_MOSI_PIN, MENC15A_2_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-2 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_2_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-2 µÄ CS¶Ë¿Ú
+
+ return 0;
+}
+
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_menc15a.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_menc15a.h
new file mode 100644
index 0000000..068d877
--- /dev/null
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_menc15a.h
@@ -0,0 +1,102 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* CLK ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CLK_PIN ºê¶¨Òå
+* MOSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MOSI_PIN ºê¶¨Òå
+* MISO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MISO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_menc15a_h_
+#define _zf_device_menc15a_h_
+
+#include "zf_common_typedef.h"
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+#define MENC15A_1_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_1_SPI (SPI_0 ) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ºÅ
+#define MENC15A_1_CLK_PIN (SPI0_SCLK_P20_11) // ´Å±àÂëÆ÷1 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_1_MOSI_PIN (SPI0_MOSI_P20_14) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_1_MISO_PIN (SPI0_MISO_P20_12) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_1_CS_PIN (P20_13) // ´Å±àÂëÆ÷1 CS ƬѡÒý½Å
+#define MENC15A_1_CS(x) ((x) ? (gpio_high(MENC15A_1_CS_PIN)) : (gpio_low(MENC15A_1_CS_PIN)))
+
+
+#define MENC15A_2_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_2_SPI (SPI_0 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ºÅ
+#define MENC15A_2_CLK_PIN (SPI0_SCLK_P20_11 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_2_MOSI_PIN (SPI0_MOSI_P20_14 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_2_MISO_PIN (SPI0_MISO_P20_12 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_2_CS_PIN (P20_15) // ´Å±àÂëÆ÷2 CS ƬѡÒý½Å
+#define MENC15A_2_CS(x) ((x) ? (gpio_high(MENC15A_2_CS_PIN)) : (gpio_low(MENC15A_2_CS_PIN)))
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+
+// ö¾Ù´Å±àÂëÄ£¿é
+typedef enum
+{
+ menc15a_1_module,
+ menc15a_2_module,
+
+}menc15a_module_enum;
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+
+extern uint16 menc15a_absolute_data[2];
+
+extern int16 menc15a_absolute_offset_data[2];
+
+extern int16 menc15a_speed_data[2];
+
+
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module);
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module);
+
+uint8 menc15a_init(void);
+
+
+#endif
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_uart_receiver.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_uart_receiver.c
index 3ebb3bd..ade446d 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_uart_receiver.c
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_uart_receiver.c
@@ -91,7 +91,7 @@ static void uart_receiver_analysis (uart_receiver_struct *remote_data,uint8 * bu
remote_data->channel[num++] = (buffer[5] >> 1 | buffer[6] << 7 ) & 0x07FF;
remote_data->channel[num++] = (buffer[6] >> 4 | buffer[7] << 4 ) & 0x07FF;
remote_data->channel[num++] = (buffer[7] >> 7 | buffer[8] << 1 | buffer[9] << 9 ) & 0x07FF;
- remote_data->state = (SBUS_NORMAL_STATE == buffer[23]) ? 1 : 0;
+ remote_data->state = (SBUS_ABNORMAL_STATE == (buffer[23] & SBUS_ABNORMAL_STATE)) ? 0 : 1;
uart_receiver.finsh_flag = 1;
}
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_uart_receiver.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_uart_receiver.h
index 948ab2f..6498dcb 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_uart_receiver.h
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_uart_receiver.h
@@ -55,8 +55,7 @@
#define REV_DATA_LEN ( 25 ) // SBUSÖ¡³¤
#define FRAME_STAR ( 0X0F ) // Ö¡Í·ÐÅÏ¢
#define FRAME_END ( 0X00 ) // ֡βÐÅÏ¢
-#define SBUS_NORMAL_STATE ( 0X03 ) // Õý³£×´Ì¬
-#define SBUS_ABNORMAL_STATE ( 0X0F ) // ʧ¿Ø×´Ì¬
+#define SBUS_ABNORMAL_STATE ( 0X04 ) // ʧ¿Ø×´Ì¬
typedef struct
{
diff --git a/Example/E01_gpio_demo/libraries/zf_device/外设文件说明.txt b/Example/E01_gpio_demo/libraries/zf_device/外设文件说明.txt
index 1c96965..40d9e28 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/外设文件说明.txt
+++ b/Example/E01_gpio_demo/libraries/zf_device/外设文件说明.txt
@@ -88,6 +88,8 @@ zf_device_uart_receiver.h SUBS
zf_device_absolute_encoder.h 360¡ã λÖô«¸ÐÆ÷ ¾ø¶ÔʽÃÔÄã mini ±àÂëÆ÷ ·Ö±æÂÊ£º0.088¡ã
+zf_device_menc15a.h 15λ¸ß¾«¶È´Å±àÂëÆ÷Çý¶¯ λÖÃʽ
+
zf_device_gnss.h GPS ¼° RTK ¶¨Î»Ä£¿é ˫Ƶ¸ß¾«¶È¶¨Î»Ä£¿é ÑÇÃ×¼¶¶¨Î»
zf_device_key.h GPIO °´¼üÇý¶¯ ÓÃÓÚ¼ì²âÖ÷°å°´¼ü״̬
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_spi.c
index f817dd9..d74841c 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_spi.c
@@ -766,11 +766,11 @@ uint16 spi_read_16bit_register (spi_index_enum spi_n, const uint16 register_name
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
@@ -818,11 +818,11 @@ void spi_read_16bit_registers (spi_index_enum spi_n, const uint16 register_name,
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
diff --git a/Example/E02_uart_demo/libraries/doc/version.txt b/Example/E02_uart_demo/libraries/doc/version.txt
index f45bf81..4df6214 100644
--- a/Example/E02_uart_demo/libraries/doc/version.txt
+++ b/Example/E02_uart_demo/libraries/doc/version.txt
@@ -1,3 +1,7 @@
+V3.3.2
+ ÐÂÔözf_device_menc15a´Å±àÂëÆ÷ÍâÉèÇý¶¯
+ ¸ü¸Äuart½ÓÊÕ»ú²¿·ÖÓï¾ä
+ ÐÞÕýSPIµÄ16λͨѶ´íλÎÊÌâ
V3.3.1
ÒÆ³ýÕý½»±àÂëÆ÷µÄ¶ÏÑÔ¼ì²â
ÐÂÔöÖØÃüÃû¹¤³Ì¹¤¾ß
diff --git a/Example/E02_uart_demo/libraries/zf_common/zf_common_headfile.h b/Example/E02_uart_demo/libraries/zf_common/zf_common_headfile.h
index 3a140e3..c8f75f2 100644
--- a/Example/E02_uart_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E02_uart_demo/libraries/zf_common/zf_common_headfile.h
@@ -93,6 +93,7 @@
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
#include "zf_device_key.h"
+#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
#include "zf_device_mt9v03x.h"
#include "zf_device_oled.h"
diff --git a/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.c
index cc42e43..adfc4a3 100644
--- a/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -91,8 +91,10 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
+#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
+#endif
}break;
case SEEKFREE_ASSISTANT_WIRELESS_UART:
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_menc15a.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_menc15a.c
new file mode 100644
index 0000000..faaeba2
--- /dev/null
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_menc15a.c
@@ -0,0 +1,188 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* SCL/SPC ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SPC_PIN ºê¶¨Òå
+* SDA/DSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDI_PIN ºê¶¨Òå
+* SA0/SDO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_device_config.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_spi.h"
+
+#include "zf_device_menc15a.h"
+
+uint16 menc15a_absolute_data[2] = {0};
+
+int16 menc15a_absolute_offset_data[2] = {0};
+
+int16 menc15a_speed_data[2] = {0};
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ¼ÆËã±àÂëÆ÷Ðýתƫ²î
+// ²ÎÊý˵Ã÷ encoder_max ±àÂëÆ÷¾«¶È Ìîдʮ½øÖÆÊý¾Ý
+// ²ÎÊý˵Ã÷ now_location µ±Ç°Î»ÖÃÐÅÏ¢
+// ²ÎÊý˵Ã÷ last_location ÉÏÒ»´ÎµÄλÖÃÐÅÏ¢
+// ·µ»Ø²ÎÊý int32 ¼ÆËãµÄÆ«²îÖµ
+// ʹÓÃʾÀý magnetic_encoder_get_offset();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+static int32 magnetic_encoder_get_offset (int32 encoder_max, int32 now_location, int32 last_location)
+{
+ int32 result_data = 0;
+
+ if((encoder_max / 2) < func_abs(now_location - last_location))
+ {
+ result_data = ((encoder_max / 2) < now_location ? (now_location - encoder_max - last_location) : (now_location + encoder_max - last_location));
+ }
+ else
+ {
+ result_data = (now_location - last_location);
+ }
+
+ return result_data;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý uint16 ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ʹÓÃʾÀý menc15a_1_get_absolute_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module)
+{
+ uint16 read_data = 0;
+
+ uint16 data_last = menc15a_absolute_data[menc15a_module];
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8021);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ spi_write_8bit(MENC15A_2_SPI, 0x80);
+ spi_write_8bit(MENC15A_2_SPI, 0x21);
+ read_data = spi_read_8bit(MENC15A_2_SPI);
+ read_data = ((read_data << 8) | spi_read_8bit(MENC15A_2_SPI));
+
+ MENC15A_2_CS(1);
+ }
+
+ menc15a_absolute_data[menc15a_module] = (read_data & 0x7fff);
+
+ menc15a_absolute_offset_data[menc15a_module] = (int16)magnetic_encoder_get_offset(32768, menc15a_absolute_data[menc15a_module], data_last);
+
+ return menc15a_absolute_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ תËÙÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý int16 תËÙÊý¾Ý(ÿÃëÐýת»¡¶È rad/s)
+// ʹÓÃʾÀý menc15a_1_get_speed_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module)
+{
+ int16 read_data = 0;
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8032);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_2_SPI, 0x8032);
+
+ MENC15A_2_CS(1);
+ }
+
+ read_data = (read_data & 0x7fff);
+
+ if(read_data > 16384)
+ {
+ read_data = read_data - 32768;
+ }
+
+ menc15a_speed_data[menc15a_module] = (int16)((float)read_data * 1.917476f);
+
+ return menc15a_speed_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ³õʼ»¯ MENC15A
+// ²ÎÊý˵Ã÷ void
+// ·µ»Ø²ÎÊý uint8 1-³õʼ»¯Ê§°Ü 0-³õʼ»¯³É¹¦
+// ʹÓÃʾÀý menc15a_init();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+uint8 menc15a_init(void)
+{
+ spi_init(MENC15A_1_SPI, SPI_MODE1, MENC15A_1_SPI_SPEED, MENC15A_1_CLK_PIN, MENC15A_1_MOSI_PIN, MENC15A_1_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-1 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_1_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-1 µÄ CS¶Ë¿Ú
+
+ spi_init(MENC15A_2_SPI, SPI_MODE1, MENC15A_2_SPI_SPEED, MENC15A_2_CLK_PIN, MENC15A_2_MOSI_PIN, MENC15A_2_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-2 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_2_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-2 µÄ CS¶Ë¿Ú
+
+ return 0;
+}
+
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_menc15a.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_menc15a.h
new file mode 100644
index 0000000..068d877
--- /dev/null
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_menc15a.h
@@ -0,0 +1,102 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* CLK ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CLK_PIN ºê¶¨Òå
+* MOSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MOSI_PIN ºê¶¨Òå
+* MISO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MISO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_menc15a_h_
+#define _zf_device_menc15a_h_
+
+#include "zf_common_typedef.h"
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+#define MENC15A_1_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_1_SPI (SPI_0 ) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ºÅ
+#define MENC15A_1_CLK_PIN (SPI0_SCLK_P20_11) // ´Å±àÂëÆ÷1 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_1_MOSI_PIN (SPI0_MOSI_P20_14) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_1_MISO_PIN (SPI0_MISO_P20_12) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_1_CS_PIN (P20_13) // ´Å±àÂëÆ÷1 CS ƬѡÒý½Å
+#define MENC15A_1_CS(x) ((x) ? (gpio_high(MENC15A_1_CS_PIN)) : (gpio_low(MENC15A_1_CS_PIN)))
+
+
+#define MENC15A_2_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_2_SPI (SPI_0 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ºÅ
+#define MENC15A_2_CLK_PIN (SPI0_SCLK_P20_11 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_2_MOSI_PIN (SPI0_MOSI_P20_14 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_2_MISO_PIN (SPI0_MISO_P20_12 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_2_CS_PIN (P20_15) // ´Å±àÂëÆ÷2 CS ƬѡÒý½Å
+#define MENC15A_2_CS(x) ((x) ? (gpio_high(MENC15A_2_CS_PIN)) : (gpio_low(MENC15A_2_CS_PIN)))
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+
+// ö¾Ù´Å±àÂëÄ£¿é
+typedef enum
+{
+ menc15a_1_module,
+ menc15a_2_module,
+
+}menc15a_module_enum;
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+
+extern uint16 menc15a_absolute_data[2];
+
+extern int16 menc15a_absolute_offset_data[2];
+
+extern int16 menc15a_speed_data[2];
+
+
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module);
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module);
+
+uint8 menc15a_init(void);
+
+
+#endif
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_uart_receiver.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_uart_receiver.c
index 3ebb3bd..ade446d 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_uart_receiver.c
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_uart_receiver.c
@@ -91,7 +91,7 @@ static void uart_receiver_analysis (uart_receiver_struct *remote_data,uint8 * bu
remote_data->channel[num++] = (buffer[5] >> 1 | buffer[6] << 7 ) & 0x07FF;
remote_data->channel[num++] = (buffer[6] >> 4 | buffer[7] << 4 ) & 0x07FF;
remote_data->channel[num++] = (buffer[7] >> 7 | buffer[8] << 1 | buffer[9] << 9 ) & 0x07FF;
- remote_data->state = (SBUS_NORMAL_STATE == buffer[23]) ? 1 : 0;
+ remote_data->state = (SBUS_ABNORMAL_STATE == (buffer[23] & SBUS_ABNORMAL_STATE)) ? 0 : 1;
uart_receiver.finsh_flag = 1;
}
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_uart_receiver.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_uart_receiver.h
index 948ab2f..6498dcb 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_uart_receiver.h
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_uart_receiver.h
@@ -55,8 +55,7 @@
#define REV_DATA_LEN ( 25 ) // SBUSÖ¡³¤
#define FRAME_STAR ( 0X0F ) // Ö¡Í·ÐÅÏ¢
#define FRAME_END ( 0X00 ) // ֡βÐÅÏ¢
-#define SBUS_NORMAL_STATE ( 0X03 ) // Õý³£×´Ì¬
-#define SBUS_ABNORMAL_STATE ( 0X0F ) // ʧ¿Ø×´Ì¬
+#define SBUS_ABNORMAL_STATE ( 0X04 ) // ʧ¿Ø×´Ì¬
typedef struct
{
diff --git a/Example/E02_uart_demo/libraries/zf_device/外设文件说明.txt b/Example/E02_uart_demo/libraries/zf_device/外设文件说明.txt
index 1c96965..40d9e28 100644
--- a/Example/E02_uart_demo/libraries/zf_device/外设文件说明.txt
+++ b/Example/E02_uart_demo/libraries/zf_device/外设文件说明.txt
@@ -88,6 +88,8 @@ zf_device_uart_receiver.h SUBS
zf_device_absolute_encoder.h 360¡ã λÖô«¸ÐÆ÷ ¾ø¶ÔʽÃÔÄã mini ±àÂëÆ÷ ·Ö±æÂÊ£º0.088¡ã
+zf_device_menc15a.h 15λ¸ß¾«¶È´Å±àÂëÆ÷Çý¶¯ λÖÃʽ
+
zf_device_gnss.h GPS ¼° RTK ¶¨Î»Ä£¿é ˫Ƶ¸ß¾«¶È¶¨Î»Ä£¿é ÑÇÃ×¼¶¶¨Î»
zf_device_key.h GPIO °´¼üÇý¶¯ ÓÃÓÚ¼ì²âÖ÷°å°´¼ü״̬
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_spi.c
index f817dd9..d74841c 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_spi.c
@@ -766,11 +766,11 @@ uint16 spi_read_16bit_register (spi_index_enum spi_n, const uint16 register_name
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
@@ -818,11 +818,11 @@ void spi_read_16bit_registers (spi_index_enum spi_n, const uint16 register_name,
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
diff --git a/Example/E03_adc_demo/libraries/doc/version.txt b/Example/E03_adc_demo/libraries/doc/version.txt
index f45bf81..4df6214 100644
--- a/Example/E03_adc_demo/libraries/doc/version.txt
+++ b/Example/E03_adc_demo/libraries/doc/version.txt
@@ -1,3 +1,7 @@
+V3.3.2
+ ÐÂÔözf_device_menc15a´Å±àÂëÆ÷ÍâÉèÇý¶¯
+ ¸ü¸Äuart½ÓÊÕ»ú²¿·ÖÓï¾ä
+ ÐÞÕýSPIµÄ16λͨѶ´íλÎÊÌâ
V3.3.1
ÒÆ³ýÕý½»±àÂëÆ÷µÄ¶ÏÑÔ¼ì²â
ÐÂÔöÖØÃüÃû¹¤³Ì¹¤¾ß
diff --git a/Example/E03_adc_demo/libraries/zf_common/zf_common_headfile.h b/Example/E03_adc_demo/libraries/zf_common/zf_common_headfile.h
index 3a140e3..c8f75f2 100644
--- a/Example/E03_adc_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E03_adc_demo/libraries/zf_common/zf_common_headfile.h
@@ -93,6 +93,7 @@
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
#include "zf_device_key.h"
+#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
#include "zf_device_mt9v03x.h"
#include "zf_device_oled.h"
diff --git a/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.c
index cc42e43..adfc4a3 100644
--- a/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -91,8 +91,10 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
+#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
+#endif
}break;
case SEEKFREE_ASSISTANT_WIRELESS_UART:
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_menc15a.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_menc15a.c
new file mode 100644
index 0000000..faaeba2
--- /dev/null
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_menc15a.c
@@ -0,0 +1,188 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* SCL/SPC ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SPC_PIN ºê¶¨Òå
+* SDA/DSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDI_PIN ºê¶¨Òå
+* SA0/SDO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_device_config.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_spi.h"
+
+#include "zf_device_menc15a.h"
+
+uint16 menc15a_absolute_data[2] = {0};
+
+int16 menc15a_absolute_offset_data[2] = {0};
+
+int16 menc15a_speed_data[2] = {0};
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ¼ÆËã±àÂëÆ÷Ðýתƫ²î
+// ²ÎÊý˵Ã÷ encoder_max ±àÂëÆ÷¾«¶È Ìîдʮ½øÖÆÊý¾Ý
+// ²ÎÊý˵Ã÷ now_location µ±Ç°Î»ÖÃÐÅÏ¢
+// ²ÎÊý˵Ã÷ last_location ÉÏÒ»´ÎµÄλÖÃÐÅÏ¢
+// ·µ»Ø²ÎÊý int32 ¼ÆËãµÄÆ«²îÖµ
+// ʹÓÃʾÀý magnetic_encoder_get_offset();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+static int32 magnetic_encoder_get_offset (int32 encoder_max, int32 now_location, int32 last_location)
+{
+ int32 result_data = 0;
+
+ if((encoder_max / 2) < func_abs(now_location - last_location))
+ {
+ result_data = ((encoder_max / 2) < now_location ? (now_location - encoder_max - last_location) : (now_location + encoder_max - last_location));
+ }
+ else
+ {
+ result_data = (now_location - last_location);
+ }
+
+ return result_data;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý uint16 ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ʹÓÃʾÀý menc15a_1_get_absolute_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module)
+{
+ uint16 read_data = 0;
+
+ uint16 data_last = menc15a_absolute_data[menc15a_module];
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8021);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ spi_write_8bit(MENC15A_2_SPI, 0x80);
+ spi_write_8bit(MENC15A_2_SPI, 0x21);
+ read_data = spi_read_8bit(MENC15A_2_SPI);
+ read_data = ((read_data << 8) | spi_read_8bit(MENC15A_2_SPI));
+
+ MENC15A_2_CS(1);
+ }
+
+ menc15a_absolute_data[menc15a_module] = (read_data & 0x7fff);
+
+ menc15a_absolute_offset_data[menc15a_module] = (int16)magnetic_encoder_get_offset(32768, menc15a_absolute_data[menc15a_module], data_last);
+
+ return menc15a_absolute_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ תËÙÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý int16 תËÙÊý¾Ý(ÿÃëÐýת»¡¶È rad/s)
+// ʹÓÃʾÀý menc15a_1_get_speed_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module)
+{
+ int16 read_data = 0;
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8032);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_2_SPI, 0x8032);
+
+ MENC15A_2_CS(1);
+ }
+
+ read_data = (read_data & 0x7fff);
+
+ if(read_data > 16384)
+ {
+ read_data = read_data - 32768;
+ }
+
+ menc15a_speed_data[menc15a_module] = (int16)((float)read_data * 1.917476f);
+
+ return menc15a_speed_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ³õʼ»¯ MENC15A
+// ²ÎÊý˵Ã÷ void
+// ·µ»Ø²ÎÊý uint8 1-³õʼ»¯Ê§°Ü 0-³õʼ»¯³É¹¦
+// ʹÓÃʾÀý menc15a_init();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+uint8 menc15a_init(void)
+{
+ spi_init(MENC15A_1_SPI, SPI_MODE1, MENC15A_1_SPI_SPEED, MENC15A_1_CLK_PIN, MENC15A_1_MOSI_PIN, MENC15A_1_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-1 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_1_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-1 µÄ CS¶Ë¿Ú
+
+ spi_init(MENC15A_2_SPI, SPI_MODE1, MENC15A_2_SPI_SPEED, MENC15A_2_CLK_PIN, MENC15A_2_MOSI_PIN, MENC15A_2_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-2 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_2_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-2 µÄ CS¶Ë¿Ú
+
+ return 0;
+}
+
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_menc15a.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_menc15a.h
new file mode 100644
index 0000000..068d877
--- /dev/null
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_menc15a.h
@@ -0,0 +1,102 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* CLK ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CLK_PIN ºê¶¨Òå
+* MOSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MOSI_PIN ºê¶¨Òå
+* MISO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MISO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_menc15a_h_
+#define _zf_device_menc15a_h_
+
+#include "zf_common_typedef.h"
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+#define MENC15A_1_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_1_SPI (SPI_0 ) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ºÅ
+#define MENC15A_1_CLK_PIN (SPI0_SCLK_P20_11) // ´Å±àÂëÆ÷1 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_1_MOSI_PIN (SPI0_MOSI_P20_14) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_1_MISO_PIN (SPI0_MISO_P20_12) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_1_CS_PIN (P20_13) // ´Å±àÂëÆ÷1 CS ƬѡÒý½Å
+#define MENC15A_1_CS(x) ((x) ? (gpio_high(MENC15A_1_CS_PIN)) : (gpio_low(MENC15A_1_CS_PIN)))
+
+
+#define MENC15A_2_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_2_SPI (SPI_0 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ºÅ
+#define MENC15A_2_CLK_PIN (SPI0_SCLK_P20_11 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_2_MOSI_PIN (SPI0_MOSI_P20_14 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_2_MISO_PIN (SPI0_MISO_P20_12 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_2_CS_PIN (P20_15) // ´Å±àÂëÆ÷2 CS ƬѡÒý½Å
+#define MENC15A_2_CS(x) ((x) ? (gpio_high(MENC15A_2_CS_PIN)) : (gpio_low(MENC15A_2_CS_PIN)))
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+
+// ö¾Ù´Å±àÂëÄ£¿é
+typedef enum
+{
+ menc15a_1_module,
+ menc15a_2_module,
+
+}menc15a_module_enum;
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+
+extern uint16 menc15a_absolute_data[2];
+
+extern int16 menc15a_absolute_offset_data[2];
+
+extern int16 menc15a_speed_data[2];
+
+
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module);
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module);
+
+uint8 menc15a_init(void);
+
+
+#endif
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_uart_receiver.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_uart_receiver.c
index 3ebb3bd..ade446d 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_uart_receiver.c
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_uart_receiver.c
@@ -91,7 +91,7 @@ static void uart_receiver_analysis (uart_receiver_struct *remote_data,uint8 * bu
remote_data->channel[num++] = (buffer[5] >> 1 | buffer[6] << 7 ) & 0x07FF;
remote_data->channel[num++] = (buffer[6] >> 4 | buffer[7] << 4 ) & 0x07FF;
remote_data->channel[num++] = (buffer[7] >> 7 | buffer[8] << 1 | buffer[9] << 9 ) & 0x07FF;
- remote_data->state = (SBUS_NORMAL_STATE == buffer[23]) ? 1 : 0;
+ remote_data->state = (SBUS_ABNORMAL_STATE == (buffer[23] & SBUS_ABNORMAL_STATE)) ? 0 : 1;
uart_receiver.finsh_flag = 1;
}
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_uart_receiver.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_uart_receiver.h
index 948ab2f..6498dcb 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_uart_receiver.h
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_uart_receiver.h
@@ -55,8 +55,7 @@
#define REV_DATA_LEN ( 25 ) // SBUSÖ¡³¤
#define FRAME_STAR ( 0X0F ) // Ö¡Í·ÐÅÏ¢
#define FRAME_END ( 0X00 ) // ֡βÐÅÏ¢
-#define SBUS_NORMAL_STATE ( 0X03 ) // Õý³£×´Ì¬
-#define SBUS_ABNORMAL_STATE ( 0X0F ) // ʧ¿Ø×´Ì¬
+#define SBUS_ABNORMAL_STATE ( 0X04 ) // ʧ¿Ø×´Ì¬
typedef struct
{
diff --git a/Example/E03_adc_demo/libraries/zf_device/外设文件说明.txt b/Example/E03_adc_demo/libraries/zf_device/外设文件说明.txt
index 1c96965..40d9e28 100644
--- a/Example/E03_adc_demo/libraries/zf_device/外设文件说明.txt
+++ b/Example/E03_adc_demo/libraries/zf_device/外设文件说明.txt
@@ -88,6 +88,8 @@ zf_device_uart_receiver.h SUBS
zf_device_absolute_encoder.h 360¡ã λÖô«¸ÐÆ÷ ¾ø¶ÔʽÃÔÄã mini ±àÂëÆ÷ ·Ö±æÂÊ£º0.088¡ã
+zf_device_menc15a.h 15λ¸ß¾«¶È´Å±àÂëÆ÷Çý¶¯ λÖÃʽ
+
zf_device_gnss.h GPS ¼° RTK ¶¨Î»Ä£¿é ˫Ƶ¸ß¾«¶È¶¨Î»Ä£¿é ÑÇÃ×¼¶¶¨Î»
zf_device_key.h GPIO °´¼üÇý¶¯ ÓÃÓÚ¼ì²âÖ÷°å°´¼ü״̬
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_spi.c
index f817dd9..d74841c 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_spi.c
@@ -766,11 +766,11 @@ uint16 spi_read_16bit_register (spi_index_enum spi_n, const uint16 register_name
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
@@ -818,11 +818,11 @@ void spi_read_16bit_registers (spi_index_enum spi_n, const uint16 register_name,
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
diff --git a/Example/E04_pwm_demo/libraries/doc/version.txt b/Example/E04_pwm_demo/libraries/doc/version.txt
index f45bf81..4df6214 100644
--- a/Example/E04_pwm_demo/libraries/doc/version.txt
+++ b/Example/E04_pwm_demo/libraries/doc/version.txt
@@ -1,3 +1,7 @@
+V3.3.2
+ ÐÂÔözf_device_menc15a´Å±àÂëÆ÷ÍâÉèÇý¶¯
+ ¸ü¸Äuart½ÓÊÕ»ú²¿·ÖÓï¾ä
+ ÐÞÕýSPIµÄ16λͨѶ´íλÎÊÌâ
V3.3.1
ÒÆ³ýÕý½»±àÂëÆ÷µÄ¶ÏÑÔ¼ì²â
ÐÂÔöÖØÃüÃû¹¤³Ì¹¤¾ß
diff --git a/Example/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h b/Example/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h
index 3a140e3..c8f75f2 100644
--- a/Example/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h
@@ -93,6 +93,7 @@
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
#include "zf_device_key.h"
+#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
#include "zf_device_mt9v03x.h"
#include "zf_device_oled.h"
diff --git a/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.c
index cc42e43..adfc4a3 100644
--- a/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -91,8 +91,10 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
+#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
+#endif
}break;
case SEEKFREE_ASSISTANT_WIRELESS_UART:
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_menc15a.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_menc15a.c
new file mode 100644
index 0000000..faaeba2
--- /dev/null
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_menc15a.c
@@ -0,0 +1,188 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* SCL/SPC ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SPC_PIN ºê¶¨Òå
+* SDA/DSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDI_PIN ºê¶¨Òå
+* SA0/SDO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_device_config.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_spi.h"
+
+#include "zf_device_menc15a.h"
+
+uint16 menc15a_absolute_data[2] = {0};
+
+int16 menc15a_absolute_offset_data[2] = {0};
+
+int16 menc15a_speed_data[2] = {0};
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ¼ÆËã±àÂëÆ÷Ðýתƫ²î
+// ²ÎÊý˵Ã÷ encoder_max ±àÂëÆ÷¾«¶È Ìîдʮ½øÖÆÊý¾Ý
+// ²ÎÊý˵Ã÷ now_location µ±Ç°Î»ÖÃÐÅÏ¢
+// ²ÎÊý˵Ã÷ last_location ÉÏÒ»´ÎµÄλÖÃÐÅÏ¢
+// ·µ»Ø²ÎÊý int32 ¼ÆËãµÄÆ«²îÖµ
+// ʹÓÃʾÀý magnetic_encoder_get_offset();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+static int32 magnetic_encoder_get_offset (int32 encoder_max, int32 now_location, int32 last_location)
+{
+ int32 result_data = 0;
+
+ if((encoder_max / 2) < func_abs(now_location - last_location))
+ {
+ result_data = ((encoder_max / 2) < now_location ? (now_location - encoder_max - last_location) : (now_location + encoder_max - last_location));
+ }
+ else
+ {
+ result_data = (now_location - last_location);
+ }
+
+ return result_data;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý uint16 ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ʹÓÃʾÀý menc15a_1_get_absolute_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module)
+{
+ uint16 read_data = 0;
+
+ uint16 data_last = menc15a_absolute_data[menc15a_module];
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8021);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ spi_write_8bit(MENC15A_2_SPI, 0x80);
+ spi_write_8bit(MENC15A_2_SPI, 0x21);
+ read_data = spi_read_8bit(MENC15A_2_SPI);
+ read_data = ((read_data << 8) | spi_read_8bit(MENC15A_2_SPI));
+
+ MENC15A_2_CS(1);
+ }
+
+ menc15a_absolute_data[menc15a_module] = (read_data & 0x7fff);
+
+ menc15a_absolute_offset_data[menc15a_module] = (int16)magnetic_encoder_get_offset(32768, menc15a_absolute_data[menc15a_module], data_last);
+
+ return menc15a_absolute_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ תËÙÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý int16 תËÙÊý¾Ý(ÿÃëÐýת»¡¶È rad/s)
+// ʹÓÃʾÀý menc15a_1_get_speed_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module)
+{
+ int16 read_data = 0;
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8032);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_2_SPI, 0x8032);
+
+ MENC15A_2_CS(1);
+ }
+
+ read_data = (read_data & 0x7fff);
+
+ if(read_data > 16384)
+ {
+ read_data = read_data - 32768;
+ }
+
+ menc15a_speed_data[menc15a_module] = (int16)((float)read_data * 1.917476f);
+
+ return menc15a_speed_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ³õʼ»¯ MENC15A
+// ²ÎÊý˵Ã÷ void
+// ·µ»Ø²ÎÊý uint8 1-³õʼ»¯Ê§°Ü 0-³õʼ»¯³É¹¦
+// ʹÓÃʾÀý menc15a_init();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+uint8 menc15a_init(void)
+{
+ spi_init(MENC15A_1_SPI, SPI_MODE1, MENC15A_1_SPI_SPEED, MENC15A_1_CLK_PIN, MENC15A_1_MOSI_PIN, MENC15A_1_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-1 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_1_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-1 µÄ CS¶Ë¿Ú
+
+ spi_init(MENC15A_2_SPI, SPI_MODE1, MENC15A_2_SPI_SPEED, MENC15A_2_CLK_PIN, MENC15A_2_MOSI_PIN, MENC15A_2_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-2 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_2_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-2 µÄ CS¶Ë¿Ú
+
+ return 0;
+}
+
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_menc15a.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_menc15a.h
new file mode 100644
index 0000000..068d877
--- /dev/null
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_menc15a.h
@@ -0,0 +1,102 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* CLK ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CLK_PIN ºê¶¨Òå
+* MOSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MOSI_PIN ºê¶¨Òå
+* MISO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MISO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_menc15a_h_
+#define _zf_device_menc15a_h_
+
+#include "zf_common_typedef.h"
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+#define MENC15A_1_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_1_SPI (SPI_0 ) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ºÅ
+#define MENC15A_1_CLK_PIN (SPI0_SCLK_P20_11) // ´Å±àÂëÆ÷1 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_1_MOSI_PIN (SPI0_MOSI_P20_14) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_1_MISO_PIN (SPI0_MISO_P20_12) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_1_CS_PIN (P20_13) // ´Å±àÂëÆ÷1 CS ƬѡÒý½Å
+#define MENC15A_1_CS(x) ((x) ? (gpio_high(MENC15A_1_CS_PIN)) : (gpio_low(MENC15A_1_CS_PIN)))
+
+
+#define MENC15A_2_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_2_SPI (SPI_0 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ºÅ
+#define MENC15A_2_CLK_PIN (SPI0_SCLK_P20_11 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_2_MOSI_PIN (SPI0_MOSI_P20_14 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_2_MISO_PIN (SPI0_MISO_P20_12 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_2_CS_PIN (P20_15) // ´Å±àÂëÆ÷2 CS ƬѡÒý½Å
+#define MENC15A_2_CS(x) ((x) ? (gpio_high(MENC15A_2_CS_PIN)) : (gpio_low(MENC15A_2_CS_PIN)))
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+
+// ö¾Ù´Å±àÂëÄ£¿é
+typedef enum
+{
+ menc15a_1_module,
+ menc15a_2_module,
+
+}menc15a_module_enum;
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+
+extern uint16 menc15a_absolute_data[2];
+
+extern int16 menc15a_absolute_offset_data[2];
+
+extern int16 menc15a_speed_data[2];
+
+
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module);
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module);
+
+uint8 menc15a_init(void);
+
+
+#endif
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_uart_receiver.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_uart_receiver.c
index 3ebb3bd..ade446d 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_uart_receiver.c
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_uart_receiver.c
@@ -91,7 +91,7 @@ static void uart_receiver_analysis (uart_receiver_struct *remote_data,uint8 * bu
remote_data->channel[num++] = (buffer[5] >> 1 | buffer[6] << 7 ) & 0x07FF;
remote_data->channel[num++] = (buffer[6] >> 4 | buffer[7] << 4 ) & 0x07FF;
remote_data->channel[num++] = (buffer[7] >> 7 | buffer[8] << 1 | buffer[9] << 9 ) & 0x07FF;
- remote_data->state = (SBUS_NORMAL_STATE == buffer[23]) ? 1 : 0;
+ remote_data->state = (SBUS_ABNORMAL_STATE == (buffer[23] & SBUS_ABNORMAL_STATE)) ? 0 : 1;
uart_receiver.finsh_flag = 1;
}
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_uart_receiver.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_uart_receiver.h
index 948ab2f..6498dcb 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_uart_receiver.h
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_uart_receiver.h
@@ -55,8 +55,7 @@
#define REV_DATA_LEN ( 25 ) // SBUSÖ¡³¤
#define FRAME_STAR ( 0X0F ) // Ö¡Í·ÐÅÏ¢
#define FRAME_END ( 0X00 ) // ֡βÐÅÏ¢
-#define SBUS_NORMAL_STATE ( 0X03 ) // Õý³£×´Ì¬
-#define SBUS_ABNORMAL_STATE ( 0X0F ) // ʧ¿Ø×´Ì¬
+#define SBUS_ABNORMAL_STATE ( 0X04 ) // ʧ¿Ø×´Ì¬
typedef struct
{
diff --git a/Example/E04_pwm_demo/libraries/zf_device/外设文件说明.txt b/Example/E04_pwm_demo/libraries/zf_device/外设文件说明.txt
index 1c96965..40d9e28 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/外设文件说明.txt
+++ b/Example/E04_pwm_demo/libraries/zf_device/外设文件说明.txt
@@ -88,6 +88,8 @@ zf_device_uart_receiver.h SUBS
zf_device_absolute_encoder.h 360¡ã λÖô«¸ÐÆ÷ ¾ø¶ÔʽÃÔÄã mini ±àÂëÆ÷ ·Ö±æÂÊ£º0.088¡ã
+zf_device_menc15a.h 15λ¸ß¾«¶È´Å±àÂëÆ÷Çý¶¯ λÖÃʽ
+
zf_device_gnss.h GPS ¼° RTK ¶¨Î»Ä£¿é ˫Ƶ¸ß¾«¶È¶¨Î»Ä£¿é ÑÇÃ×¼¶¶¨Î»
zf_device_key.h GPIO °´¼üÇý¶¯ ÓÃÓÚ¼ì²âÖ÷°å°´¼ü״̬
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_spi.c
index f817dd9..d74841c 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_spi.c
@@ -766,11 +766,11 @@ uint16 spi_read_16bit_register (spi_index_enum spi_n, const uint16 register_name
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
@@ -818,11 +818,11 @@ void spi_read_16bit_registers (spi_index_enum spi_n, const uint16 register_name,
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
diff --git a/Example/E05_pit_demo/libraries/doc/version.txt b/Example/E05_pit_demo/libraries/doc/version.txt
index f45bf81..4df6214 100644
--- a/Example/E05_pit_demo/libraries/doc/version.txt
+++ b/Example/E05_pit_demo/libraries/doc/version.txt
@@ -1,3 +1,7 @@
+V3.3.2
+ ÐÂÔözf_device_menc15a´Å±àÂëÆ÷ÍâÉèÇý¶¯
+ ¸ü¸Äuart½ÓÊÕ»ú²¿·ÖÓï¾ä
+ ÐÞÕýSPIµÄ16λͨѶ´íλÎÊÌâ
V3.3.1
ÒÆ³ýÕý½»±àÂëÆ÷µÄ¶ÏÑÔ¼ì²â
ÐÂÔöÖØÃüÃû¹¤³Ì¹¤¾ß
diff --git a/Example/E05_pit_demo/libraries/zf_common/zf_common_headfile.h b/Example/E05_pit_demo/libraries/zf_common/zf_common_headfile.h
index 3a140e3..c8f75f2 100644
--- a/Example/E05_pit_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E05_pit_demo/libraries/zf_common/zf_common_headfile.h
@@ -93,6 +93,7 @@
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
#include "zf_device_key.h"
+#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
#include "zf_device_mt9v03x.h"
#include "zf_device_oled.h"
diff --git a/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.c
index cc42e43..adfc4a3 100644
--- a/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -91,8 +91,10 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
+#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
+#endif
}break;
case SEEKFREE_ASSISTANT_WIRELESS_UART:
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_menc15a.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_menc15a.c
new file mode 100644
index 0000000..faaeba2
--- /dev/null
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_menc15a.c
@@ -0,0 +1,188 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* SCL/SPC ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SPC_PIN ºê¶¨Òå
+* SDA/DSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDI_PIN ºê¶¨Òå
+* SA0/SDO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_device_config.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_spi.h"
+
+#include "zf_device_menc15a.h"
+
+uint16 menc15a_absolute_data[2] = {0};
+
+int16 menc15a_absolute_offset_data[2] = {0};
+
+int16 menc15a_speed_data[2] = {0};
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ¼ÆËã±àÂëÆ÷Ðýתƫ²î
+// ²ÎÊý˵Ã÷ encoder_max ±àÂëÆ÷¾«¶È Ìîдʮ½øÖÆÊý¾Ý
+// ²ÎÊý˵Ã÷ now_location µ±Ç°Î»ÖÃÐÅÏ¢
+// ²ÎÊý˵Ã÷ last_location ÉÏÒ»´ÎµÄλÖÃÐÅÏ¢
+// ·µ»Ø²ÎÊý int32 ¼ÆËãµÄÆ«²îÖµ
+// ʹÓÃʾÀý magnetic_encoder_get_offset();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+static int32 magnetic_encoder_get_offset (int32 encoder_max, int32 now_location, int32 last_location)
+{
+ int32 result_data = 0;
+
+ if((encoder_max / 2) < func_abs(now_location - last_location))
+ {
+ result_data = ((encoder_max / 2) < now_location ? (now_location - encoder_max - last_location) : (now_location + encoder_max - last_location));
+ }
+ else
+ {
+ result_data = (now_location - last_location);
+ }
+
+ return result_data;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý uint16 ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ʹÓÃʾÀý menc15a_1_get_absolute_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module)
+{
+ uint16 read_data = 0;
+
+ uint16 data_last = menc15a_absolute_data[menc15a_module];
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8021);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ spi_write_8bit(MENC15A_2_SPI, 0x80);
+ spi_write_8bit(MENC15A_2_SPI, 0x21);
+ read_data = spi_read_8bit(MENC15A_2_SPI);
+ read_data = ((read_data << 8) | spi_read_8bit(MENC15A_2_SPI));
+
+ MENC15A_2_CS(1);
+ }
+
+ menc15a_absolute_data[menc15a_module] = (read_data & 0x7fff);
+
+ menc15a_absolute_offset_data[menc15a_module] = (int16)magnetic_encoder_get_offset(32768, menc15a_absolute_data[menc15a_module], data_last);
+
+ return menc15a_absolute_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ תËÙÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý int16 תËÙÊý¾Ý(ÿÃëÐýת»¡¶È rad/s)
+// ʹÓÃʾÀý menc15a_1_get_speed_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module)
+{
+ int16 read_data = 0;
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8032);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_2_SPI, 0x8032);
+
+ MENC15A_2_CS(1);
+ }
+
+ read_data = (read_data & 0x7fff);
+
+ if(read_data > 16384)
+ {
+ read_data = read_data - 32768;
+ }
+
+ menc15a_speed_data[menc15a_module] = (int16)((float)read_data * 1.917476f);
+
+ return menc15a_speed_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ³õʼ»¯ MENC15A
+// ²ÎÊý˵Ã÷ void
+// ·µ»Ø²ÎÊý uint8 1-³õʼ»¯Ê§°Ü 0-³õʼ»¯³É¹¦
+// ʹÓÃʾÀý menc15a_init();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+uint8 menc15a_init(void)
+{
+ spi_init(MENC15A_1_SPI, SPI_MODE1, MENC15A_1_SPI_SPEED, MENC15A_1_CLK_PIN, MENC15A_1_MOSI_PIN, MENC15A_1_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-1 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_1_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-1 µÄ CS¶Ë¿Ú
+
+ spi_init(MENC15A_2_SPI, SPI_MODE1, MENC15A_2_SPI_SPEED, MENC15A_2_CLK_PIN, MENC15A_2_MOSI_PIN, MENC15A_2_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-2 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_2_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-2 µÄ CS¶Ë¿Ú
+
+ return 0;
+}
+
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_menc15a.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_menc15a.h
new file mode 100644
index 0000000..068d877
--- /dev/null
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_menc15a.h
@@ -0,0 +1,102 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* CLK ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CLK_PIN ºê¶¨Òå
+* MOSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MOSI_PIN ºê¶¨Òå
+* MISO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MISO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_menc15a_h_
+#define _zf_device_menc15a_h_
+
+#include "zf_common_typedef.h"
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+#define MENC15A_1_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_1_SPI (SPI_0 ) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ºÅ
+#define MENC15A_1_CLK_PIN (SPI0_SCLK_P20_11) // ´Å±àÂëÆ÷1 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_1_MOSI_PIN (SPI0_MOSI_P20_14) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_1_MISO_PIN (SPI0_MISO_P20_12) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_1_CS_PIN (P20_13) // ´Å±àÂëÆ÷1 CS ƬѡÒý½Å
+#define MENC15A_1_CS(x) ((x) ? (gpio_high(MENC15A_1_CS_PIN)) : (gpio_low(MENC15A_1_CS_PIN)))
+
+
+#define MENC15A_2_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_2_SPI (SPI_0 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ºÅ
+#define MENC15A_2_CLK_PIN (SPI0_SCLK_P20_11 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_2_MOSI_PIN (SPI0_MOSI_P20_14 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_2_MISO_PIN (SPI0_MISO_P20_12 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_2_CS_PIN (P20_15) // ´Å±àÂëÆ÷2 CS ƬѡÒý½Å
+#define MENC15A_2_CS(x) ((x) ? (gpio_high(MENC15A_2_CS_PIN)) : (gpio_low(MENC15A_2_CS_PIN)))
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+
+// ö¾Ù´Å±àÂëÄ£¿é
+typedef enum
+{
+ menc15a_1_module,
+ menc15a_2_module,
+
+}menc15a_module_enum;
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+
+extern uint16 menc15a_absolute_data[2];
+
+extern int16 menc15a_absolute_offset_data[2];
+
+extern int16 menc15a_speed_data[2];
+
+
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module);
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module);
+
+uint8 menc15a_init(void);
+
+
+#endif
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_uart_receiver.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_uart_receiver.c
index 3ebb3bd..ade446d 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_uart_receiver.c
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_uart_receiver.c
@@ -91,7 +91,7 @@ static void uart_receiver_analysis (uart_receiver_struct *remote_data,uint8 * bu
remote_data->channel[num++] = (buffer[5] >> 1 | buffer[6] << 7 ) & 0x07FF;
remote_data->channel[num++] = (buffer[6] >> 4 | buffer[7] << 4 ) & 0x07FF;
remote_data->channel[num++] = (buffer[7] >> 7 | buffer[8] << 1 | buffer[9] << 9 ) & 0x07FF;
- remote_data->state = (SBUS_NORMAL_STATE == buffer[23]) ? 1 : 0;
+ remote_data->state = (SBUS_ABNORMAL_STATE == (buffer[23] & SBUS_ABNORMAL_STATE)) ? 0 : 1;
uart_receiver.finsh_flag = 1;
}
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_uart_receiver.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_uart_receiver.h
index 948ab2f..6498dcb 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_uart_receiver.h
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_uart_receiver.h
@@ -55,8 +55,7 @@
#define REV_DATA_LEN ( 25 ) // SBUSÖ¡³¤
#define FRAME_STAR ( 0X0F ) // Ö¡Í·ÐÅÏ¢
#define FRAME_END ( 0X00 ) // ֡βÐÅÏ¢
-#define SBUS_NORMAL_STATE ( 0X03 ) // Õý³£×´Ì¬
-#define SBUS_ABNORMAL_STATE ( 0X0F ) // ʧ¿Ø×´Ì¬
+#define SBUS_ABNORMAL_STATE ( 0X04 ) // ʧ¿Ø×´Ì¬
typedef struct
{
diff --git a/Example/E05_pit_demo/libraries/zf_device/外设文件说明.txt b/Example/E05_pit_demo/libraries/zf_device/外设文件说明.txt
index 1c96965..40d9e28 100644
--- a/Example/E05_pit_demo/libraries/zf_device/外设文件说明.txt
+++ b/Example/E05_pit_demo/libraries/zf_device/外设文件说明.txt
@@ -88,6 +88,8 @@ zf_device_uart_receiver.h SUBS
zf_device_absolute_encoder.h 360¡ã λÖô«¸ÐÆ÷ ¾ø¶ÔʽÃÔÄã mini ±àÂëÆ÷ ·Ö±æÂÊ£º0.088¡ã
+zf_device_menc15a.h 15λ¸ß¾«¶È´Å±àÂëÆ÷Çý¶¯ λÖÃʽ
+
zf_device_gnss.h GPS ¼° RTK ¶¨Î»Ä£¿é ˫Ƶ¸ß¾«¶È¶¨Î»Ä£¿é ÑÇÃ×¼¶¶¨Î»
zf_device_key.h GPIO °´¼üÇý¶¯ ÓÃÓÚ¼ì²âÖ÷°å°´¼ü״̬
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_spi.c
index f817dd9..d74841c 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_spi.c
@@ -766,11 +766,11 @@ uint16 spi_read_16bit_register (spi_index_enum spi_n, const uint16 register_name
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
@@ -818,11 +818,11 @@ void spi_read_16bit_registers (spi_index_enum spi_n, const uint16 register_name,
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
diff --git a/Example/E06_exit_demo/libraries/doc/version.txt b/Example/E06_exit_demo/libraries/doc/version.txt
index f45bf81..4df6214 100644
--- a/Example/E06_exit_demo/libraries/doc/version.txt
+++ b/Example/E06_exit_demo/libraries/doc/version.txt
@@ -1,3 +1,7 @@
+V3.3.2
+ ÐÂÔözf_device_menc15a´Å±àÂëÆ÷ÍâÉèÇý¶¯
+ ¸ü¸Äuart½ÓÊÕ»ú²¿·ÖÓï¾ä
+ ÐÞÕýSPIµÄ16λͨѶ´íλÎÊÌâ
V3.3.1
ÒÆ³ýÕý½»±àÂëÆ÷µÄ¶ÏÑÔ¼ì²â
ÐÂÔöÖØÃüÃû¹¤³Ì¹¤¾ß
diff --git a/Example/E06_exit_demo/libraries/zf_common/zf_common_headfile.h b/Example/E06_exit_demo/libraries/zf_common/zf_common_headfile.h
index 3a140e3..c8f75f2 100644
--- a/Example/E06_exit_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E06_exit_demo/libraries/zf_common/zf_common_headfile.h
@@ -93,6 +93,7 @@
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
#include "zf_device_key.h"
+#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
#include "zf_device_mt9v03x.h"
#include "zf_device_oled.h"
diff --git a/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.c
index cc42e43..adfc4a3 100644
--- a/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -91,8 +91,10 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
+#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
+#endif
}break;
case SEEKFREE_ASSISTANT_WIRELESS_UART:
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_menc15a.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_menc15a.c
new file mode 100644
index 0000000..faaeba2
--- /dev/null
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_menc15a.c
@@ -0,0 +1,188 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* SCL/SPC ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SPC_PIN ºê¶¨Òå
+* SDA/DSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDI_PIN ºê¶¨Òå
+* SA0/SDO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_device_config.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_spi.h"
+
+#include "zf_device_menc15a.h"
+
+uint16 menc15a_absolute_data[2] = {0};
+
+int16 menc15a_absolute_offset_data[2] = {0};
+
+int16 menc15a_speed_data[2] = {0};
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ¼ÆËã±àÂëÆ÷Ðýתƫ²î
+// ²ÎÊý˵Ã÷ encoder_max ±àÂëÆ÷¾«¶È Ìîдʮ½øÖÆÊý¾Ý
+// ²ÎÊý˵Ã÷ now_location µ±Ç°Î»ÖÃÐÅÏ¢
+// ²ÎÊý˵Ã÷ last_location ÉÏÒ»´ÎµÄλÖÃÐÅÏ¢
+// ·µ»Ø²ÎÊý int32 ¼ÆËãµÄÆ«²îÖµ
+// ʹÓÃʾÀý magnetic_encoder_get_offset();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+static int32 magnetic_encoder_get_offset (int32 encoder_max, int32 now_location, int32 last_location)
+{
+ int32 result_data = 0;
+
+ if((encoder_max / 2) < func_abs(now_location - last_location))
+ {
+ result_data = ((encoder_max / 2) < now_location ? (now_location - encoder_max - last_location) : (now_location + encoder_max - last_location));
+ }
+ else
+ {
+ result_data = (now_location - last_location);
+ }
+
+ return result_data;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý uint16 ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ʹÓÃʾÀý menc15a_1_get_absolute_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module)
+{
+ uint16 read_data = 0;
+
+ uint16 data_last = menc15a_absolute_data[menc15a_module];
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8021);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ spi_write_8bit(MENC15A_2_SPI, 0x80);
+ spi_write_8bit(MENC15A_2_SPI, 0x21);
+ read_data = spi_read_8bit(MENC15A_2_SPI);
+ read_data = ((read_data << 8) | spi_read_8bit(MENC15A_2_SPI));
+
+ MENC15A_2_CS(1);
+ }
+
+ menc15a_absolute_data[menc15a_module] = (read_data & 0x7fff);
+
+ menc15a_absolute_offset_data[menc15a_module] = (int16)magnetic_encoder_get_offset(32768, menc15a_absolute_data[menc15a_module], data_last);
+
+ return menc15a_absolute_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ תËÙÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý int16 תËÙÊý¾Ý(ÿÃëÐýת»¡¶È rad/s)
+// ʹÓÃʾÀý menc15a_1_get_speed_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module)
+{
+ int16 read_data = 0;
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8032);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_2_SPI, 0x8032);
+
+ MENC15A_2_CS(1);
+ }
+
+ read_data = (read_data & 0x7fff);
+
+ if(read_data > 16384)
+ {
+ read_data = read_data - 32768;
+ }
+
+ menc15a_speed_data[menc15a_module] = (int16)((float)read_data * 1.917476f);
+
+ return menc15a_speed_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ³õʼ»¯ MENC15A
+// ²ÎÊý˵Ã÷ void
+// ·µ»Ø²ÎÊý uint8 1-³õʼ»¯Ê§°Ü 0-³õʼ»¯³É¹¦
+// ʹÓÃʾÀý menc15a_init();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+uint8 menc15a_init(void)
+{
+ spi_init(MENC15A_1_SPI, SPI_MODE1, MENC15A_1_SPI_SPEED, MENC15A_1_CLK_PIN, MENC15A_1_MOSI_PIN, MENC15A_1_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-1 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_1_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-1 µÄ CS¶Ë¿Ú
+
+ spi_init(MENC15A_2_SPI, SPI_MODE1, MENC15A_2_SPI_SPEED, MENC15A_2_CLK_PIN, MENC15A_2_MOSI_PIN, MENC15A_2_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-2 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_2_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-2 µÄ CS¶Ë¿Ú
+
+ return 0;
+}
+
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_menc15a.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_menc15a.h
new file mode 100644
index 0000000..068d877
--- /dev/null
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_menc15a.h
@@ -0,0 +1,102 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* CLK ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CLK_PIN ºê¶¨Òå
+* MOSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MOSI_PIN ºê¶¨Òå
+* MISO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MISO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_menc15a_h_
+#define _zf_device_menc15a_h_
+
+#include "zf_common_typedef.h"
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+#define MENC15A_1_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_1_SPI (SPI_0 ) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ºÅ
+#define MENC15A_1_CLK_PIN (SPI0_SCLK_P20_11) // ´Å±àÂëÆ÷1 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_1_MOSI_PIN (SPI0_MOSI_P20_14) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_1_MISO_PIN (SPI0_MISO_P20_12) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_1_CS_PIN (P20_13) // ´Å±àÂëÆ÷1 CS ƬѡÒý½Å
+#define MENC15A_1_CS(x) ((x) ? (gpio_high(MENC15A_1_CS_PIN)) : (gpio_low(MENC15A_1_CS_PIN)))
+
+
+#define MENC15A_2_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_2_SPI (SPI_0 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ºÅ
+#define MENC15A_2_CLK_PIN (SPI0_SCLK_P20_11 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_2_MOSI_PIN (SPI0_MOSI_P20_14 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_2_MISO_PIN (SPI0_MISO_P20_12 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_2_CS_PIN (P20_15) // ´Å±àÂëÆ÷2 CS ƬѡÒý½Å
+#define MENC15A_2_CS(x) ((x) ? (gpio_high(MENC15A_2_CS_PIN)) : (gpio_low(MENC15A_2_CS_PIN)))
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+
+// ö¾Ù´Å±àÂëÄ£¿é
+typedef enum
+{
+ menc15a_1_module,
+ menc15a_2_module,
+
+}menc15a_module_enum;
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+
+extern uint16 menc15a_absolute_data[2];
+
+extern int16 menc15a_absolute_offset_data[2];
+
+extern int16 menc15a_speed_data[2];
+
+
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module);
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module);
+
+uint8 menc15a_init(void);
+
+
+#endif
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_uart_receiver.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_uart_receiver.c
index 3ebb3bd..ade446d 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_uart_receiver.c
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_uart_receiver.c
@@ -91,7 +91,7 @@ static void uart_receiver_analysis (uart_receiver_struct *remote_data,uint8 * bu
remote_data->channel[num++] = (buffer[5] >> 1 | buffer[6] << 7 ) & 0x07FF;
remote_data->channel[num++] = (buffer[6] >> 4 | buffer[7] << 4 ) & 0x07FF;
remote_data->channel[num++] = (buffer[7] >> 7 | buffer[8] << 1 | buffer[9] << 9 ) & 0x07FF;
- remote_data->state = (SBUS_NORMAL_STATE == buffer[23]) ? 1 : 0;
+ remote_data->state = (SBUS_ABNORMAL_STATE == (buffer[23] & SBUS_ABNORMAL_STATE)) ? 0 : 1;
uart_receiver.finsh_flag = 1;
}
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_uart_receiver.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_uart_receiver.h
index 948ab2f..6498dcb 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_uart_receiver.h
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_uart_receiver.h
@@ -55,8 +55,7 @@
#define REV_DATA_LEN ( 25 ) // SBUSÖ¡³¤
#define FRAME_STAR ( 0X0F ) // Ö¡Í·ÐÅÏ¢
#define FRAME_END ( 0X00 ) // ֡βÐÅÏ¢
-#define SBUS_NORMAL_STATE ( 0X03 ) // Õý³£×´Ì¬
-#define SBUS_ABNORMAL_STATE ( 0X0F ) // ʧ¿Ø×´Ì¬
+#define SBUS_ABNORMAL_STATE ( 0X04 ) // ʧ¿Ø×´Ì¬
typedef struct
{
diff --git a/Example/E06_exit_demo/libraries/zf_device/外设文件说明.txt b/Example/E06_exit_demo/libraries/zf_device/外设文件说明.txt
index 1c96965..40d9e28 100644
--- a/Example/E06_exit_demo/libraries/zf_device/外设文件说明.txt
+++ b/Example/E06_exit_demo/libraries/zf_device/外设文件说明.txt
@@ -88,6 +88,8 @@ zf_device_uart_receiver.h SUBS
zf_device_absolute_encoder.h 360¡ã λÖô«¸ÐÆ÷ ¾ø¶ÔʽÃÔÄã mini ±àÂëÆ÷ ·Ö±æÂÊ£º0.088¡ã
+zf_device_menc15a.h 15λ¸ß¾«¶È´Å±àÂëÆ÷Çý¶¯ λÖÃʽ
+
zf_device_gnss.h GPS ¼° RTK ¶¨Î»Ä£¿é ˫Ƶ¸ß¾«¶È¶¨Î»Ä£¿é ÑÇÃ×¼¶¶¨Î»
zf_device_key.h GPIO °´¼üÇý¶¯ ÓÃÓÚ¼ì²âÖ÷°å°´¼ü״̬
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_spi.c
index f817dd9..d74841c 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_spi.c
@@ -766,11 +766,11 @@ uint16 spi_read_16bit_register (spi_index_enum spi_n, const uint16 register_name
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
@@ -818,11 +818,11 @@ void spi_read_16bit_registers (spi_index_enum spi_n, const uint16 register_name,
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
diff --git a/Example/E07_encoder_demo/libraries/doc/version.txt b/Example/E07_encoder_demo/libraries/doc/version.txt
index f45bf81..4df6214 100644
--- a/Example/E07_encoder_demo/libraries/doc/version.txt
+++ b/Example/E07_encoder_demo/libraries/doc/version.txt
@@ -1,3 +1,7 @@
+V3.3.2
+ ÐÂÔözf_device_menc15a´Å±àÂëÆ÷ÍâÉèÇý¶¯
+ ¸ü¸Äuart½ÓÊÕ»ú²¿·ÖÓï¾ä
+ ÐÞÕýSPIµÄ16λͨѶ´íλÎÊÌâ
V3.3.1
ÒÆ³ýÕý½»±àÂëÆ÷µÄ¶ÏÑÔ¼ì²â
ÐÂÔöÖØÃüÃû¹¤³Ì¹¤¾ß
diff --git a/Example/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h b/Example/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h
index 3a140e3..c8f75f2 100644
--- a/Example/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h
@@ -93,6 +93,7 @@
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
#include "zf_device_key.h"
+#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
#include "zf_device_mt9v03x.h"
#include "zf_device_oled.h"
diff --git a/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.c
index cc42e43..adfc4a3 100644
--- a/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -91,8 +91,10 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
+#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
+#endif
}break;
case SEEKFREE_ASSISTANT_WIRELESS_UART:
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_menc15a.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_menc15a.c
new file mode 100644
index 0000000..faaeba2
--- /dev/null
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_menc15a.c
@@ -0,0 +1,188 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* SCL/SPC ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SPC_PIN ºê¶¨Òå
+* SDA/DSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDI_PIN ºê¶¨Òå
+* SA0/SDO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_device_config.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_spi.h"
+
+#include "zf_device_menc15a.h"
+
+uint16 menc15a_absolute_data[2] = {0};
+
+int16 menc15a_absolute_offset_data[2] = {0};
+
+int16 menc15a_speed_data[2] = {0};
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ¼ÆËã±àÂëÆ÷Ðýתƫ²î
+// ²ÎÊý˵Ã÷ encoder_max ±àÂëÆ÷¾«¶È Ìîдʮ½øÖÆÊý¾Ý
+// ²ÎÊý˵Ã÷ now_location µ±Ç°Î»ÖÃÐÅÏ¢
+// ²ÎÊý˵Ã÷ last_location ÉÏÒ»´ÎµÄλÖÃÐÅÏ¢
+// ·µ»Ø²ÎÊý int32 ¼ÆËãµÄÆ«²îÖµ
+// ʹÓÃʾÀý magnetic_encoder_get_offset();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+static int32 magnetic_encoder_get_offset (int32 encoder_max, int32 now_location, int32 last_location)
+{
+ int32 result_data = 0;
+
+ if((encoder_max / 2) < func_abs(now_location - last_location))
+ {
+ result_data = ((encoder_max / 2) < now_location ? (now_location - encoder_max - last_location) : (now_location + encoder_max - last_location));
+ }
+ else
+ {
+ result_data = (now_location - last_location);
+ }
+
+ return result_data;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý uint16 ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ʹÓÃʾÀý menc15a_1_get_absolute_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module)
+{
+ uint16 read_data = 0;
+
+ uint16 data_last = menc15a_absolute_data[menc15a_module];
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8021);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ spi_write_8bit(MENC15A_2_SPI, 0x80);
+ spi_write_8bit(MENC15A_2_SPI, 0x21);
+ read_data = spi_read_8bit(MENC15A_2_SPI);
+ read_data = ((read_data << 8) | spi_read_8bit(MENC15A_2_SPI));
+
+ MENC15A_2_CS(1);
+ }
+
+ menc15a_absolute_data[menc15a_module] = (read_data & 0x7fff);
+
+ menc15a_absolute_offset_data[menc15a_module] = (int16)magnetic_encoder_get_offset(32768, menc15a_absolute_data[menc15a_module], data_last);
+
+ return menc15a_absolute_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ תËÙÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý int16 תËÙÊý¾Ý(ÿÃëÐýת»¡¶È rad/s)
+// ʹÓÃʾÀý menc15a_1_get_speed_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module)
+{
+ int16 read_data = 0;
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8032);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_2_SPI, 0x8032);
+
+ MENC15A_2_CS(1);
+ }
+
+ read_data = (read_data & 0x7fff);
+
+ if(read_data > 16384)
+ {
+ read_data = read_data - 32768;
+ }
+
+ menc15a_speed_data[menc15a_module] = (int16)((float)read_data * 1.917476f);
+
+ return menc15a_speed_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ³õʼ»¯ MENC15A
+// ²ÎÊý˵Ã÷ void
+// ·µ»Ø²ÎÊý uint8 1-³õʼ»¯Ê§°Ü 0-³õʼ»¯³É¹¦
+// ʹÓÃʾÀý menc15a_init();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+uint8 menc15a_init(void)
+{
+ spi_init(MENC15A_1_SPI, SPI_MODE1, MENC15A_1_SPI_SPEED, MENC15A_1_CLK_PIN, MENC15A_1_MOSI_PIN, MENC15A_1_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-1 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_1_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-1 µÄ CS¶Ë¿Ú
+
+ spi_init(MENC15A_2_SPI, SPI_MODE1, MENC15A_2_SPI_SPEED, MENC15A_2_CLK_PIN, MENC15A_2_MOSI_PIN, MENC15A_2_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-2 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_2_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-2 µÄ CS¶Ë¿Ú
+
+ return 0;
+}
+
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_menc15a.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_menc15a.h
new file mode 100644
index 0000000..068d877
--- /dev/null
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_menc15a.h
@@ -0,0 +1,102 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* CLK ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CLK_PIN ºê¶¨Òå
+* MOSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MOSI_PIN ºê¶¨Òå
+* MISO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MISO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_menc15a_h_
+#define _zf_device_menc15a_h_
+
+#include "zf_common_typedef.h"
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+#define MENC15A_1_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_1_SPI (SPI_0 ) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ºÅ
+#define MENC15A_1_CLK_PIN (SPI0_SCLK_P20_11) // ´Å±àÂëÆ÷1 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_1_MOSI_PIN (SPI0_MOSI_P20_14) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_1_MISO_PIN (SPI0_MISO_P20_12) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_1_CS_PIN (P20_13) // ´Å±àÂëÆ÷1 CS ƬѡÒý½Å
+#define MENC15A_1_CS(x) ((x) ? (gpio_high(MENC15A_1_CS_PIN)) : (gpio_low(MENC15A_1_CS_PIN)))
+
+
+#define MENC15A_2_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_2_SPI (SPI_0 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ºÅ
+#define MENC15A_2_CLK_PIN (SPI0_SCLK_P20_11 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_2_MOSI_PIN (SPI0_MOSI_P20_14 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_2_MISO_PIN (SPI0_MISO_P20_12 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_2_CS_PIN (P20_15) // ´Å±àÂëÆ÷2 CS ƬѡÒý½Å
+#define MENC15A_2_CS(x) ((x) ? (gpio_high(MENC15A_2_CS_PIN)) : (gpio_low(MENC15A_2_CS_PIN)))
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+
+// ö¾Ù´Å±àÂëÄ£¿é
+typedef enum
+{
+ menc15a_1_module,
+ menc15a_2_module,
+
+}menc15a_module_enum;
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+
+extern uint16 menc15a_absolute_data[2];
+
+extern int16 menc15a_absolute_offset_data[2];
+
+extern int16 menc15a_speed_data[2];
+
+
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module);
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module);
+
+uint8 menc15a_init(void);
+
+
+#endif
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_uart_receiver.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_uart_receiver.c
index 3ebb3bd..ade446d 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_uart_receiver.c
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_uart_receiver.c
@@ -91,7 +91,7 @@ static void uart_receiver_analysis (uart_receiver_struct *remote_data,uint8 * bu
remote_data->channel[num++] = (buffer[5] >> 1 | buffer[6] << 7 ) & 0x07FF;
remote_data->channel[num++] = (buffer[6] >> 4 | buffer[7] << 4 ) & 0x07FF;
remote_data->channel[num++] = (buffer[7] >> 7 | buffer[8] << 1 | buffer[9] << 9 ) & 0x07FF;
- remote_data->state = (SBUS_NORMAL_STATE == buffer[23]) ? 1 : 0;
+ remote_data->state = (SBUS_ABNORMAL_STATE == (buffer[23] & SBUS_ABNORMAL_STATE)) ? 0 : 1;
uart_receiver.finsh_flag = 1;
}
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_uart_receiver.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_uart_receiver.h
index 948ab2f..6498dcb 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_uart_receiver.h
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_uart_receiver.h
@@ -55,8 +55,7 @@
#define REV_DATA_LEN ( 25 ) // SBUSÖ¡³¤
#define FRAME_STAR ( 0X0F ) // Ö¡Í·ÐÅÏ¢
#define FRAME_END ( 0X00 ) // ֡βÐÅÏ¢
-#define SBUS_NORMAL_STATE ( 0X03 ) // Õý³£×´Ì¬
-#define SBUS_ABNORMAL_STATE ( 0X0F ) // ʧ¿Ø×´Ì¬
+#define SBUS_ABNORMAL_STATE ( 0X04 ) // ʧ¿Ø×´Ì¬
typedef struct
{
diff --git a/Example/E07_encoder_demo/libraries/zf_device/外设文件说明.txt b/Example/E07_encoder_demo/libraries/zf_device/外设文件说明.txt
index 1c96965..40d9e28 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/外设文件说明.txt
+++ b/Example/E07_encoder_demo/libraries/zf_device/外设文件说明.txt
@@ -88,6 +88,8 @@ zf_device_uart_receiver.h SUBS
zf_device_absolute_encoder.h 360¡ã λÖô«¸ÐÆ÷ ¾ø¶ÔʽÃÔÄã mini ±àÂëÆ÷ ·Ö±æÂÊ£º0.088¡ã
+zf_device_menc15a.h 15λ¸ß¾«¶È´Å±àÂëÆ÷Çý¶¯ λÖÃʽ
+
zf_device_gnss.h GPS ¼° RTK ¶¨Î»Ä£¿é ˫Ƶ¸ß¾«¶È¶¨Î»Ä£¿é ÑÇÃ×¼¶¶¨Î»
zf_device_key.h GPIO °´¼üÇý¶¯ ÓÃÓÚ¼ì²âÖ÷°å°´¼ü״̬
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_spi.c
index f817dd9..d74841c 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_spi.c
@@ -766,11 +766,11 @@ uint16 spi_read_16bit_register (spi_index_enum spi_n, const uint16 register_name
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
@@ -818,11 +818,11 @@ void spi_read_16bit_registers (spi_index_enum spi_n, const uint16 register_name,
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
diff --git a/Example/E08_eeprom_demo/libraries/doc/version.txt b/Example/E08_eeprom_demo/libraries/doc/version.txt
index f45bf81..4df6214 100644
--- a/Example/E08_eeprom_demo/libraries/doc/version.txt
+++ b/Example/E08_eeprom_demo/libraries/doc/version.txt
@@ -1,3 +1,7 @@
+V3.3.2
+ ÐÂÔözf_device_menc15a´Å±àÂëÆ÷ÍâÉèÇý¶¯
+ ¸ü¸Äuart½ÓÊÕ»ú²¿·ÖÓï¾ä
+ ÐÞÕýSPIµÄ16λͨѶ´íλÎÊÌâ
V3.3.1
ÒÆ³ýÕý½»±àÂëÆ÷µÄ¶ÏÑÔ¼ì²â
ÐÂÔöÖØÃüÃû¹¤³Ì¹¤¾ß
diff --git a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h
index 3a140e3..c8f75f2 100644
--- a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h
@@ -93,6 +93,7 @@
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
#include "zf_device_key.h"
+#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
#include "zf_device_mt9v03x.h"
#include "zf_device_oled.h"
diff --git a/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.c
index cc42e43..adfc4a3 100644
--- a/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -91,8 +91,10 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
+#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
+#endif
}break;
case SEEKFREE_ASSISTANT_WIRELESS_UART:
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_menc15a.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_menc15a.c
new file mode 100644
index 0000000..faaeba2
--- /dev/null
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_menc15a.c
@@ -0,0 +1,188 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* SCL/SPC ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SPC_PIN ºê¶¨Òå
+* SDA/DSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDI_PIN ºê¶¨Òå
+* SA0/SDO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_device_config.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_spi.h"
+
+#include "zf_device_menc15a.h"
+
+uint16 menc15a_absolute_data[2] = {0};
+
+int16 menc15a_absolute_offset_data[2] = {0};
+
+int16 menc15a_speed_data[2] = {0};
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ¼ÆËã±àÂëÆ÷Ðýתƫ²î
+// ²ÎÊý˵Ã÷ encoder_max ±àÂëÆ÷¾«¶È Ìîдʮ½øÖÆÊý¾Ý
+// ²ÎÊý˵Ã÷ now_location µ±Ç°Î»ÖÃÐÅÏ¢
+// ²ÎÊý˵Ã÷ last_location ÉÏÒ»´ÎµÄλÖÃÐÅÏ¢
+// ·µ»Ø²ÎÊý int32 ¼ÆËãµÄÆ«²îÖµ
+// ʹÓÃʾÀý magnetic_encoder_get_offset();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+static int32 magnetic_encoder_get_offset (int32 encoder_max, int32 now_location, int32 last_location)
+{
+ int32 result_data = 0;
+
+ if((encoder_max / 2) < func_abs(now_location - last_location))
+ {
+ result_data = ((encoder_max / 2) < now_location ? (now_location - encoder_max - last_location) : (now_location + encoder_max - last_location));
+ }
+ else
+ {
+ result_data = (now_location - last_location);
+ }
+
+ return result_data;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý uint16 ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ʹÓÃʾÀý menc15a_1_get_absolute_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module)
+{
+ uint16 read_data = 0;
+
+ uint16 data_last = menc15a_absolute_data[menc15a_module];
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8021);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ spi_write_8bit(MENC15A_2_SPI, 0x80);
+ spi_write_8bit(MENC15A_2_SPI, 0x21);
+ read_data = spi_read_8bit(MENC15A_2_SPI);
+ read_data = ((read_data << 8) | spi_read_8bit(MENC15A_2_SPI));
+
+ MENC15A_2_CS(1);
+ }
+
+ menc15a_absolute_data[menc15a_module] = (read_data & 0x7fff);
+
+ menc15a_absolute_offset_data[menc15a_module] = (int16)magnetic_encoder_get_offset(32768, menc15a_absolute_data[menc15a_module], data_last);
+
+ return menc15a_absolute_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ תËÙÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý int16 תËÙÊý¾Ý(ÿÃëÐýת»¡¶È rad/s)
+// ʹÓÃʾÀý menc15a_1_get_speed_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module)
+{
+ int16 read_data = 0;
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8032);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_2_SPI, 0x8032);
+
+ MENC15A_2_CS(1);
+ }
+
+ read_data = (read_data & 0x7fff);
+
+ if(read_data > 16384)
+ {
+ read_data = read_data - 32768;
+ }
+
+ menc15a_speed_data[menc15a_module] = (int16)((float)read_data * 1.917476f);
+
+ return menc15a_speed_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ³õʼ»¯ MENC15A
+// ²ÎÊý˵Ã÷ void
+// ·µ»Ø²ÎÊý uint8 1-³õʼ»¯Ê§°Ü 0-³õʼ»¯³É¹¦
+// ʹÓÃʾÀý menc15a_init();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+uint8 menc15a_init(void)
+{
+ spi_init(MENC15A_1_SPI, SPI_MODE1, MENC15A_1_SPI_SPEED, MENC15A_1_CLK_PIN, MENC15A_1_MOSI_PIN, MENC15A_1_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-1 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_1_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-1 µÄ CS¶Ë¿Ú
+
+ spi_init(MENC15A_2_SPI, SPI_MODE1, MENC15A_2_SPI_SPEED, MENC15A_2_CLK_PIN, MENC15A_2_MOSI_PIN, MENC15A_2_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-2 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_2_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-2 µÄ CS¶Ë¿Ú
+
+ return 0;
+}
+
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_menc15a.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_menc15a.h
new file mode 100644
index 0000000..068d877
--- /dev/null
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_menc15a.h
@@ -0,0 +1,102 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* CLK ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CLK_PIN ºê¶¨Òå
+* MOSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MOSI_PIN ºê¶¨Òå
+* MISO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MISO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_menc15a_h_
+#define _zf_device_menc15a_h_
+
+#include "zf_common_typedef.h"
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+#define MENC15A_1_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_1_SPI (SPI_0 ) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ºÅ
+#define MENC15A_1_CLK_PIN (SPI0_SCLK_P20_11) // ´Å±àÂëÆ÷1 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_1_MOSI_PIN (SPI0_MOSI_P20_14) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_1_MISO_PIN (SPI0_MISO_P20_12) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_1_CS_PIN (P20_13) // ´Å±àÂëÆ÷1 CS ƬѡÒý½Å
+#define MENC15A_1_CS(x) ((x) ? (gpio_high(MENC15A_1_CS_PIN)) : (gpio_low(MENC15A_1_CS_PIN)))
+
+
+#define MENC15A_2_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_2_SPI (SPI_0 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ºÅ
+#define MENC15A_2_CLK_PIN (SPI0_SCLK_P20_11 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_2_MOSI_PIN (SPI0_MOSI_P20_14 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_2_MISO_PIN (SPI0_MISO_P20_12 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_2_CS_PIN (P20_15) // ´Å±àÂëÆ÷2 CS ƬѡÒý½Å
+#define MENC15A_2_CS(x) ((x) ? (gpio_high(MENC15A_2_CS_PIN)) : (gpio_low(MENC15A_2_CS_PIN)))
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+
+// ö¾Ù´Å±àÂëÄ£¿é
+typedef enum
+{
+ menc15a_1_module,
+ menc15a_2_module,
+
+}menc15a_module_enum;
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+
+extern uint16 menc15a_absolute_data[2];
+
+extern int16 menc15a_absolute_offset_data[2];
+
+extern int16 menc15a_speed_data[2];
+
+
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module);
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module);
+
+uint8 menc15a_init(void);
+
+
+#endif
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_uart_receiver.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_uart_receiver.c
index 3ebb3bd..ade446d 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_uart_receiver.c
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_uart_receiver.c
@@ -91,7 +91,7 @@ static void uart_receiver_analysis (uart_receiver_struct *remote_data,uint8 * bu
remote_data->channel[num++] = (buffer[5] >> 1 | buffer[6] << 7 ) & 0x07FF;
remote_data->channel[num++] = (buffer[6] >> 4 | buffer[7] << 4 ) & 0x07FF;
remote_data->channel[num++] = (buffer[7] >> 7 | buffer[8] << 1 | buffer[9] << 9 ) & 0x07FF;
- remote_data->state = (SBUS_NORMAL_STATE == buffer[23]) ? 1 : 0;
+ remote_data->state = (SBUS_ABNORMAL_STATE == (buffer[23] & SBUS_ABNORMAL_STATE)) ? 0 : 1;
uart_receiver.finsh_flag = 1;
}
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_uart_receiver.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_uart_receiver.h
index 948ab2f..6498dcb 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_uart_receiver.h
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_uart_receiver.h
@@ -55,8 +55,7 @@
#define REV_DATA_LEN ( 25 ) // SBUSÖ¡³¤
#define FRAME_STAR ( 0X0F ) // Ö¡Í·ÐÅÏ¢
#define FRAME_END ( 0X00 ) // ֡βÐÅÏ¢
-#define SBUS_NORMAL_STATE ( 0X03 ) // Õý³£×´Ì¬
-#define SBUS_ABNORMAL_STATE ( 0X0F ) // ʧ¿Ø×´Ì¬
+#define SBUS_ABNORMAL_STATE ( 0X04 ) // ʧ¿Ø×´Ì¬
typedef struct
{
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/外设文件说明.txt b/Example/E08_eeprom_demo/libraries/zf_device/外设文件说明.txt
index 1c96965..40d9e28 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/外设文件说明.txt
+++ b/Example/E08_eeprom_demo/libraries/zf_device/外设文件说明.txt
@@ -88,6 +88,8 @@ zf_device_uart_receiver.h SUBS
zf_device_absolute_encoder.h 360¡ã λÖô«¸ÐÆ÷ ¾ø¶ÔʽÃÔÄã mini ±àÂëÆ÷ ·Ö±æÂÊ£º0.088¡ã
+zf_device_menc15a.h 15λ¸ß¾«¶È´Å±àÂëÆ÷Çý¶¯ λÖÃʽ
+
zf_device_gnss.h GPS ¼° RTK ¶¨Î»Ä£¿é ˫Ƶ¸ß¾«¶È¶¨Î»Ä£¿é ÑÇÃ×¼¶¶¨Î»
zf_device_key.h GPIO °´¼üÇý¶¯ ÓÃÓÚ¼ì²âÖ÷°å°´¼ü״̬
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_spi.c
index f817dd9..d74841c 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_spi.c
@@ -766,11 +766,11 @@ uint16 spi_read_16bit_register (spi_index_enum spi_n, const uint16 register_name
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
@@ -818,11 +818,11 @@ void spi_read_16bit_registers (spi_index_enum spi_n, const uint16 register_name,
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
diff --git a/Example/E09_timer_demo/libraries/doc/version.txt b/Example/E09_timer_demo/libraries/doc/version.txt
index f45bf81..4df6214 100644
--- a/Example/E09_timer_demo/libraries/doc/version.txt
+++ b/Example/E09_timer_demo/libraries/doc/version.txt
@@ -1,3 +1,7 @@
+V3.3.2
+ ÐÂÔözf_device_menc15a´Å±àÂëÆ÷ÍâÉèÇý¶¯
+ ¸ü¸Äuart½ÓÊÕ»ú²¿·ÖÓï¾ä
+ ÐÞÕýSPIµÄ16λͨѶ´íλÎÊÌâ
V3.3.1
ÒÆ³ýÕý½»±àÂëÆ÷µÄ¶ÏÑÔ¼ì²â
ÐÂÔöÖØÃüÃû¹¤³Ì¹¤¾ß
diff --git a/Example/E09_timer_demo/libraries/zf_common/zf_common_headfile.h b/Example/E09_timer_demo/libraries/zf_common/zf_common_headfile.h
index 3a140e3..c8f75f2 100644
--- a/Example/E09_timer_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E09_timer_demo/libraries/zf_common/zf_common_headfile.h
@@ -93,6 +93,7 @@
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
#include "zf_device_key.h"
+#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
#include "zf_device_mt9v03x.h"
#include "zf_device_oled.h"
diff --git a/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.c
index cc42e43..adfc4a3 100644
--- a/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -91,8 +91,10 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
+#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
+#endif
}break;
case SEEKFREE_ASSISTANT_WIRELESS_UART:
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_menc15a.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_menc15a.c
new file mode 100644
index 0000000..faaeba2
--- /dev/null
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_menc15a.c
@@ -0,0 +1,188 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* SCL/SPC ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SPC_PIN ºê¶¨Òå
+* SDA/DSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDI_PIN ºê¶¨Òå
+* SA0/SDO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_device_config.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_spi.h"
+
+#include "zf_device_menc15a.h"
+
+uint16 menc15a_absolute_data[2] = {0};
+
+int16 menc15a_absolute_offset_data[2] = {0};
+
+int16 menc15a_speed_data[2] = {0};
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ¼ÆËã±àÂëÆ÷Ðýתƫ²î
+// ²ÎÊý˵Ã÷ encoder_max ±àÂëÆ÷¾«¶È Ìîдʮ½øÖÆÊý¾Ý
+// ²ÎÊý˵Ã÷ now_location µ±Ç°Î»ÖÃÐÅÏ¢
+// ²ÎÊý˵Ã÷ last_location ÉÏÒ»´ÎµÄλÖÃÐÅÏ¢
+// ·µ»Ø²ÎÊý int32 ¼ÆËãµÄÆ«²îÖµ
+// ʹÓÃʾÀý magnetic_encoder_get_offset();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+static int32 magnetic_encoder_get_offset (int32 encoder_max, int32 now_location, int32 last_location)
+{
+ int32 result_data = 0;
+
+ if((encoder_max / 2) < func_abs(now_location - last_location))
+ {
+ result_data = ((encoder_max / 2) < now_location ? (now_location - encoder_max - last_location) : (now_location + encoder_max - last_location));
+ }
+ else
+ {
+ result_data = (now_location - last_location);
+ }
+
+ return result_data;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý uint16 ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ʹÓÃʾÀý menc15a_1_get_absolute_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module)
+{
+ uint16 read_data = 0;
+
+ uint16 data_last = menc15a_absolute_data[menc15a_module];
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8021);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ spi_write_8bit(MENC15A_2_SPI, 0x80);
+ spi_write_8bit(MENC15A_2_SPI, 0x21);
+ read_data = spi_read_8bit(MENC15A_2_SPI);
+ read_data = ((read_data << 8) | spi_read_8bit(MENC15A_2_SPI));
+
+ MENC15A_2_CS(1);
+ }
+
+ menc15a_absolute_data[menc15a_module] = (read_data & 0x7fff);
+
+ menc15a_absolute_offset_data[menc15a_module] = (int16)magnetic_encoder_get_offset(32768, menc15a_absolute_data[menc15a_module], data_last);
+
+ return menc15a_absolute_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ תËÙÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý int16 תËÙÊý¾Ý(ÿÃëÐýת»¡¶È rad/s)
+// ʹÓÃʾÀý menc15a_1_get_speed_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module)
+{
+ int16 read_data = 0;
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8032);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_2_SPI, 0x8032);
+
+ MENC15A_2_CS(1);
+ }
+
+ read_data = (read_data & 0x7fff);
+
+ if(read_data > 16384)
+ {
+ read_data = read_data - 32768;
+ }
+
+ menc15a_speed_data[menc15a_module] = (int16)((float)read_data * 1.917476f);
+
+ return menc15a_speed_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ³õʼ»¯ MENC15A
+// ²ÎÊý˵Ã÷ void
+// ·µ»Ø²ÎÊý uint8 1-³õʼ»¯Ê§°Ü 0-³õʼ»¯³É¹¦
+// ʹÓÃʾÀý menc15a_init();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+uint8 menc15a_init(void)
+{
+ spi_init(MENC15A_1_SPI, SPI_MODE1, MENC15A_1_SPI_SPEED, MENC15A_1_CLK_PIN, MENC15A_1_MOSI_PIN, MENC15A_1_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-1 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_1_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-1 µÄ CS¶Ë¿Ú
+
+ spi_init(MENC15A_2_SPI, SPI_MODE1, MENC15A_2_SPI_SPEED, MENC15A_2_CLK_PIN, MENC15A_2_MOSI_PIN, MENC15A_2_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-2 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_2_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-2 µÄ CS¶Ë¿Ú
+
+ return 0;
+}
+
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_menc15a.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_menc15a.h
new file mode 100644
index 0000000..068d877
--- /dev/null
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_menc15a.h
@@ -0,0 +1,102 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* CLK ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CLK_PIN ºê¶¨Òå
+* MOSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MOSI_PIN ºê¶¨Òå
+* MISO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MISO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_menc15a_h_
+#define _zf_device_menc15a_h_
+
+#include "zf_common_typedef.h"
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+#define MENC15A_1_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_1_SPI (SPI_0 ) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ºÅ
+#define MENC15A_1_CLK_PIN (SPI0_SCLK_P20_11) // ´Å±àÂëÆ÷1 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_1_MOSI_PIN (SPI0_MOSI_P20_14) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_1_MISO_PIN (SPI0_MISO_P20_12) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_1_CS_PIN (P20_13) // ´Å±àÂëÆ÷1 CS ƬѡÒý½Å
+#define MENC15A_1_CS(x) ((x) ? (gpio_high(MENC15A_1_CS_PIN)) : (gpio_low(MENC15A_1_CS_PIN)))
+
+
+#define MENC15A_2_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_2_SPI (SPI_0 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ºÅ
+#define MENC15A_2_CLK_PIN (SPI0_SCLK_P20_11 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_2_MOSI_PIN (SPI0_MOSI_P20_14 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_2_MISO_PIN (SPI0_MISO_P20_12 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_2_CS_PIN (P20_15) // ´Å±àÂëÆ÷2 CS ƬѡÒý½Å
+#define MENC15A_2_CS(x) ((x) ? (gpio_high(MENC15A_2_CS_PIN)) : (gpio_low(MENC15A_2_CS_PIN)))
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+
+// ö¾Ù´Å±àÂëÄ£¿é
+typedef enum
+{
+ menc15a_1_module,
+ menc15a_2_module,
+
+}menc15a_module_enum;
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+
+extern uint16 menc15a_absolute_data[2];
+
+extern int16 menc15a_absolute_offset_data[2];
+
+extern int16 menc15a_speed_data[2];
+
+
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module);
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module);
+
+uint8 menc15a_init(void);
+
+
+#endif
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_uart_receiver.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_uart_receiver.c
index 3ebb3bd..ade446d 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_uart_receiver.c
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_uart_receiver.c
@@ -91,7 +91,7 @@ static void uart_receiver_analysis (uart_receiver_struct *remote_data,uint8 * bu
remote_data->channel[num++] = (buffer[5] >> 1 | buffer[6] << 7 ) & 0x07FF;
remote_data->channel[num++] = (buffer[6] >> 4 | buffer[7] << 4 ) & 0x07FF;
remote_data->channel[num++] = (buffer[7] >> 7 | buffer[8] << 1 | buffer[9] << 9 ) & 0x07FF;
- remote_data->state = (SBUS_NORMAL_STATE == buffer[23]) ? 1 : 0;
+ remote_data->state = (SBUS_ABNORMAL_STATE == (buffer[23] & SBUS_ABNORMAL_STATE)) ? 0 : 1;
uart_receiver.finsh_flag = 1;
}
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_uart_receiver.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_uart_receiver.h
index 948ab2f..6498dcb 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_uart_receiver.h
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_uart_receiver.h
@@ -55,8 +55,7 @@
#define REV_DATA_LEN ( 25 ) // SBUSÖ¡³¤
#define FRAME_STAR ( 0X0F ) // Ö¡Í·ÐÅÏ¢
#define FRAME_END ( 0X00 ) // ֡βÐÅÏ¢
-#define SBUS_NORMAL_STATE ( 0X03 ) // Õý³£×´Ì¬
-#define SBUS_ABNORMAL_STATE ( 0X0F ) // ʧ¿Ø×´Ì¬
+#define SBUS_ABNORMAL_STATE ( 0X04 ) // ʧ¿Ø×´Ì¬
typedef struct
{
diff --git a/Example/E09_timer_demo/libraries/zf_device/外设文件说明.txt b/Example/E09_timer_demo/libraries/zf_device/外设文件说明.txt
index 1c96965..40d9e28 100644
--- a/Example/E09_timer_demo/libraries/zf_device/外设文件说明.txt
+++ b/Example/E09_timer_demo/libraries/zf_device/外设文件说明.txt
@@ -88,6 +88,8 @@ zf_device_uart_receiver.h SUBS
zf_device_absolute_encoder.h 360¡ã λÖô«¸ÐÆ÷ ¾ø¶ÔʽÃÔÄã mini ±àÂëÆ÷ ·Ö±æÂÊ£º0.088¡ã
+zf_device_menc15a.h 15λ¸ß¾«¶È´Å±àÂëÆ÷Çý¶¯ λÖÃʽ
+
zf_device_gnss.h GPS ¼° RTK ¶¨Î»Ä£¿é ˫Ƶ¸ß¾«¶È¶¨Î»Ä£¿é ÑÇÃ×¼¶¶¨Î»
zf_device_key.h GPIO °´¼üÇý¶¯ ÓÃÓÚ¼ì²âÖ÷°å°´¼ü״̬
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_spi.c
index f817dd9..d74841c 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_spi.c
@@ -766,11 +766,11 @@ uint16 spi_read_16bit_register (spi_index_enum spi_n, const uint16 register_name
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
@@ -818,11 +818,11 @@ void spi_read_16bit_registers (spi_index_enum spi_n, const uint16 register_name,
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
diff --git a/Example/E10_printf_debug_log_demo/libraries/doc/version.txt b/Example/E10_printf_debug_log_demo/libraries/doc/version.txt
index f45bf81..4df6214 100644
--- a/Example/E10_printf_debug_log_demo/libraries/doc/version.txt
+++ b/Example/E10_printf_debug_log_demo/libraries/doc/version.txt
@@ -1,3 +1,7 @@
+V3.3.2
+ ÐÂÔözf_device_menc15a´Å±àÂëÆ÷ÍâÉèÇý¶¯
+ ¸ü¸Äuart½ÓÊÕ»ú²¿·ÖÓï¾ä
+ ÐÞÕýSPIµÄ16λͨѶ´íλÎÊÌâ
V3.3.1
ÒÆ³ýÕý½»±àÂëÆ÷µÄ¶ÏÑÔ¼ì²â
ÐÂÔöÖØÃüÃû¹¤³Ì¹¤¾ß
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h
index 3a140e3..c8f75f2 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h
@@ -93,6 +93,7 @@
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
#include "zf_device_key.h"
+#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
#include "zf_device_mt9v03x.h"
#include "zf_device_oled.h"
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.c
index cc42e43..adfc4a3 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -91,8 +91,10 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
+#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
+#endif
}break;
case SEEKFREE_ASSISTANT_WIRELESS_UART:
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_menc15a.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_menc15a.c
new file mode 100644
index 0000000..faaeba2
--- /dev/null
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_menc15a.c
@@ -0,0 +1,188 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* SCL/SPC ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SPC_PIN ºê¶¨Òå
+* SDA/DSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDI_PIN ºê¶¨Òå
+* SA0/SDO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_device_config.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_spi.h"
+
+#include "zf_device_menc15a.h"
+
+uint16 menc15a_absolute_data[2] = {0};
+
+int16 menc15a_absolute_offset_data[2] = {0};
+
+int16 menc15a_speed_data[2] = {0};
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ¼ÆËã±àÂëÆ÷Ðýתƫ²î
+// ²ÎÊý˵Ã÷ encoder_max ±àÂëÆ÷¾«¶È Ìîдʮ½øÖÆÊý¾Ý
+// ²ÎÊý˵Ã÷ now_location µ±Ç°Î»ÖÃÐÅÏ¢
+// ²ÎÊý˵Ã÷ last_location ÉÏÒ»´ÎµÄλÖÃÐÅÏ¢
+// ·µ»Ø²ÎÊý int32 ¼ÆËãµÄÆ«²îÖµ
+// ʹÓÃʾÀý magnetic_encoder_get_offset();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+static int32 magnetic_encoder_get_offset (int32 encoder_max, int32 now_location, int32 last_location)
+{
+ int32 result_data = 0;
+
+ if((encoder_max / 2) < func_abs(now_location - last_location))
+ {
+ result_data = ((encoder_max / 2) < now_location ? (now_location - encoder_max - last_location) : (now_location + encoder_max - last_location));
+ }
+ else
+ {
+ result_data = (now_location - last_location);
+ }
+
+ return result_data;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý uint16 ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ʹÓÃʾÀý menc15a_1_get_absolute_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module)
+{
+ uint16 read_data = 0;
+
+ uint16 data_last = menc15a_absolute_data[menc15a_module];
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8021);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ spi_write_8bit(MENC15A_2_SPI, 0x80);
+ spi_write_8bit(MENC15A_2_SPI, 0x21);
+ read_data = spi_read_8bit(MENC15A_2_SPI);
+ read_data = ((read_data << 8) | spi_read_8bit(MENC15A_2_SPI));
+
+ MENC15A_2_CS(1);
+ }
+
+ menc15a_absolute_data[menc15a_module] = (read_data & 0x7fff);
+
+ menc15a_absolute_offset_data[menc15a_module] = (int16)magnetic_encoder_get_offset(32768, menc15a_absolute_data[menc15a_module], data_last);
+
+ return menc15a_absolute_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ תËÙÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý int16 תËÙÊý¾Ý(ÿÃëÐýת»¡¶È rad/s)
+// ʹÓÃʾÀý menc15a_1_get_speed_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module)
+{
+ int16 read_data = 0;
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8032);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_2_SPI, 0x8032);
+
+ MENC15A_2_CS(1);
+ }
+
+ read_data = (read_data & 0x7fff);
+
+ if(read_data > 16384)
+ {
+ read_data = read_data - 32768;
+ }
+
+ menc15a_speed_data[menc15a_module] = (int16)((float)read_data * 1.917476f);
+
+ return menc15a_speed_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ³õʼ»¯ MENC15A
+// ²ÎÊý˵Ã÷ void
+// ·µ»Ø²ÎÊý uint8 1-³õʼ»¯Ê§°Ü 0-³õʼ»¯³É¹¦
+// ʹÓÃʾÀý menc15a_init();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+uint8 menc15a_init(void)
+{
+ spi_init(MENC15A_1_SPI, SPI_MODE1, MENC15A_1_SPI_SPEED, MENC15A_1_CLK_PIN, MENC15A_1_MOSI_PIN, MENC15A_1_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-1 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_1_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-1 µÄ CS¶Ë¿Ú
+
+ spi_init(MENC15A_2_SPI, SPI_MODE1, MENC15A_2_SPI_SPEED, MENC15A_2_CLK_PIN, MENC15A_2_MOSI_PIN, MENC15A_2_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-2 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_2_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-2 µÄ CS¶Ë¿Ú
+
+ return 0;
+}
+
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_menc15a.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_menc15a.h
new file mode 100644
index 0000000..068d877
--- /dev/null
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_menc15a.h
@@ -0,0 +1,102 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* CLK ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CLK_PIN ºê¶¨Òå
+* MOSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MOSI_PIN ºê¶¨Òå
+* MISO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MISO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_menc15a_h_
+#define _zf_device_menc15a_h_
+
+#include "zf_common_typedef.h"
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+#define MENC15A_1_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_1_SPI (SPI_0 ) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ºÅ
+#define MENC15A_1_CLK_PIN (SPI0_SCLK_P20_11) // ´Å±àÂëÆ÷1 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_1_MOSI_PIN (SPI0_MOSI_P20_14) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_1_MISO_PIN (SPI0_MISO_P20_12) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_1_CS_PIN (P20_13) // ´Å±àÂëÆ÷1 CS ƬѡÒý½Å
+#define MENC15A_1_CS(x) ((x) ? (gpio_high(MENC15A_1_CS_PIN)) : (gpio_low(MENC15A_1_CS_PIN)))
+
+
+#define MENC15A_2_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_2_SPI (SPI_0 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ºÅ
+#define MENC15A_2_CLK_PIN (SPI0_SCLK_P20_11 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_2_MOSI_PIN (SPI0_MOSI_P20_14 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_2_MISO_PIN (SPI0_MISO_P20_12 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_2_CS_PIN (P20_15) // ´Å±àÂëÆ÷2 CS ƬѡÒý½Å
+#define MENC15A_2_CS(x) ((x) ? (gpio_high(MENC15A_2_CS_PIN)) : (gpio_low(MENC15A_2_CS_PIN)))
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+
+// ö¾Ù´Å±àÂëÄ£¿é
+typedef enum
+{
+ menc15a_1_module,
+ menc15a_2_module,
+
+}menc15a_module_enum;
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+
+extern uint16 menc15a_absolute_data[2];
+
+extern int16 menc15a_absolute_offset_data[2];
+
+extern int16 menc15a_speed_data[2];
+
+
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module);
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module);
+
+uint8 menc15a_init(void);
+
+
+#endif
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_uart_receiver.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_uart_receiver.c
index 3ebb3bd..ade446d 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_uart_receiver.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_uart_receiver.c
@@ -91,7 +91,7 @@ static void uart_receiver_analysis (uart_receiver_struct *remote_data,uint8 * bu
remote_data->channel[num++] = (buffer[5] >> 1 | buffer[6] << 7 ) & 0x07FF;
remote_data->channel[num++] = (buffer[6] >> 4 | buffer[7] << 4 ) & 0x07FF;
remote_data->channel[num++] = (buffer[7] >> 7 | buffer[8] << 1 | buffer[9] << 9 ) & 0x07FF;
- remote_data->state = (SBUS_NORMAL_STATE == buffer[23]) ? 1 : 0;
+ remote_data->state = (SBUS_ABNORMAL_STATE == (buffer[23] & SBUS_ABNORMAL_STATE)) ? 0 : 1;
uart_receiver.finsh_flag = 1;
}
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_uart_receiver.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_uart_receiver.h
index 948ab2f..6498dcb 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_uart_receiver.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_uart_receiver.h
@@ -55,8 +55,7 @@
#define REV_DATA_LEN ( 25 ) // SBUSÖ¡³¤
#define FRAME_STAR ( 0X0F ) // Ö¡Í·ÐÅÏ¢
#define FRAME_END ( 0X00 ) // ֡βÐÅÏ¢
-#define SBUS_NORMAL_STATE ( 0X03 ) // Õý³£×´Ì¬
-#define SBUS_ABNORMAL_STATE ( 0X0F ) // ʧ¿Ø×´Ì¬
+#define SBUS_ABNORMAL_STATE ( 0X04 ) // ʧ¿Ø×´Ì¬
typedef struct
{
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/外设文件说明.txt b/Example/E10_printf_debug_log_demo/libraries/zf_device/外设文件说明.txt
index 1c96965..40d9e28 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/外设文件说明.txt
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/外设文件说明.txt
@@ -88,6 +88,8 @@ zf_device_uart_receiver.h SUBS
zf_device_absolute_encoder.h 360¡ã λÖô«¸ÐÆ÷ ¾ø¶ÔʽÃÔÄã mini ±àÂëÆ÷ ·Ö±æÂÊ£º0.088¡ã
+zf_device_menc15a.h 15λ¸ß¾«¶È´Å±àÂëÆ÷Çý¶¯ λÖÃʽ
+
zf_device_gnss.h GPS ¼° RTK ¶¨Î»Ä£¿é ˫Ƶ¸ß¾«¶È¶¨Î»Ä£¿é ÑÇÃ×¼¶¶¨Î»
zf_device_key.h GPIO °´¼üÇý¶¯ ÓÃÓÚ¼ì²âÖ÷°å°´¼ü״̬
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_spi.c
index f817dd9..d74841c 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_spi.c
@@ -766,11 +766,11 @@ uint16 spi_read_16bit_register (spi_index_enum spi_n, const uint16 register_name
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
@@ -818,11 +818,11 @@ void spi_read_16bit_registers (spi_index_enum spi_n, const uint16 register_name,
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/doc/version.txt b/Example/E11_interrupt_priority_set_demo/libraries/doc/version.txt
index f45bf81..4df6214 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/doc/version.txt
+++ b/Example/E11_interrupt_priority_set_demo/libraries/doc/version.txt
@@ -1,3 +1,7 @@
+V3.3.2
+ ÐÂÔözf_device_menc15a´Å±àÂëÆ÷ÍâÉèÇý¶¯
+ ¸ü¸Äuart½ÓÊÕ»ú²¿·ÖÓï¾ä
+ ÐÞÕýSPIµÄ16λͨѶ´íλÎÊÌâ
V3.3.1
ÒÆ³ýÕý½»±àÂëÆ÷µÄ¶ÏÑÔ¼ì²â
ÐÂÔöÖØÃüÃû¹¤³Ì¹¤¾ß
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h
index 3a140e3..c8f75f2 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h
@@ -93,6 +93,7 @@
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
#include "zf_device_key.h"
+#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
#include "zf_device_mt9v03x.h"
#include "zf_device_oled.h"
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.c
index cc42e43..adfc4a3 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -91,8 +91,10 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
+#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
+#endif
}break;
case SEEKFREE_ASSISTANT_WIRELESS_UART:
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_menc15a.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_menc15a.c
new file mode 100644
index 0000000..faaeba2
--- /dev/null
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_menc15a.c
@@ -0,0 +1,188 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* SCL/SPC ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SPC_PIN ºê¶¨Òå
+* SDA/DSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDI_PIN ºê¶¨Òå
+* SA0/SDO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_device_config.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_spi.h"
+
+#include "zf_device_menc15a.h"
+
+uint16 menc15a_absolute_data[2] = {0};
+
+int16 menc15a_absolute_offset_data[2] = {0};
+
+int16 menc15a_speed_data[2] = {0};
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ¼ÆËã±àÂëÆ÷Ðýתƫ²î
+// ²ÎÊý˵Ã÷ encoder_max ±àÂëÆ÷¾«¶È Ìîдʮ½øÖÆÊý¾Ý
+// ²ÎÊý˵Ã÷ now_location µ±Ç°Î»ÖÃÐÅÏ¢
+// ²ÎÊý˵Ã÷ last_location ÉÏÒ»´ÎµÄλÖÃÐÅÏ¢
+// ·µ»Ø²ÎÊý int32 ¼ÆËãµÄÆ«²îÖµ
+// ʹÓÃʾÀý magnetic_encoder_get_offset();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+static int32 magnetic_encoder_get_offset (int32 encoder_max, int32 now_location, int32 last_location)
+{
+ int32 result_data = 0;
+
+ if((encoder_max / 2) < func_abs(now_location - last_location))
+ {
+ result_data = ((encoder_max / 2) < now_location ? (now_location - encoder_max - last_location) : (now_location + encoder_max - last_location));
+ }
+ else
+ {
+ result_data = (now_location - last_location);
+ }
+
+ return result_data;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý uint16 ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ʹÓÃʾÀý menc15a_1_get_absolute_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module)
+{
+ uint16 read_data = 0;
+
+ uint16 data_last = menc15a_absolute_data[menc15a_module];
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8021);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ spi_write_8bit(MENC15A_2_SPI, 0x80);
+ spi_write_8bit(MENC15A_2_SPI, 0x21);
+ read_data = spi_read_8bit(MENC15A_2_SPI);
+ read_data = ((read_data << 8) | spi_read_8bit(MENC15A_2_SPI));
+
+ MENC15A_2_CS(1);
+ }
+
+ menc15a_absolute_data[menc15a_module] = (read_data & 0x7fff);
+
+ menc15a_absolute_offset_data[menc15a_module] = (int16)magnetic_encoder_get_offset(32768, menc15a_absolute_data[menc15a_module], data_last);
+
+ return menc15a_absolute_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ תËÙÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý int16 תËÙÊý¾Ý(ÿÃëÐýת»¡¶È rad/s)
+// ʹÓÃʾÀý menc15a_1_get_speed_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module)
+{
+ int16 read_data = 0;
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8032);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_2_SPI, 0x8032);
+
+ MENC15A_2_CS(1);
+ }
+
+ read_data = (read_data & 0x7fff);
+
+ if(read_data > 16384)
+ {
+ read_data = read_data - 32768;
+ }
+
+ menc15a_speed_data[menc15a_module] = (int16)((float)read_data * 1.917476f);
+
+ return menc15a_speed_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ³õʼ»¯ MENC15A
+// ²ÎÊý˵Ã÷ void
+// ·µ»Ø²ÎÊý uint8 1-³õʼ»¯Ê§°Ü 0-³õʼ»¯³É¹¦
+// ʹÓÃʾÀý menc15a_init();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+uint8 menc15a_init(void)
+{
+ spi_init(MENC15A_1_SPI, SPI_MODE1, MENC15A_1_SPI_SPEED, MENC15A_1_CLK_PIN, MENC15A_1_MOSI_PIN, MENC15A_1_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-1 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_1_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-1 µÄ CS¶Ë¿Ú
+
+ spi_init(MENC15A_2_SPI, SPI_MODE1, MENC15A_2_SPI_SPEED, MENC15A_2_CLK_PIN, MENC15A_2_MOSI_PIN, MENC15A_2_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-2 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_2_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-2 µÄ CS¶Ë¿Ú
+
+ return 0;
+}
+
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_menc15a.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_menc15a.h
new file mode 100644
index 0000000..068d877
--- /dev/null
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_menc15a.h
@@ -0,0 +1,102 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* CLK ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CLK_PIN ºê¶¨Òå
+* MOSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MOSI_PIN ºê¶¨Òå
+* MISO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MISO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_menc15a_h_
+#define _zf_device_menc15a_h_
+
+#include "zf_common_typedef.h"
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+#define MENC15A_1_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_1_SPI (SPI_0 ) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ºÅ
+#define MENC15A_1_CLK_PIN (SPI0_SCLK_P20_11) // ´Å±àÂëÆ÷1 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_1_MOSI_PIN (SPI0_MOSI_P20_14) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_1_MISO_PIN (SPI0_MISO_P20_12) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_1_CS_PIN (P20_13) // ´Å±àÂëÆ÷1 CS ƬѡÒý½Å
+#define MENC15A_1_CS(x) ((x) ? (gpio_high(MENC15A_1_CS_PIN)) : (gpio_low(MENC15A_1_CS_PIN)))
+
+
+#define MENC15A_2_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_2_SPI (SPI_0 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ºÅ
+#define MENC15A_2_CLK_PIN (SPI0_SCLK_P20_11 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_2_MOSI_PIN (SPI0_MOSI_P20_14 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_2_MISO_PIN (SPI0_MISO_P20_12 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_2_CS_PIN (P20_15) // ´Å±àÂëÆ÷2 CS ƬѡÒý½Å
+#define MENC15A_2_CS(x) ((x) ? (gpio_high(MENC15A_2_CS_PIN)) : (gpio_low(MENC15A_2_CS_PIN)))
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+
+// ö¾Ù´Å±àÂëÄ£¿é
+typedef enum
+{
+ menc15a_1_module,
+ menc15a_2_module,
+
+}menc15a_module_enum;
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+
+extern uint16 menc15a_absolute_data[2];
+
+extern int16 menc15a_absolute_offset_data[2];
+
+extern int16 menc15a_speed_data[2];
+
+
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module);
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module);
+
+uint8 menc15a_init(void);
+
+
+#endif
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_uart_receiver.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_uart_receiver.c
index 3ebb3bd..ade446d 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_uart_receiver.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_uart_receiver.c
@@ -91,7 +91,7 @@ static void uart_receiver_analysis (uart_receiver_struct *remote_data,uint8 * bu
remote_data->channel[num++] = (buffer[5] >> 1 | buffer[6] << 7 ) & 0x07FF;
remote_data->channel[num++] = (buffer[6] >> 4 | buffer[7] << 4 ) & 0x07FF;
remote_data->channel[num++] = (buffer[7] >> 7 | buffer[8] << 1 | buffer[9] << 9 ) & 0x07FF;
- remote_data->state = (SBUS_NORMAL_STATE == buffer[23]) ? 1 : 0;
+ remote_data->state = (SBUS_ABNORMAL_STATE == (buffer[23] & SBUS_ABNORMAL_STATE)) ? 0 : 1;
uart_receiver.finsh_flag = 1;
}
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_uart_receiver.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_uart_receiver.h
index 948ab2f..6498dcb 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_uart_receiver.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_uart_receiver.h
@@ -55,8 +55,7 @@
#define REV_DATA_LEN ( 25 ) // SBUSÖ¡³¤
#define FRAME_STAR ( 0X0F ) // Ö¡Í·ÐÅÏ¢
#define FRAME_END ( 0X00 ) // ֡βÐÅÏ¢
-#define SBUS_NORMAL_STATE ( 0X03 ) // Õý³£×´Ì¬
-#define SBUS_ABNORMAL_STATE ( 0X0F ) // ʧ¿Ø×´Ì¬
+#define SBUS_ABNORMAL_STATE ( 0X04 ) // ʧ¿Ø×´Ì¬
typedef struct
{
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/外设文件说明.txt b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/外设文件说明.txt
index 1c96965..40d9e28 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/外设文件说明.txt
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/外设文件说明.txt
@@ -88,6 +88,8 @@ zf_device_uart_receiver.h SUBS
zf_device_absolute_encoder.h 360¡ã λÖô«¸ÐÆ÷ ¾ø¶ÔʽÃÔÄã mini ±àÂëÆ÷ ·Ö±æÂÊ£º0.088¡ã
+zf_device_menc15a.h 15λ¸ß¾«¶È´Å±àÂëÆ÷Çý¶¯ λÖÃʽ
+
zf_device_gnss.h GPS ¼° RTK ¶¨Î»Ä£¿é ˫Ƶ¸ß¾«¶È¶¨Î»Ä£¿é ÑÇÃ×¼¶¶¨Î»
zf_device_key.h GPIO °´¼üÇý¶¯ ÓÃÓÚ¼ì²âÖ÷°å°´¼ü״̬
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_spi.c
index f817dd9..d74841c 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_spi.c
@@ -766,11 +766,11 @@ uint16 spi_read_16bit_register (spi_index_enum spi_n, const uint16 register_name
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
@@ -818,11 +818,11 @@ void spi_read_16bit_registers (spi_index_enum spi_n, const uint16 register_name,
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt b/Example/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt
index f45bf81..4df6214 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt
@@ -1,3 +1,7 @@
+V3.3.2
+ ÐÂÔözf_device_menc15a´Å±àÂëÆ÷ÍâÉèÇý¶¯
+ ¸ü¸Äuart½ÓÊÕ»ú²¿·ÖÓï¾ä
+ ÐÞÕýSPIµÄ16λͨѶ´íλÎÊÌâ
V3.3.1
ÒÆ³ýÕý½»±àÂëÆ÷µÄ¶ÏÑÔ¼ì²â
ÐÂÔöÖØÃüÃû¹¤³Ì¹¤¾ß
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h
index 3a140e3..c8f75f2 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h
@@ -93,6 +93,7 @@
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
#include "zf_device_key.h"
+#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
#include "zf_device_mt9v03x.h"
#include "zf_device_oled.h"
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.c
index cc42e43..adfc4a3 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -91,8 +91,10 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
+#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
+#endif
}break;
case SEEKFREE_ASSISTANT_WIRELESS_UART:
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_menc15a.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_menc15a.c
new file mode 100644
index 0000000..faaeba2
--- /dev/null
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_menc15a.c
@@ -0,0 +1,188 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* SCL/SPC ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SPC_PIN ºê¶¨Òå
+* SDA/DSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDI_PIN ºê¶¨Òå
+* SA0/SDO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_device_config.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_spi.h"
+
+#include "zf_device_menc15a.h"
+
+uint16 menc15a_absolute_data[2] = {0};
+
+int16 menc15a_absolute_offset_data[2] = {0};
+
+int16 menc15a_speed_data[2] = {0};
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ¼ÆËã±àÂëÆ÷Ðýתƫ²î
+// ²ÎÊý˵Ã÷ encoder_max ±àÂëÆ÷¾«¶È Ìîдʮ½øÖÆÊý¾Ý
+// ²ÎÊý˵Ã÷ now_location µ±Ç°Î»ÖÃÐÅÏ¢
+// ²ÎÊý˵Ã÷ last_location ÉÏÒ»´ÎµÄλÖÃÐÅÏ¢
+// ·µ»Ø²ÎÊý int32 ¼ÆËãµÄÆ«²îÖµ
+// ʹÓÃʾÀý magnetic_encoder_get_offset();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+static int32 magnetic_encoder_get_offset (int32 encoder_max, int32 now_location, int32 last_location)
+{
+ int32 result_data = 0;
+
+ if((encoder_max / 2) < func_abs(now_location - last_location))
+ {
+ result_data = ((encoder_max / 2) < now_location ? (now_location - encoder_max - last_location) : (now_location + encoder_max - last_location));
+ }
+ else
+ {
+ result_data = (now_location - last_location);
+ }
+
+ return result_data;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý uint16 ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ʹÓÃʾÀý menc15a_1_get_absolute_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module)
+{
+ uint16 read_data = 0;
+
+ uint16 data_last = menc15a_absolute_data[menc15a_module];
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8021);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ spi_write_8bit(MENC15A_2_SPI, 0x80);
+ spi_write_8bit(MENC15A_2_SPI, 0x21);
+ read_data = spi_read_8bit(MENC15A_2_SPI);
+ read_data = ((read_data << 8) | spi_read_8bit(MENC15A_2_SPI));
+
+ MENC15A_2_CS(1);
+ }
+
+ menc15a_absolute_data[menc15a_module] = (read_data & 0x7fff);
+
+ menc15a_absolute_offset_data[menc15a_module] = (int16)magnetic_encoder_get_offset(32768, menc15a_absolute_data[menc15a_module], data_last);
+
+ return menc15a_absolute_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ תËÙÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý int16 תËÙÊý¾Ý(ÿÃëÐýת»¡¶È rad/s)
+// ʹÓÃʾÀý menc15a_1_get_speed_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module)
+{
+ int16 read_data = 0;
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8032);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_2_SPI, 0x8032);
+
+ MENC15A_2_CS(1);
+ }
+
+ read_data = (read_data & 0x7fff);
+
+ if(read_data > 16384)
+ {
+ read_data = read_data - 32768;
+ }
+
+ menc15a_speed_data[menc15a_module] = (int16)((float)read_data * 1.917476f);
+
+ return menc15a_speed_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ³õʼ»¯ MENC15A
+// ²ÎÊý˵Ã÷ void
+// ·µ»Ø²ÎÊý uint8 1-³õʼ»¯Ê§°Ü 0-³õʼ»¯³É¹¦
+// ʹÓÃʾÀý menc15a_init();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+uint8 menc15a_init(void)
+{
+ spi_init(MENC15A_1_SPI, SPI_MODE1, MENC15A_1_SPI_SPEED, MENC15A_1_CLK_PIN, MENC15A_1_MOSI_PIN, MENC15A_1_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-1 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_1_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-1 µÄ CS¶Ë¿Ú
+
+ spi_init(MENC15A_2_SPI, SPI_MODE1, MENC15A_2_SPI_SPEED, MENC15A_2_CLK_PIN, MENC15A_2_MOSI_PIN, MENC15A_2_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-2 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_2_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-2 µÄ CS¶Ë¿Ú
+
+ return 0;
+}
+
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_menc15a.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_menc15a.h
new file mode 100644
index 0000000..068d877
--- /dev/null
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_menc15a.h
@@ -0,0 +1,102 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* CLK ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CLK_PIN ºê¶¨Òå
+* MOSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MOSI_PIN ºê¶¨Òå
+* MISO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MISO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_menc15a_h_
+#define _zf_device_menc15a_h_
+
+#include "zf_common_typedef.h"
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+#define MENC15A_1_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_1_SPI (SPI_0 ) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ºÅ
+#define MENC15A_1_CLK_PIN (SPI0_SCLK_P20_11) // ´Å±àÂëÆ÷1 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_1_MOSI_PIN (SPI0_MOSI_P20_14) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_1_MISO_PIN (SPI0_MISO_P20_12) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_1_CS_PIN (P20_13) // ´Å±àÂëÆ÷1 CS ƬѡÒý½Å
+#define MENC15A_1_CS(x) ((x) ? (gpio_high(MENC15A_1_CS_PIN)) : (gpio_low(MENC15A_1_CS_PIN)))
+
+
+#define MENC15A_2_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_2_SPI (SPI_0 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ºÅ
+#define MENC15A_2_CLK_PIN (SPI0_SCLK_P20_11 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_2_MOSI_PIN (SPI0_MOSI_P20_14 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_2_MISO_PIN (SPI0_MISO_P20_12 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_2_CS_PIN (P20_15) // ´Å±àÂëÆ÷2 CS ƬѡÒý½Å
+#define MENC15A_2_CS(x) ((x) ? (gpio_high(MENC15A_2_CS_PIN)) : (gpio_low(MENC15A_2_CS_PIN)))
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+
+// ö¾Ù´Å±àÂëÄ£¿é
+typedef enum
+{
+ menc15a_1_module,
+ menc15a_2_module,
+
+}menc15a_module_enum;
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+
+extern uint16 menc15a_absolute_data[2];
+
+extern int16 menc15a_absolute_offset_data[2];
+
+extern int16 menc15a_speed_data[2];
+
+
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module);
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module);
+
+uint8 menc15a_init(void);
+
+
+#endif
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_uart_receiver.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_uart_receiver.c
index 3ebb3bd..ade446d 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_uart_receiver.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_uart_receiver.c
@@ -91,7 +91,7 @@ static void uart_receiver_analysis (uart_receiver_struct *remote_data,uint8 * bu
remote_data->channel[num++] = (buffer[5] >> 1 | buffer[6] << 7 ) & 0x07FF;
remote_data->channel[num++] = (buffer[6] >> 4 | buffer[7] << 4 ) & 0x07FF;
remote_data->channel[num++] = (buffer[7] >> 7 | buffer[8] << 1 | buffer[9] << 9 ) & 0x07FF;
- remote_data->state = (SBUS_NORMAL_STATE == buffer[23]) ? 1 : 0;
+ remote_data->state = (SBUS_ABNORMAL_STATE == (buffer[23] & SBUS_ABNORMAL_STATE)) ? 0 : 1;
uart_receiver.finsh_flag = 1;
}
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_uart_receiver.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_uart_receiver.h
index 948ab2f..6498dcb 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_uart_receiver.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_uart_receiver.h
@@ -55,8 +55,7 @@
#define REV_DATA_LEN ( 25 ) // SBUSÖ¡³¤
#define FRAME_STAR ( 0X0F ) // Ö¡Í·ÐÅÏ¢
#define FRAME_END ( 0X00 ) // ֡βÐÅÏ¢
-#define SBUS_NORMAL_STATE ( 0X03 ) // Õý³£×´Ì¬
-#define SBUS_ABNORMAL_STATE ( 0X0F ) // ʧ¿Ø×´Ì¬
+#define SBUS_ABNORMAL_STATE ( 0X04 ) // ʧ¿Ø×´Ì¬
typedef struct
{
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/外设文件说明.txt b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/外设文件说明.txt
index 1c96965..40d9e28 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/外设文件说明.txt
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/外设文件说明.txt
@@ -88,6 +88,8 @@ zf_device_uart_receiver.h SUBS
zf_device_absolute_encoder.h 360¡ã λÖô«¸ÐÆ÷ ¾ø¶ÔʽÃÔÄã mini ±àÂëÆ÷ ·Ö±æÂÊ£º0.088¡ã
+zf_device_menc15a.h 15λ¸ß¾«¶È´Å±àÂëÆ÷Çý¶¯ λÖÃʽ
+
zf_device_gnss.h GPS ¼° RTK ¶¨Î»Ä£¿é ˫Ƶ¸ß¾«¶È¶¨Î»Ä£¿é ÑÇÃ×¼¶¶¨Î»
zf_device_key.h GPIO °´¼üÇý¶¯ ÓÃÓÚ¼ì²âÖ÷°å°´¼ü״̬
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_spi.c
index f817dd9..d74841c 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_spi.c
@@ -766,11 +766,11 @@ uint16 spi_read_16bit_register (spi_index_enum spi_n, const uint16 register_name
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
@@ -818,11 +818,11 @@ void spi_read_16bit_registers (spi_index_enum spi_n, const uint16 register_name,
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
diff --git a/Example/E13_dual_core_demo/libraries/doc/version.txt b/Example/E13_dual_core_demo/libraries/doc/version.txt
index f45bf81..4df6214 100644
--- a/Example/E13_dual_core_demo/libraries/doc/version.txt
+++ b/Example/E13_dual_core_demo/libraries/doc/version.txt
@@ -1,3 +1,7 @@
+V3.3.2
+ ÐÂÔözf_device_menc15a´Å±àÂëÆ÷ÍâÉèÇý¶¯
+ ¸ü¸Äuart½ÓÊÕ»ú²¿·ÖÓï¾ä
+ ÐÞÕýSPIµÄ16λͨѶ´íλÎÊÌâ
V3.3.1
ÒÆ³ýÕý½»±àÂëÆ÷µÄ¶ÏÑÔ¼ì²â
ÐÂÔöÖØÃüÃû¹¤³Ì¹¤¾ß
diff --git a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h
index 3a140e3..c8f75f2 100644
--- a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h
@@ -93,6 +93,7 @@
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
#include "zf_device_key.h"
+#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
#include "zf_device_mt9v03x.h"
#include "zf_device_oled.h"
diff --git a/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.c
index cc42e43..adfc4a3 100644
--- a/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -91,8 +91,10 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
+#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
+#endif
}break;
case SEEKFREE_ASSISTANT_WIRELESS_UART:
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_menc15a.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_menc15a.c
new file mode 100644
index 0000000..faaeba2
--- /dev/null
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_menc15a.c
@@ -0,0 +1,188 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* SCL/SPC ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SPC_PIN ºê¶¨Òå
+* SDA/DSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDI_PIN ºê¶¨Òå
+* SA0/SDO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_device_config.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_spi.h"
+
+#include "zf_device_menc15a.h"
+
+uint16 menc15a_absolute_data[2] = {0};
+
+int16 menc15a_absolute_offset_data[2] = {0};
+
+int16 menc15a_speed_data[2] = {0};
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ¼ÆËã±àÂëÆ÷Ðýתƫ²î
+// ²ÎÊý˵Ã÷ encoder_max ±àÂëÆ÷¾«¶È Ìîдʮ½øÖÆÊý¾Ý
+// ²ÎÊý˵Ã÷ now_location µ±Ç°Î»ÖÃÐÅÏ¢
+// ²ÎÊý˵Ã÷ last_location ÉÏÒ»´ÎµÄλÖÃÐÅÏ¢
+// ·µ»Ø²ÎÊý int32 ¼ÆËãµÄÆ«²îÖµ
+// ʹÓÃʾÀý magnetic_encoder_get_offset();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+static int32 magnetic_encoder_get_offset (int32 encoder_max, int32 now_location, int32 last_location)
+{
+ int32 result_data = 0;
+
+ if((encoder_max / 2) < func_abs(now_location - last_location))
+ {
+ result_data = ((encoder_max / 2) < now_location ? (now_location - encoder_max - last_location) : (now_location + encoder_max - last_location));
+ }
+ else
+ {
+ result_data = (now_location - last_location);
+ }
+
+ return result_data;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý uint16 ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ʹÓÃʾÀý menc15a_1_get_absolute_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module)
+{
+ uint16 read_data = 0;
+
+ uint16 data_last = menc15a_absolute_data[menc15a_module];
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8021);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ spi_write_8bit(MENC15A_2_SPI, 0x80);
+ spi_write_8bit(MENC15A_2_SPI, 0x21);
+ read_data = spi_read_8bit(MENC15A_2_SPI);
+ read_data = ((read_data << 8) | spi_read_8bit(MENC15A_2_SPI));
+
+ MENC15A_2_CS(1);
+ }
+
+ menc15a_absolute_data[menc15a_module] = (read_data & 0x7fff);
+
+ menc15a_absolute_offset_data[menc15a_module] = (int16)magnetic_encoder_get_offset(32768, menc15a_absolute_data[menc15a_module], data_last);
+
+ return menc15a_absolute_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ תËÙÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý int16 תËÙÊý¾Ý(ÿÃëÐýת»¡¶È rad/s)
+// ʹÓÃʾÀý menc15a_1_get_speed_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module)
+{
+ int16 read_data = 0;
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8032);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_2_SPI, 0x8032);
+
+ MENC15A_2_CS(1);
+ }
+
+ read_data = (read_data & 0x7fff);
+
+ if(read_data > 16384)
+ {
+ read_data = read_data - 32768;
+ }
+
+ menc15a_speed_data[menc15a_module] = (int16)((float)read_data * 1.917476f);
+
+ return menc15a_speed_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ³õʼ»¯ MENC15A
+// ²ÎÊý˵Ã÷ void
+// ·µ»Ø²ÎÊý uint8 1-³õʼ»¯Ê§°Ü 0-³õʼ»¯³É¹¦
+// ʹÓÃʾÀý menc15a_init();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+uint8 menc15a_init(void)
+{
+ spi_init(MENC15A_1_SPI, SPI_MODE1, MENC15A_1_SPI_SPEED, MENC15A_1_CLK_PIN, MENC15A_1_MOSI_PIN, MENC15A_1_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-1 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_1_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-1 µÄ CS¶Ë¿Ú
+
+ spi_init(MENC15A_2_SPI, SPI_MODE1, MENC15A_2_SPI_SPEED, MENC15A_2_CLK_PIN, MENC15A_2_MOSI_PIN, MENC15A_2_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-2 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_2_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-2 µÄ CS¶Ë¿Ú
+
+ return 0;
+}
+
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_menc15a.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_menc15a.h
new file mode 100644
index 0000000..068d877
--- /dev/null
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_menc15a.h
@@ -0,0 +1,102 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* CLK ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CLK_PIN ºê¶¨Òå
+* MOSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MOSI_PIN ºê¶¨Òå
+* MISO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MISO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_menc15a_h_
+#define _zf_device_menc15a_h_
+
+#include "zf_common_typedef.h"
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+#define MENC15A_1_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_1_SPI (SPI_0 ) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ºÅ
+#define MENC15A_1_CLK_PIN (SPI0_SCLK_P20_11) // ´Å±àÂëÆ÷1 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_1_MOSI_PIN (SPI0_MOSI_P20_14) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_1_MISO_PIN (SPI0_MISO_P20_12) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_1_CS_PIN (P20_13) // ´Å±àÂëÆ÷1 CS ƬѡÒý½Å
+#define MENC15A_1_CS(x) ((x) ? (gpio_high(MENC15A_1_CS_PIN)) : (gpio_low(MENC15A_1_CS_PIN)))
+
+
+#define MENC15A_2_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_2_SPI (SPI_0 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ºÅ
+#define MENC15A_2_CLK_PIN (SPI0_SCLK_P20_11 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_2_MOSI_PIN (SPI0_MOSI_P20_14 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_2_MISO_PIN (SPI0_MISO_P20_12 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_2_CS_PIN (P20_15) // ´Å±àÂëÆ÷2 CS ƬѡÒý½Å
+#define MENC15A_2_CS(x) ((x) ? (gpio_high(MENC15A_2_CS_PIN)) : (gpio_low(MENC15A_2_CS_PIN)))
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+
+// ö¾Ù´Å±àÂëÄ£¿é
+typedef enum
+{
+ menc15a_1_module,
+ menc15a_2_module,
+
+}menc15a_module_enum;
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+
+extern uint16 menc15a_absolute_data[2];
+
+extern int16 menc15a_absolute_offset_data[2];
+
+extern int16 menc15a_speed_data[2];
+
+
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module);
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module);
+
+uint8 menc15a_init(void);
+
+
+#endif
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_uart_receiver.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_uart_receiver.c
index 3ebb3bd..ade446d 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_uart_receiver.c
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_uart_receiver.c
@@ -91,7 +91,7 @@ static void uart_receiver_analysis (uart_receiver_struct *remote_data,uint8 * bu
remote_data->channel[num++] = (buffer[5] >> 1 | buffer[6] << 7 ) & 0x07FF;
remote_data->channel[num++] = (buffer[6] >> 4 | buffer[7] << 4 ) & 0x07FF;
remote_data->channel[num++] = (buffer[7] >> 7 | buffer[8] << 1 | buffer[9] << 9 ) & 0x07FF;
- remote_data->state = (SBUS_NORMAL_STATE == buffer[23]) ? 1 : 0;
+ remote_data->state = (SBUS_ABNORMAL_STATE == (buffer[23] & SBUS_ABNORMAL_STATE)) ? 0 : 1;
uart_receiver.finsh_flag = 1;
}
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_uart_receiver.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_uart_receiver.h
index 948ab2f..6498dcb 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_uart_receiver.h
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_uart_receiver.h
@@ -55,8 +55,7 @@
#define REV_DATA_LEN ( 25 ) // SBUSÖ¡³¤
#define FRAME_STAR ( 0X0F ) // Ö¡Í·ÐÅÏ¢
#define FRAME_END ( 0X00 ) // ֡βÐÅÏ¢
-#define SBUS_NORMAL_STATE ( 0X03 ) // Õý³£×´Ì¬
-#define SBUS_ABNORMAL_STATE ( 0X0F ) // ʧ¿Ø×´Ì¬
+#define SBUS_ABNORMAL_STATE ( 0X04 ) // ʧ¿Ø×´Ì¬
typedef struct
{
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/外设文件说明.txt b/Example/E13_dual_core_demo/libraries/zf_device/外设文件说明.txt
index 1c96965..40d9e28 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/外设文件说明.txt
+++ b/Example/E13_dual_core_demo/libraries/zf_device/外设文件说明.txt
@@ -88,6 +88,8 @@ zf_device_uart_receiver.h SUBS
zf_device_absolute_encoder.h 360¡ã λÖô«¸ÐÆ÷ ¾ø¶ÔʽÃÔÄã mini ±àÂëÆ÷ ·Ö±æÂÊ£º0.088¡ã
+zf_device_menc15a.h 15λ¸ß¾«¶È´Å±àÂëÆ÷Çý¶¯ λÖÃʽ
+
zf_device_gnss.h GPS ¼° RTK ¶¨Î»Ä£¿é ˫Ƶ¸ß¾«¶È¶¨Î»Ä£¿é ÑÇÃ×¼¶¶¨Î»
zf_device_key.h GPIO °´¼üÇý¶¯ ÓÃÓÚ¼ì²âÖ÷°å°´¼ü״̬
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_spi.c
index f817dd9..d74841c 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_spi.c
@@ -766,11 +766,11 @@ uint16 spi_read_16bit_register (spi_index_enum spi_n, const uint16 register_name
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
@@ -818,11 +818,11 @@ void spi_read_16bit_registers (spi_index_enum spi_n, const uint16 register_name,
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt b/Example/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt
index f45bf81..4df6214 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt
@@ -1,3 +1,7 @@
+V3.3.2
+ ÐÂÔözf_device_menc15a´Å±àÂëÆ÷ÍâÉèÇý¶¯
+ ¸ü¸Äuart½ÓÊÕ»ú²¿·ÖÓï¾ä
+ ÐÞÕýSPIµÄ16λͨѶ´íλÎÊÌâ
V3.3.1
ÒÆ³ýÕý½»±àÂëÆ÷µÄ¶ÏÑÔ¼ì²â
ÐÂÔöÖØÃüÃû¹¤³Ì¹¤¾ß
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h
index 3a140e3..c8f75f2 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h
@@ -93,6 +93,7 @@
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
#include "zf_device_key.h"
+#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
#include "zf_device_mt9v03x.h"
#include "zf_device_oled.h"
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.c
index cc42e43..adfc4a3 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -91,8 +91,10 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
+#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
+#endif
}break;
case SEEKFREE_ASSISTANT_WIRELESS_UART:
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_menc15a.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_menc15a.c
new file mode 100644
index 0000000..faaeba2
--- /dev/null
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_menc15a.c
@@ -0,0 +1,188 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* SCL/SPC ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SPC_PIN ºê¶¨Òå
+* SDA/DSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDI_PIN ºê¶¨Òå
+* SA0/SDO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_device_config.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_spi.h"
+
+#include "zf_device_menc15a.h"
+
+uint16 menc15a_absolute_data[2] = {0};
+
+int16 menc15a_absolute_offset_data[2] = {0};
+
+int16 menc15a_speed_data[2] = {0};
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ¼ÆËã±àÂëÆ÷Ðýתƫ²î
+// ²ÎÊý˵Ã÷ encoder_max ±àÂëÆ÷¾«¶È Ìîдʮ½øÖÆÊý¾Ý
+// ²ÎÊý˵Ã÷ now_location µ±Ç°Î»ÖÃÐÅÏ¢
+// ²ÎÊý˵Ã÷ last_location ÉÏÒ»´ÎµÄλÖÃÐÅÏ¢
+// ·µ»Ø²ÎÊý int32 ¼ÆËãµÄÆ«²îÖµ
+// ʹÓÃʾÀý magnetic_encoder_get_offset();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+static int32 magnetic_encoder_get_offset (int32 encoder_max, int32 now_location, int32 last_location)
+{
+ int32 result_data = 0;
+
+ if((encoder_max / 2) < func_abs(now_location - last_location))
+ {
+ result_data = ((encoder_max / 2) < now_location ? (now_location - encoder_max - last_location) : (now_location + encoder_max - last_location));
+ }
+ else
+ {
+ result_data = (now_location - last_location);
+ }
+
+ return result_data;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý uint16 ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ʹÓÃʾÀý menc15a_1_get_absolute_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module)
+{
+ uint16 read_data = 0;
+
+ uint16 data_last = menc15a_absolute_data[menc15a_module];
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8021);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ spi_write_8bit(MENC15A_2_SPI, 0x80);
+ spi_write_8bit(MENC15A_2_SPI, 0x21);
+ read_data = spi_read_8bit(MENC15A_2_SPI);
+ read_data = ((read_data << 8) | spi_read_8bit(MENC15A_2_SPI));
+
+ MENC15A_2_CS(1);
+ }
+
+ menc15a_absolute_data[menc15a_module] = (read_data & 0x7fff);
+
+ menc15a_absolute_offset_data[menc15a_module] = (int16)magnetic_encoder_get_offset(32768, menc15a_absolute_data[menc15a_module], data_last);
+
+ return menc15a_absolute_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ תËÙÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý int16 תËÙÊý¾Ý(ÿÃëÐýת»¡¶È rad/s)
+// ʹÓÃʾÀý menc15a_1_get_speed_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module)
+{
+ int16 read_data = 0;
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8032);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_2_SPI, 0x8032);
+
+ MENC15A_2_CS(1);
+ }
+
+ read_data = (read_data & 0x7fff);
+
+ if(read_data > 16384)
+ {
+ read_data = read_data - 32768;
+ }
+
+ menc15a_speed_data[menc15a_module] = (int16)((float)read_data * 1.917476f);
+
+ return menc15a_speed_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ³õʼ»¯ MENC15A
+// ²ÎÊý˵Ã÷ void
+// ·µ»Ø²ÎÊý uint8 1-³õʼ»¯Ê§°Ü 0-³õʼ»¯³É¹¦
+// ʹÓÃʾÀý menc15a_init();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+uint8 menc15a_init(void)
+{
+ spi_init(MENC15A_1_SPI, SPI_MODE1, MENC15A_1_SPI_SPEED, MENC15A_1_CLK_PIN, MENC15A_1_MOSI_PIN, MENC15A_1_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-1 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_1_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-1 µÄ CS¶Ë¿Ú
+
+ spi_init(MENC15A_2_SPI, SPI_MODE1, MENC15A_2_SPI_SPEED, MENC15A_2_CLK_PIN, MENC15A_2_MOSI_PIN, MENC15A_2_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-2 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_2_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-2 µÄ CS¶Ë¿Ú
+
+ return 0;
+}
+
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_menc15a.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_menc15a.h
new file mode 100644
index 0000000..068d877
--- /dev/null
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_menc15a.h
@@ -0,0 +1,102 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* CLK ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CLK_PIN ºê¶¨Òå
+* MOSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MOSI_PIN ºê¶¨Òå
+* MISO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MISO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_menc15a_h_
+#define _zf_device_menc15a_h_
+
+#include "zf_common_typedef.h"
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+#define MENC15A_1_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_1_SPI (SPI_0 ) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ºÅ
+#define MENC15A_1_CLK_PIN (SPI0_SCLK_P20_11) // ´Å±àÂëÆ÷1 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_1_MOSI_PIN (SPI0_MOSI_P20_14) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_1_MISO_PIN (SPI0_MISO_P20_12) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_1_CS_PIN (P20_13) // ´Å±àÂëÆ÷1 CS ƬѡÒý½Å
+#define MENC15A_1_CS(x) ((x) ? (gpio_high(MENC15A_1_CS_PIN)) : (gpio_low(MENC15A_1_CS_PIN)))
+
+
+#define MENC15A_2_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_2_SPI (SPI_0 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ºÅ
+#define MENC15A_2_CLK_PIN (SPI0_SCLK_P20_11 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_2_MOSI_PIN (SPI0_MOSI_P20_14 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_2_MISO_PIN (SPI0_MISO_P20_12 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_2_CS_PIN (P20_15) // ´Å±àÂëÆ÷2 CS ƬѡÒý½Å
+#define MENC15A_2_CS(x) ((x) ? (gpio_high(MENC15A_2_CS_PIN)) : (gpio_low(MENC15A_2_CS_PIN)))
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+
+// ö¾Ù´Å±àÂëÄ£¿é
+typedef enum
+{
+ menc15a_1_module,
+ menc15a_2_module,
+
+}menc15a_module_enum;
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+
+extern uint16 menc15a_absolute_data[2];
+
+extern int16 menc15a_absolute_offset_data[2];
+
+extern int16 menc15a_speed_data[2];
+
+
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module);
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module);
+
+uint8 menc15a_init(void);
+
+
+#endif
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_uart_receiver.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_uart_receiver.c
index 3ebb3bd..ade446d 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_uart_receiver.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_uart_receiver.c
@@ -91,7 +91,7 @@ static void uart_receiver_analysis (uart_receiver_struct *remote_data,uint8 * bu
remote_data->channel[num++] = (buffer[5] >> 1 | buffer[6] << 7 ) & 0x07FF;
remote_data->channel[num++] = (buffer[6] >> 4 | buffer[7] << 4 ) & 0x07FF;
remote_data->channel[num++] = (buffer[7] >> 7 | buffer[8] << 1 | buffer[9] << 9 ) & 0x07FF;
- remote_data->state = (SBUS_NORMAL_STATE == buffer[23]) ? 1 : 0;
+ remote_data->state = (SBUS_ABNORMAL_STATE == (buffer[23] & SBUS_ABNORMAL_STATE)) ? 0 : 1;
uart_receiver.finsh_flag = 1;
}
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_uart_receiver.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_uart_receiver.h
index 948ab2f..6498dcb 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_uart_receiver.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_uart_receiver.h
@@ -55,8 +55,7 @@
#define REV_DATA_LEN ( 25 ) // SBUSÖ¡³¤
#define FRAME_STAR ( 0X0F ) // Ö¡Í·ÐÅÏ¢
#define FRAME_END ( 0X00 ) // ֡βÐÅÏ¢
-#define SBUS_NORMAL_STATE ( 0X03 ) // Õý³£×´Ì¬
-#define SBUS_ABNORMAL_STATE ( 0X0F ) // ʧ¿Ø×´Ì¬
+#define SBUS_ABNORMAL_STATE ( 0X04 ) // ʧ¿Ø×´Ì¬
typedef struct
{
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/外设文件说明.txt b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/外设文件说明.txt
index 1c96965..40d9e28 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/外设文件说明.txt
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/外设文件说明.txt
@@ -88,6 +88,8 @@ zf_device_uart_receiver.h SUBS
zf_device_absolute_encoder.h 360¡ã λÖô«¸ÐÆ÷ ¾ø¶ÔʽÃÔÄã mini ±àÂëÆ÷ ·Ö±æÂÊ£º0.088¡ã
+zf_device_menc15a.h 15λ¸ß¾«¶È´Å±àÂëÆ÷Çý¶¯ λÖÃʽ
+
zf_device_gnss.h GPS ¼° RTK ¶¨Î»Ä£¿é ˫Ƶ¸ß¾«¶È¶¨Î»Ä£¿é ÑÇÃ×¼¶¶¨Î»
zf_device_key.h GPIO °´¼üÇý¶¯ ÓÃÓÚ¼ì²âÖ÷°å°´¼ü״̬
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_spi.c
index f817dd9..d74841c 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_spi.c
@@ -766,11 +766,11 @@ uint16 spi_read_16bit_register (spi_index_enum spi_n, const uint16 register_name
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
@@ -818,11 +818,11 @@ void spi_read_16bit_registers (spi_index_enum spi_n, const uint16 register_name,
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
diff --git a/Example/E15_fft_demo/libraries/doc/version.txt b/Example/E15_fft_demo/libraries/doc/version.txt
index f45bf81..4df6214 100644
--- a/Example/E15_fft_demo/libraries/doc/version.txt
+++ b/Example/E15_fft_demo/libraries/doc/version.txt
@@ -1,3 +1,7 @@
+V3.3.2
+ ÐÂÔözf_device_menc15a´Å±àÂëÆ÷ÍâÉèÇý¶¯
+ ¸ü¸Äuart½ÓÊÕ»ú²¿·ÖÓï¾ä
+ ÐÞÕýSPIµÄ16λͨѶ´íλÎÊÌâ
V3.3.1
ÒÆ³ýÕý½»±àÂëÆ÷µÄ¶ÏÑÔ¼ì²â
ÐÂÔöÖØÃüÃû¹¤³Ì¹¤¾ß
diff --git a/Example/E15_fft_demo/libraries/zf_common/zf_common_headfile.h b/Example/E15_fft_demo/libraries/zf_common/zf_common_headfile.h
index 3a140e3..c8f75f2 100644
--- a/Example/E15_fft_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E15_fft_demo/libraries/zf_common/zf_common_headfile.h
@@ -93,6 +93,7 @@
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
#include "zf_device_key.h"
+#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
#include "zf_device_mt9v03x.h"
#include "zf_device_oled.h"
diff --git a/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.c
index cc42e43..adfc4a3 100644
--- a/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -91,8 +91,10 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
+#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
+#endif
}break;
case SEEKFREE_ASSISTANT_WIRELESS_UART:
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_menc15a.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_menc15a.c
new file mode 100644
index 0000000..faaeba2
--- /dev/null
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_menc15a.c
@@ -0,0 +1,188 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* SCL/SPC ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SPC_PIN ºê¶¨Òå
+* SDA/DSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDI_PIN ºê¶¨Òå
+* SA0/SDO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_device_config.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_spi.h"
+
+#include "zf_device_menc15a.h"
+
+uint16 menc15a_absolute_data[2] = {0};
+
+int16 menc15a_absolute_offset_data[2] = {0};
+
+int16 menc15a_speed_data[2] = {0};
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ¼ÆËã±àÂëÆ÷Ðýתƫ²î
+// ²ÎÊý˵Ã÷ encoder_max ±àÂëÆ÷¾«¶È Ìîдʮ½øÖÆÊý¾Ý
+// ²ÎÊý˵Ã÷ now_location µ±Ç°Î»ÖÃÐÅÏ¢
+// ²ÎÊý˵Ã÷ last_location ÉÏÒ»´ÎµÄλÖÃÐÅÏ¢
+// ·µ»Ø²ÎÊý int32 ¼ÆËãµÄÆ«²îÖµ
+// ʹÓÃʾÀý magnetic_encoder_get_offset();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+static int32 magnetic_encoder_get_offset (int32 encoder_max, int32 now_location, int32 last_location)
+{
+ int32 result_data = 0;
+
+ if((encoder_max / 2) < func_abs(now_location - last_location))
+ {
+ result_data = ((encoder_max / 2) < now_location ? (now_location - encoder_max - last_location) : (now_location + encoder_max - last_location));
+ }
+ else
+ {
+ result_data = (now_location - last_location);
+ }
+
+ return result_data;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý uint16 ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ʹÓÃʾÀý menc15a_1_get_absolute_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module)
+{
+ uint16 read_data = 0;
+
+ uint16 data_last = menc15a_absolute_data[menc15a_module];
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8021);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ spi_write_8bit(MENC15A_2_SPI, 0x80);
+ spi_write_8bit(MENC15A_2_SPI, 0x21);
+ read_data = spi_read_8bit(MENC15A_2_SPI);
+ read_data = ((read_data << 8) | spi_read_8bit(MENC15A_2_SPI));
+
+ MENC15A_2_CS(1);
+ }
+
+ menc15a_absolute_data[menc15a_module] = (read_data & 0x7fff);
+
+ menc15a_absolute_offset_data[menc15a_module] = (int16)magnetic_encoder_get_offset(32768, menc15a_absolute_data[menc15a_module], data_last);
+
+ return menc15a_absolute_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ תËÙÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý int16 תËÙÊý¾Ý(ÿÃëÐýת»¡¶È rad/s)
+// ʹÓÃʾÀý menc15a_1_get_speed_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module)
+{
+ int16 read_data = 0;
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8032);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_2_SPI, 0x8032);
+
+ MENC15A_2_CS(1);
+ }
+
+ read_data = (read_data & 0x7fff);
+
+ if(read_data > 16384)
+ {
+ read_data = read_data - 32768;
+ }
+
+ menc15a_speed_data[menc15a_module] = (int16)((float)read_data * 1.917476f);
+
+ return menc15a_speed_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ³õʼ»¯ MENC15A
+// ²ÎÊý˵Ã÷ void
+// ·µ»Ø²ÎÊý uint8 1-³õʼ»¯Ê§°Ü 0-³õʼ»¯³É¹¦
+// ʹÓÃʾÀý menc15a_init();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+uint8 menc15a_init(void)
+{
+ spi_init(MENC15A_1_SPI, SPI_MODE1, MENC15A_1_SPI_SPEED, MENC15A_1_CLK_PIN, MENC15A_1_MOSI_PIN, MENC15A_1_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-1 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_1_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-1 µÄ CS¶Ë¿Ú
+
+ spi_init(MENC15A_2_SPI, SPI_MODE1, MENC15A_2_SPI_SPEED, MENC15A_2_CLK_PIN, MENC15A_2_MOSI_PIN, MENC15A_2_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-2 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_2_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-2 µÄ CS¶Ë¿Ú
+
+ return 0;
+}
+
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_menc15a.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_menc15a.h
new file mode 100644
index 0000000..068d877
--- /dev/null
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_menc15a.h
@@ -0,0 +1,102 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* CLK ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CLK_PIN ºê¶¨Òå
+* MOSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MOSI_PIN ºê¶¨Òå
+* MISO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MISO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_menc15a_h_
+#define _zf_device_menc15a_h_
+
+#include "zf_common_typedef.h"
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+#define MENC15A_1_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_1_SPI (SPI_0 ) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ºÅ
+#define MENC15A_1_CLK_PIN (SPI0_SCLK_P20_11) // ´Å±àÂëÆ÷1 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_1_MOSI_PIN (SPI0_MOSI_P20_14) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_1_MISO_PIN (SPI0_MISO_P20_12) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_1_CS_PIN (P20_13) // ´Å±àÂëÆ÷1 CS ƬѡÒý½Å
+#define MENC15A_1_CS(x) ((x) ? (gpio_high(MENC15A_1_CS_PIN)) : (gpio_low(MENC15A_1_CS_PIN)))
+
+
+#define MENC15A_2_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_2_SPI (SPI_0 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ºÅ
+#define MENC15A_2_CLK_PIN (SPI0_SCLK_P20_11 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_2_MOSI_PIN (SPI0_MOSI_P20_14 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_2_MISO_PIN (SPI0_MISO_P20_12 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_2_CS_PIN (P20_15) // ´Å±àÂëÆ÷2 CS ƬѡÒý½Å
+#define MENC15A_2_CS(x) ((x) ? (gpio_high(MENC15A_2_CS_PIN)) : (gpio_low(MENC15A_2_CS_PIN)))
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+
+// ö¾Ù´Å±àÂëÄ£¿é
+typedef enum
+{
+ menc15a_1_module,
+ menc15a_2_module,
+
+}menc15a_module_enum;
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+
+extern uint16 menc15a_absolute_data[2];
+
+extern int16 menc15a_absolute_offset_data[2];
+
+extern int16 menc15a_speed_data[2];
+
+
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module);
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module);
+
+uint8 menc15a_init(void);
+
+
+#endif
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_uart_receiver.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_uart_receiver.c
index 3ebb3bd..ade446d 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_uart_receiver.c
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_uart_receiver.c
@@ -91,7 +91,7 @@ static void uart_receiver_analysis (uart_receiver_struct *remote_data,uint8 * bu
remote_data->channel[num++] = (buffer[5] >> 1 | buffer[6] << 7 ) & 0x07FF;
remote_data->channel[num++] = (buffer[6] >> 4 | buffer[7] << 4 ) & 0x07FF;
remote_data->channel[num++] = (buffer[7] >> 7 | buffer[8] << 1 | buffer[9] << 9 ) & 0x07FF;
- remote_data->state = (SBUS_NORMAL_STATE == buffer[23]) ? 1 : 0;
+ remote_data->state = (SBUS_ABNORMAL_STATE == (buffer[23] & SBUS_ABNORMAL_STATE)) ? 0 : 1;
uart_receiver.finsh_flag = 1;
}
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_uart_receiver.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_uart_receiver.h
index 948ab2f..6498dcb 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_uart_receiver.h
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_uart_receiver.h
@@ -55,8 +55,7 @@
#define REV_DATA_LEN ( 25 ) // SBUSÖ¡³¤
#define FRAME_STAR ( 0X0F ) // Ö¡Í·ÐÅÏ¢
#define FRAME_END ( 0X00 ) // ֡βÐÅÏ¢
-#define SBUS_NORMAL_STATE ( 0X03 ) // Õý³£×´Ì¬
-#define SBUS_ABNORMAL_STATE ( 0X0F ) // ʧ¿Ø×´Ì¬
+#define SBUS_ABNORMAL_STATE ( 0X04 ) // ʧ¿Ø×´Ì¬
typedef struct
{
diff --git a/Example/E15_fft_demo/libraries/zf_device/外设文件说明.txt b/Example/E15_fft_demo/libraries/zf_device/外设文件说明.txt
index 1c96965..40d9e28 100644
--- a/Example/E15_fft_demo/libraries/zf_device/外设文件说明.txt
+++ b/Example/E15_fft_demo/libraries/zf_device/外设文件说明.txt
@@ -88,6 +88,8 @@ zf_device_uart_receiver.h SUBS
zf_device_absolute_encoder.h 360¡ã λÖô«¸ÐÆ÷ ¾ø¶ÔʽÃÔÄã mini ±àÂëÆ÷ ·Ö±æÂÊ£º0.088¡ã
+zf_device_menc15a.h 15λ¸ß¾«¶È´Å±àÂëÆ÷Çý¶¯ λÖÃʽ
+
zf_device_gnss.h GPS ¼° RTK ¶¨Î»Ä£¿é ˫Ƶ¸ß¾«¶È¶¨Î»Ä£¿é ÑÇÃ×¼¶¶¨Î»
zf_device_key.h GPIO °´¼üÇý¶¯ ÓÃÓÚ¼ì²âÖ÷°å°´¼ü״̬
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_spi.c
index f817dd9..d74841c 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_spi.c
@@ -766,11 +766,11 @@ uint16 spi_read_16bit_register (spi_index_enum spi_n, const uint16 register_name
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
@@ -818,11 +818,11 @@ void spi_read_16bit_registers (spi_index_enum spi_n, const uint16 register_name,
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
diff --git a/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt b/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt
index f45bf81..4df6214 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt
+++ b/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt
@@ -1,3 +1,7 @@
+V3.3.2
+ ÐÂÔözf_device_menc15a´Å±àÂëÆ÷ÍâÉèÇý¶¯
+ ¸ü¸Äuart½ÓÊÕ»ú²¿·ÖÓï¾ä
+ ÐÞÕýSPIµÄ16λͨѶ´íλÎÊÌâ
V3.3.1
ÒÆ³ýÕý½»±àÂëÆ÷µÄ¶ÏÑÔ¼ì²â
ÐÂÔöÖØÃüÃû¹¤³Ì¹¤¾ß
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_headfile.h b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_headfile.h
index 3a140e3..c8f75f2 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_headfile.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_headfile.h
@@ -93,6 +93,7 @@
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
#include "zf_device_key.h"
+#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
#include "zf_device_mt9v03x.h"
#include "zf_device_oled.h"
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.c b/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.c
index cc42e43..adfc4a3 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.c
@@ -91,8 +91,10 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
+#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
+#endif
}break;
case SEEKFREE_ASSISTANT_WIRELESS_UART:
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_menc15a.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_menc15a.c
new file mode 100644
index 0000000..faaeba2
--- /dev/null
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_menc15a.c
@@ -0,0 +1,188 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* SCL/SPC ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SPC_PIN ºê¶¨Òå
+* SDA/DSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDI_PIN ºê¶¨Òå
+* SA0/SDO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_SDO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_device_config.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_spi.h"
+
+#include "zf_device_menc15a.h"
+
+uint16 menc15a_absolute_data[2] = {0};
+
+int16 menc15a_absolute_offset_data[2] = {0};
+
+int16 menc15a_speed_data[2] = {0};
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ¼ÆËã±àÂëÆ÷Ðýתƫ²î
+// ²ÎÊý˵Ã÷ encoder_max ±àÂëÆ÷¾«¶È Ìîдʮ½øÖÆÊý¾Ý
+// ²ÎÊý˵Ã÷ now_location µ±Ç°Î»ÖÃÐÅÏ¢
+// ²ÎÊý˵Ã÷ last_location ÉÏÒ»´ÎµÄλÖÃÐÅÏ¢
+// ·µ»Ø²ÎÊý int32 ¼ÆËãµÄÆ«²îÖµ
+// ʹÓÃʾÀý magnetic_encoder_get_offset();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+static int32 magnetic_encoder_get_offset (int32 encoder_max, int32 now_location, int32 last_location)
+{
+ int32 result_data = 0;
+
+ if((encoder_max / 2) < func_abs(now_location - last_location))
+ {
+ result_data = ((encoder_max / 2) < now_location ? (now_location - encoder_max - last_location) : (now_location + encoder_max - last_location));
+ }
+ else
+ {
+ result_data = (now_location - last_location);
+ }
+
+ return result_data;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý uint16 ¾ø¶ÔÖµ ½Ç¶ÈÊý¾Ý
+// ʹÓÃʾÀý menc15a_1_get_absolute_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module)
+{
+ uint16 read_data = 0;
+
+ uint16 data_last = menc15a_absolute_data[menc15a_module];
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8021);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ spi_write_8bit(MENC15A_2_SPI, 0x80);
+ spi_write_8bit(MENC15A_2_SPI, 0x21);
+ read_data = spi_read_8bit(MENC15A_2_SPI);
+ read_data = ((read_data << 8) | spi_read_8bit(MENC15A_2_SPI));
+
+ MENC15A_2_CS(1);
+ }
+
+ menc15a_absolute_data[menc15a_module] = (read_data & 0x7fff);
+
+ menc15a_absolute_offset_data[menc15a_module] = (int16)magnetic_encoder_get_offset(32768, menc15a_absolute_data[menc15a_module], data_last);
+
+ return menc15a_absolute_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é »ñÈ¡ MENC15A ´Å±àÂëÆ÷ µÄ תËÙÊý¾Ý
+// ²ÎÊý˵Ã÷ menc15a_module ´Å±àÂëÆ÷ Ä£¿éºÅ
+// ·µ»Ø²ÎÊý int16 תËÙÊý¾Ý(ÿÃëÐýת»¡¶È rad/s)
+// ʹÓÃʾÀý menc15a_1_get_speed_data();
+// ±¸×¢ÐÅÏ¢ Ö´Ðиú¯Êýºó£¬¿ÉÖ±½ÓʹÓ÷µ»ØÖµ Ò²¿ÉÒÔͨ¹ý²éѯ¶ÔÓ¦±äÁ¿»ñÈ¡½á¹û
+//-------------------------------------------------------------------------------------------------------------------
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module)
+{
+ int16 read_data = 0;
+
+ if(menc15a_module == menc15a_1_module)
+ {
+ MENC15A_1_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8032);
+
+ MENC15A_1_CS(1);
+ }
+ else
+ {
+ MENC15A_2_CS(0);
+
+ read_data = spi_read_16bit_register(MENC15A_2_SPI, 0x8032);
+
+ MENC15A_2_CS(1);
+ }
+
+ read_data = (read_data & 0x7fff);
+
+ if(read_data > 16384)
+ {
+ read_data = read_data - 32768;
+ }
+
+ menc15a_speed_data[menc15a_module] = (int16)((float)read_data * 1.917476f);
+
+ return menc15a_speed_data[menc15a_module];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// º¯Êý¼ò½é ³õʼ»¯ MENC15A
+// ²ÎÊý˵Ã÷ void
+// ·µ»Ø²ÎÊý uint8 1-³õʼ»¯Ê§°Ü 0-³õʼ»¯³É¹¦
+// ʹÓÃʾÀý menc15a_init();
+// ±¸×¢ÐÅÏ¢
+//-------------------------------------------------------------------------------------------------------------------
+uint8 menc15a_init(void)
+{
+ spi_init(MENC15A_1_SPI, SPI_MODE1, MENC15A_1_SPI_SPEED, MENC15A_1_CLK_PIN, MENC15A_1_MOSI_PIN, MENC15A_1_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-1 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_1_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-1 µÄ CS¶Ë¿Ú
+
+ spi_init(MENC15A_2_SPI, SPI_MODE1, MENC15A_2_SPI_SPEED, MENC15A_2_CLK_PIN, MENC15A_2_MOSI_PIN, MENC15A_2_MISO_PIN, SPI_CS_NULL); // ÅäÖà MENC15A-2 µÄ SPI¶Ë¿Ú
+ gpio_init(MENC15A_2_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ÅäÖà MENC15A-2 µÄ CS¶Ë¿Ú
+
+ return 0;
+}
+
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_menc15a.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_menc15a.h
new file mode 100644
index 0000000..068d877
--- /dev/null
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_menc15a.h
@@ -0,0 +1,102 @@
+/*********************************************************************************************************************
+* CYT2BL3 Opensourec Library ¼´£¨ CYT2BL3 ¿ªÔ´¿â£©ÊÇÒ»¸ö»ùÓÚ¹Ù·½ SDK ½Ó¿ÚµÄµÚÈý·½¿ªÔ´¿â
+* Copyright (c) 2022 SEEKFREE Öð·É¿Æ¼¼
+*
+* ±¾ÎļþÊÇ CYT2BL3 ¿ªÔ´¿âµÄÒ»²¿·Ö
+*
+* CYT2BL3 ¿ªÔ´¿â ÊÇÃâ·ÑÈí¼þ
+* Äú¿ÉÒÔ¸ù¾Ý×ÔÓÉÈí¼þ»ù½ð»á·¢²¼µÄ GPL£¨GNU General Public License£¬¼´ GNUͨÓù«¹²Ðí¿ÉÖ¤£©µÄÌõ¿î
+* ¼´ GPL µÄµÚ3°æ£¨¼´ GPL3.0£©»ò£¨ÄúÑ¡ÔñµÄ£©ÈκκóÀ´µÄ°æ±¾£¬ÖØÐ·¢²¼ºÍ/»òÐÞ¸ÄËü
+*
+* ±¾¿ªÔ´¿âµÄ·¢²¼ÊÇÏ£ÍûËüÄÜ·¢»Ó×÷Ó㬵«²¢Î´¶ÔÆä×÷Èκεı£Ö¤
+* ÉõÖÁûÓÐÒþº¬µÄÊÊÏúÐÔ»òÊʺÏÌØ¶¨ÓÃ;µÄ±£Ö¤
+* ¸ü¶àϸ½ÚÇë²Î¼û GPL
+*
+* ÄúÓ¦¸ÃÔÚÊÕµ½±¾¿ªÔ´¿âµÄͬʱÊÕµ½Ò»·Ý GPL µÄ¸±±¾
+* Èç¹ûûÓУ¬Çë²ÎÔÄ
+*
+* ¶îÍâ×¢Ã÷£º
+* ±¾¿ªÔ´¿âʹÓà GPL3.0 ¿ªÔ´Ðí¿ÉÖ¤ÐÒé ÒÔÉÏÐí¿ÉÉêÃ÷ΪÒëÎİ汾
+* Ðí¿ÉÉêÃ÷Ó¢ÎİæÔÚ libraries/doc Îļþ¼ÐÏ嵀 GPL3_permission_statement.txt ÎļþÖÐ
+* Ðí¿ÉÖ¤¸±±¾ÔÚ libraries Îļþ¼ÐÏ ¼´¸ÃÎļþ¼ÐÏ嵀 LICENSE Îļþ
+* »¶Ó¸÷λʹÓò¢´«²¥±¾³ÌÐò µ«ÐÞ¸ÄÄÚÈÝʱ±ØÐë±£ÁôÖð·É¿Æ¼¼µÄ°æÈ¨ÉùÃ÷£¨¼´±¾ÉùÃ÷£©
+*
+* ÎļþÃû³Æ zf_device_menc15a
+* ¹«Ë¾Ãû³Æ ³É¶¼Öð·É¿Æ¼¼ÓÐÏÞ¹«Ë¾
+* °æ±¾ÐÅÏ¢ ²é¿´ libraries/doc Îļþ¼ÐÄÚ version Îļþ °æ±¾ËµÃ÷
+* ¿ª·¢»·¾³ IAR 9.40.1
+* ÊÊÓÃÆ½Ì¨ CYT2BL3
+* µêÆÌÁ´½Ó https://seekfree.taobao.com/
+*
+* Ð޸ļǼ
+* ÈÕÆÚ ×÷Õß ±¸×¢
+* 2024-11-19 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ½ÓÏß¶¨Ò壺
+* ------------------------------------
+* Ä£¿é¹Ü½Å µ¥Æ¬»ú¹Ü½Å
+* // Ó²¼þ SPI Òý½Å
+* CLK ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CLK_PIN ºê¶¨Òå
+* MOSI ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MOSI_PIN ºê¶¨Òå
+* MISO ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_MISO_PIN ºê¶¨Òå
+* CS ²é¿´ zf_device_menc15a.h ÖÐ MENC15A_CS_PIN ºê¶¨Òå
+* VCC 3.3VµçÔ´
+* GND µçÔ´µØ
+* ÆäÓàÒý½ÅÐü¿Õ
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_menc15a_h_
+#define _zf_device_menc15a_h_
+
+#include "zf_common_typedef.h"
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+#define MENC15A_1_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_1_SPI (SPI_0 ) // ´Å±àÂëÆ÷1 Ó²¼þ SPI ºÅ
+#define MENC15A_1_CLK_PIN (SPI0_SCLK_P20_11) // ´Å±àÂëÆ÷1 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_1_MOSI_PIN (SPI0_MOSI_P20_14) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_1_MISO_PIN (SPI0_MISO_P20_12) // ´Å±àÂëÆ÷1 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_1_CS_PIN (P20_13) // ´Å±àÂëÆ÷1 CS ƬѡÒý½Å
+#define MENC15A_1_CS(x) ((x) ? (gpio_high(MENC15A_1_CS_PIN)) : (gpio_low(MENC15A_1_CS_PIN)))
+
+
+#define MENC15A_2_SPI_SPEED (20 * 1000 * 1000) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ËÙÂÊ
+#define MENC15A_2_SPI (SPI_0 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI ºÅ
+#define MENC15A_2_CLK_PIN (SPI0_SCLK_P20_11 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI SCK Òý½Å
+#define MENC15A_2_MOSI_PIN (SPI0_MOSI_P20_14 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MOSI Òý½Å
+#define MENC15A_2_MISO_PIN (SPI0_MISO_P20_12 ) // ´Å±àÂëÆ÷2 Ó²¼þ SPI MISO Òý½Å
+#define MENC15A_2_CS_PIN (P20_15) // ´Å±àÂëÆ÷2 CS ƬѡÒý½Å
+#define MENC15A_2_CS(x) ((x) ? (gpio_high(MENC15A_2_CS_PIN)) : (gpio_low(MENC15A_2_CS_PIN)))
+
+//====================================================Ó²¼þ SPI Çý¶¯====================================================
+
+// ö¾Ù´Å±àÂëÄ£¿é
+typedef enum
+{
+ menc15a_1_module,
+ menc15a_2_module,
+
+}menc15a_module_enum;
+
+//================================================¶¨Òå MENC15A »ù±¾ÅäÖÃ================================================
+
+
+extern uint16 menc15a_absolute_data[2];
+
+extern int16 menc15a_absolute_offset_data[2];
+
+extern int16 menc15a_speed_data[2];
+
+
+uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module);
+int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module);
+
+uint8 menc15a_init(void);
+
+
+#endif
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_uart_receiver.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_uart_receiver.c
index 3ebb3bd..ade446d 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_uart_receiver.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_uart_receiver.c
@@ -91,7 +91,7 @@ static void uart_receiver_analysis (uart_receiver_struct *remote_data,uint8 * bu
remote_data->channel[num++] = (buffer[5] >> 1 | buffer[6] << 7 ) & 0x07FF;
remote_data->channel[num++] = (buffer[6] >> 4 | buffer[7] << 4 ) & 0x07FF;
remote_data->channel[num++] = (buffer[7] >> 7 | buffer[8] << 1 | buffer[9] << 9 ) & 0x07FF;
- remote_data->state = (SBUS_NORMAL_STATE == buffer[23]) ? 1 : 0;
+ remote_data->state = (SBUS_ABNORMAL_STATE == (buffer[23] & SBUS_ABNORMAL_STATE)) ? 0 : 1;
uart_receiver.finsh_flag = 1;
}
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_uart_receiver.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_uart_receiver.h
index 948ab2f..6498dcb 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_uart_receiver.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_uart_receiver.h
@@ -55,8 +55,7 @@
#define REV_DATA_LEN ( 25 ) // SBUSÖ¡³¤
#define FRAME_STAR ( 0X0F ) // Ö¡Í·ÐÅÏ¢
#define FRAME_END ( 0X00 ) // ֡βÐÅÏ¢
-#define SBUS_NORMAL_STATE ( 0X03 ) // Õý³£×´Ì¬
-#define SBUS_ABNORMAL_STATE ( 0X0F ) // ʧ¿Ø×´Ì¬
+#define SBUS_ABNORMAL_STATE ( 0X04 ) // ʧ¿Ø×´Ì¬
typedef struct
{
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/外设文件说明.txt b/Seekfree_TC264_Opensource_Library/libraries/zf_device/外设文件说明.txt
index 1c96965..40d9e28 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/外设文件说明.txt
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/外设文件说明.txt
@@ -88,6 +88,8 @@ zf_device_uart_receiver.h SUBS
zf_device_absolute_encoder.h 360¡ã λÖô«¸ÐÆ÷ ¾ø¶ÔʽÃÔÄã mini ±àÂëÆ÷ ·Ö±æÂÊ£º0.088¡ã
+zf_device_menc15a.h 15λ¸ß¾«¶È´Å±àÂëÆ÷Çý¶¯ λÖÃʽ
+
zf_device_gnss.h GPS ¼° RTK ¶¨Î»Ä£¿é ˫Ƶ¸ß¾«¶È¶¨Î»Ä£¿é ÑÇÃ×¼¶¶¨Î»
zf_device_key.h GPIO °´¼üÇý¶¯ ÓÃÓÚ¼ì²âÖ÷°å°´¼ü״̬
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_spi.c b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_spi.c
index f817dd9..d74841c 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_spi.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_spi.c
@@ -766,11 +766,11 @@ uint16 spi_read_16bit_register (spi_index_enum spi_n, const uint16 register_name
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø
@@ -818,11 +818,11 @@ void spi_read_16bit_registers (spi_index_enum spi_n, const uint16 register_name,
IfxQspi_writeTransmitFifo(moudle, (uint8)((register_name & 0xFF00) >> 8)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï Ê״η¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÎÞÊý¾Ý
IfxQspi_writeTransmitFifo(moudle, (uint8)(register_name & 0x00FF)); // ½«·¢Ë͵ÄÊý¾ÝдÈ뻺³åÇø
- while(moudle->STATUS.B.RXFIFOLEVEL == 0); // µÈ´ý½ÓÊÕÍê±Ï
+ while(moudle->STATUS.B.RXFIFOLEVEL == 1); // µÈ´ý½ÓÊÕÍê±Ï Ôٴη¢ËÍÊý¾Ý ´Ëʱ½ÓÊÕ»º³åÇøÓÐ1¸öÊý¾Ý
spi_clear_fifo(moudle); // Çå³ý½ÓÊÕ»º´æÇø