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); // Çå³ý½ÓÊÕ»º´æÇø