/**
 * @brief HALL-HALL状态值和IO对应关系
 * @details
 * 给hall口提供电压，记录输入到IO的电平以及hall状态。
 * |GPIO|AF|
 * |-|-|
 * |P0.5|HALL_IN0|
 * |P0.6|HALL_IN1|
 * |P0.7|HALL_IN2|
 *
 */
#include "lks32mc09x_gpio.h"
#include "lks32mc09x_hall.h"
volatile uint32_t hall_val;    // 当前霍尔值
volatile uint32_t hall_fltval; // 滤波后的霍尔值
/**
 * @brief 主函数，用于测试HSI时钟输出及GPIO翻转
 */
int main(void)
{
    GPIO_Config(GPIO0, GPIO_PinSource_5, GPIO_Mode_IN, GPIO_AF_HALL); // HALL_IN0
    GPIO_Config(GPIO0, GPIO_PinSource_6, GPIO_Mode_IN, GPIO_AF_HALL); // HALL_IN1
    GPIO_Config(GPIO0, GPIO_PinSource_7, GPIO_Mode_IN, GPIO_AF_HALL); // HALL_IN2

    HALL_InitTypeDef HALL_InitStruct;

    HALL_StructInit(&HALL_InitStruct);

    HALL_InitStruct.FilterLen = 10;                /* Hall信号数字滤波长度 512个时钟周期 */
    HALL_InitStruct.ClockDivision = HALL_CLK_DIV1; /* 设置Hall模块时钟分频系数 */
    HALL_InitStruct.Filter75_Ena = ENABLE;         /* Hall信号滤波方式，7判5模式或者全1有效模式 */
    HALL_InitStruct.HALL_Ena = ENABLE;             /* 模块使能 */
    HALL_InitStruct.Capture_IRQ_Ena = ENABLE;      /* 捕捉中断使能 */
    HALL_InitStruct.OverFlow_IRQ_Ena = ENABLE;     /* 超时中断使能 */
    HALL_InitStruct.CountTH = 960000;              /* Hall模块计数模值，计数超过模值会产生超时中断 */
    HALL_InitStruct.softIE = ENABLE;               /* 软件中断失能 */

    HALL_Init(&HALL_InitStruct); /* HALL初化 */
    HALL_Cmd(ENABLE);            /* HALL使能 */

    while (1)
    {
        hall_val = HALL_GetCaptureValue();
        hall_fltval = HALL_GetFilterValue();
    }
}

