122 lines
5.3 KiB
C
122 lines
5.3 KiB
C
|
|
#include "../main/SystemInclude.h"
|
|||
|
|
|
|||
|
|
//void XLINK_Init(XLINK0_INPUT_SOURCE_t input_src , XLINK0_OUTPUT_PORT_t output_src)
|
|||
|
|
|
|||
|
|
/**------------------------------------------------------------------------
|
|||
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> LPTIM ͨ<EFBFBD><EFBFBD> XLINK <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADC ת<EFBFBD><EFBFBD>
|
|||
|
|
* @param lptimer_x: LPTIM ʵ<EFBFBD><EFBFBD> (LPTIM1 <EFBFBD><EFBFBD> LPTIM2)
|
|||
|
|
* @param ADCx: ADC ʵ<EFBFBD><EFBFBD> (ADC_0 <EFBFBD><EFBFBD> ADC_1)
|
|||
|
|
* @note <EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD> LPTIM <EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>ͨ<EFBFBD><EFBFBD> XLINK0 ֱ<EFBFBD><EFBFBD>·<EFBFBD>ɵ<EFBFBD> ADC Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD> LPTIM <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD>¼<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADC <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @example:
|
|||
|
|
* XLINK_LPTIM_To_ADC_Trigger(LPTIM1, ADC_0); // LPTIM1 <20><><EFBFBD><EFBFBD> ADC0
|
|||
|
|
* XLINK_LPTIM_To_ADC_Trigger(LPTIM2, ADC_1); // LPTIM2 <20><><EFBFBD><EFBFBD> ADC1
|
|||
|
|
**/
|
|||
|
|
void XLINK_LPTIM_To_ADC_Trigger(LPTIM_TypeDef *lptimer_x, ADC_ID_t ADCx)
|
|||
|
|
{
|
|||
|
|
uint32_t input_src, output_src;
|
|||
|
|
XLINK_InitTypeDef XLINK_InitStructure;
|
|||
|
|
|
|||
|
|
/* <20><><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7>Լ<EFBFBD><D4BC><EFBFBD> */
|
|||
|
|
if (lptimer_x != LPTIM1 && lptimer_x != LPTIM2) return;
|
|||
|
|
if (ADCx != ADC_0 && ADCx != ADC_1) return;
|
|||
|
|
|
|||
|
|
/* 1. <20><><EFBFBD><EFBFBD>LPTIMERѡ<52><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ */
|
|||
|
|
/* 2. <20><><EFBFBD><EFBFBD>ADCѡ<43><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ */
|
|||
|
|
// if(lptimer_x == LPTIM1) input_src = XLINK0_INPUT_LPTIM1_INT; //XLINK0_INPUT_LPTIM1_INT XLINK0_INPUT_XB_IN2
|
|||
|
|
// else if(lptimer_x == LPTIM2) input_src = XLINK0_INPUT_LPTIM2_INT;
|
|||
|
|
// else return;
|
|||
|
|
// if(ADCx == ADC_0) output_src = XLINK0_OUTPUT_ADC0_TRIG;
|
|||
|
|
// else if(ADCx == ADC_1) output_src = XLINK0_OUTPUT_ADC1_TRIG;
|
|||
|
|
// else return;
|
|||
|
|
|
|||
|
|
/* <20><><EFBFBD><EFBFBD> LPTIM ѡ<><D1A1> XLINK0 <20><><EFBFBD><EFBFBD>Դ */
|
|||
|
|
input_src = (lptimer_x == LPTIM1) ? XLINK0_INPUT_LPTIM1_INT : XLINK0_INPUT_LPTIM2_INT;
|
|||
|
|
/* <20><><EFBFBD><EFBFBD> ADC ѡ<><D1A1> XLINK0 <20><><EFBFBD><EFBFBD>Դ */
|
|||
|
|
output_src = (ADCx == ADC_0) ? XLINK0_OUTPUT_ADC0_TRIG : XLINK0_OUTPUT_ADC1_TRIG;
|
|||
|
|
|
|||
|
|
/* 3. <20><><EFBFBD><EFBFBD>XLINK·<4B><C2B7> */ // XLINK0_INPUT_PMU
|
|||
|
|
XLINK_InitStructure.XLink_0_Input = input_src;
|
|||
|
|
XLINK_InitStructure.XLink_0_Output = output_src;
|
|||
|
|
LHL_XLINK_Init(&XLINK_InitStructure);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**------------------------------------------------------------------------
|
|||
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> RTC <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD> XLINK <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADC ת<EFBFBD><EFBFBD>
|
|||
|
|
* @param ADCx: ADC ʵ<EFBFBD><EFBFBD> (ADC_0 <EFBFBD><EFBFBD> ADC_1)
|
|||
|
|
* @note <EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> RTC <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>ͨ<EFBFBD><EFBFBD> XLINK0 ֱ<EFBFBD><EFBFBD>·<EFBFBD>ɵ<EFBFBD> ADC Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD> RTC <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADC <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @example:
|
|||
|
|
* XLINK_RTC_ALARM_To_ADC_Trigger(ADC_0); // RTC <20><><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD> ADC0
|
|||
|
|
* XLINK_RTC_ALARM_To_ADC_Trigger(ADC_1); // RTC <20><><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD> ADC1
|
|||
|
|
**/
|
|||
|
|
void XLINK_RTC_ALARM_To_ADC_Trigger(ADC_ID_t ADCx)
|
|||
|
|
{
|
|||
|
|
uint32_t input_src, output_src;
|
|||
|
|
XLINK_InitTypeDef XLINK_InitStructure;
|
|||
|
|
|
|||
|
|
/* <20><><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7>Լ<EFBFBD><D4BC><EFBFBD> */
|
|||
|
|
if (ADCx != ADC_0 && ADCx != ADC_1) return;
|
|||
|
|
|
|||
|
|
/* 1. ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ */
|
|||
|
|
input_src = XLINK0_INPUT_RTC_ALARM;
|
|||
|
|
|
|||
|
|
/* 2. <20><><EFBFBD><EFBFBD>ADCѡ<43><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ */
|
|||
|
|
output_src = (ADCx == ADC_0) ? XLINK0_OUTPUT_ADC0_TRIG : XLINK0_OUTPUT_ADC1_TRIG;
|
|||
|
|
|
|||
|
|
/* 3. <20><><EFBFBD><EFBFBD>XLINK·<4B><C2B7> */
|
|||
|
|
XLINK_InitStructure.XLink_0_Input = input_src;
|
|||
|
|
XLINK_InitStructure.XLink_0_Output = output_src;
|
|||
|
|
LHL_XLINK_Init(&XLINK_InitStructure);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**------------------------------------------------------------------------
|
|||
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> GPIO <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD> XLINK <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADC<EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param GPIOx: GPIO <EFBFBD>˿<EFBFBD> (pGPIO0/pGPIO1/pGPIO2)
|
|||
|
|
* @param pin_pos: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD> (0~3<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD> XB_IN <EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|||
|
|
* @param ADCx: ADC_0 <EFBFBD><EFBFBD> ADC_1
|
|||
|
|
* @param invert: ENABLE ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>DISABLE <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>
|
|||
|
|
* @note
|
|||
|
|
* - <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> GPIO <EFBFBD><EFBFBD> XB_IN <EFBFBD>ź<EFBFBD>ֱ<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD> XLINK0 ·<EFBFBD>ɵ<EFBFBD> ADC <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* - ȡ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD> XLINK1 <EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> LU_OUT0<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD> XLINK0 ·<EFBFBD>ɵ<EFBFBD> ADC <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸı<EFBFBD><EFBFBD>źű<EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD>ƥ<EFBFBD><EFBFBD> ADC <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @example:
|
|||
|
|
* XLINK_GPIO_To_ADC_Trigger(pGPIO0, 3, ADC_1, ENABLE); // P0.3 ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADC1
|
|||
|
|
* XLINK_GPIO_To_ADC_Trigger(pGPIO0, 3, ADC_1, DISABLE); // ֱ<>Ӵ<EFBFBD><D3B4><EFBFBD> ADC1
|
|||
|
|
**/
|
|||
|
|
void XLINK_GPIO_To_ADC_Trigger(GPIO_TypeDef *GPIOx, uint8_t pin_pos, ADC_ID_t ADCx, FunctionalState invert)
|
|||
|
|
{
|
|||
|
|
/* <20><>֧<EFBFBD><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0~3 */
|
|||
|
|
if (pin_pos > 3) return;
|
|||
|
|
|
|||
|
|
/* <20><><EFBFBD><EFBFBD> XLINK <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD>٣<EFBFBD> */
|
|||
|
|
uint32_t xlink0_input = XLINK0_INPUT_XB_IN0 + pin_pos;
|
|||
|
|
uint32_t xlink1_input = XLINK1_INPUT_XB_IN0 + pin_pos;
|
|||
|
|
|
|||
|
|
/* <20><>ʼ<EFBFBD><CABC> GPIO Ϊ<><CEAA><EFBFBD>룬<EFBFBD><EBA3AC><EFBFBD><EFBFBD>Ϊ XB_IN<49><4E>AF ֵ<>̶<EFBFBD>Ϊ 6<><36> */
|
|||
|
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|||
|
|
GPIO_InitStructure.Pin = (1 << pin_pos);
|
|||
|
|
GPIO_InitStructure.Mode = GPIO_MODE_INPUT;
|
|||
|
|
GPIO_InitStructure.Pull = GPIO_NOPULL;
|
|||
|
|
GPIO_InitStructure.SchmittTrigger = ENABLE;
|
|||
|
|
GPIO_InitStructure.Alternate = 6; // <20><><EFBFBD><EFBFBD> XB_IN <20><> AF ֵ<><D6B5>Ϊ 6 : GPIO0_1_AF_XB_IN1 GPIO0_2_AF_XB_IN2 GPIO0_3_AF_XB_IN3 GPIO1_0_AF_XB_IN0 .....
|
|||
|
|
LHL_GPIO_Init(GPIOx, &GPIO_InitStructure);
|
|||
|
|
|
|||
|
|
if (invert == ENABLE) {
|
|||
|
|
/* ȡ<><C8A1>·<EFBFBD><C2B7><EFBFBD><EFBFBD>XLINK1 ȡ<><C8A1> -> LU_OUT0 */
|
|||
|
|
LHL_XLINK_InvertSingal((XLINK1_INPUT_SOURCE_t)xlink1_input, XLINK1_OUTPUT_LU_OUT0);
|
|||
|
|
|
|||
|
|
/* XLINK0 ·<><C2B7> LU_OUT0 <20><> ADC <20><><EFBFBD><EFBFBD> */
|
|||
|
|
XLINK_InitTypeDef XLINK_InitStructure;
|
|||
|
|
XLINK_InitStructure.XLink_0_Input = XLINK0_INPUT_LU_OUT0;
|
|||
|
|
XLINK_InitStructure.XLink_0_Output = (ADCx == ADC_0) ? XLINK0_OUTPUT_ADC0_TRIG : XLINK0_OUTPUT_ADC1_TRIG;
|
|||
|
|
LHL_XLINK_Init(&XLINK_InitStructure);
|
|||
|
|
} else {
|
|||
|
|
/* ֱ<><D6B1>·<EFBFBD><C2B7><EFBFBD><EFBFBD>XLINK0 ·<><C2B7> XB_IN <20><> ADC <20><><EFBFBD><EFBFBD> */
|
|||
|
|
XLINK_InitTypeDef XLINK_InitStructure;
|
|||
|
|
XLINK_InitStructure.XLink_0_Input = xlink0_input;
|
|||
|
|
XLINK_InitStructure.XLink_0_Output = (ADCx == ADC_0) ? XLINK0_OUTPUT_ADC0_TRIG : XLINK0_OUTPUT_ADC1_TRIG;
|
|||
|
|
LHL_XLINK_Init(&XLINK_InitStructure);
|
|||
|
|
}
|
|||
|
|
}
|