78 lines
1.9 KiB
C
Raw Normal View History

2022-03-28 17:19:25 +08:00
#include "wm_touch.h"
// 在使用TOUCH功能时TOUCH0PA7必须复用为TOUCH功能不可以作为其他功能
HAL_StatusTypeDef HAL_TOUCH_Init(TOUCH_HandleTypeDef *htouch)
{
int i;
if (htouch == NULL)
{
return HAL_ERROR;
}
assert_param(IS_TOUCH_INSTANCE(htouch->Instance));
assert_param(IS_TOUCH_CHANNELS(htouch->Init.Channel));
assert_param(IS_TOUCH_WINDOW(htouch->Init.Window));
assert_param(IS_TOUCH_SCANPERIOD(htouch->Init.ScanPeriod));
HAL_TOUCH_MspInit(htouch);
WRITE_REG(htouch->Instance->CR, 0);
WRITE_REG(htouch->Instance->IE_IF, 0x0000FFFF);
for (i = 0; i < 16; i++)
{
if (htouch->Init.Channel & (1 << i))
{
assert_param(IS_TOUCH_THRESHOLD(htouch->Init.Threshold[i]));
MODIFY_REG(*((&(htouch->Instance->CH0CR)) + i), TOUCH_CH0CR_THRESHOLD, htouch->Init.Threshold[i]);
if (htouch->Init.Irq_en & (1 << i))
{
SET_BIT(htouch->Instance->IE_IF, (1 << (16 + i)));
}
}
}
WRITE_REG(htouch->Instance->CR, ((htouch->Init.Channel << TOUCH_CR_CH_SEL_Pos) |
(htouch->Init.ScanPeriod << TOUCH_CR_SCAN_PERIOD_Pos) |
(htouch->Init.Window << TOUCH_CR_CAPDET_CNT_Pos) |
TOUCH_CR_EN));
return HAL_OK;
}
HAL_StatusTypeDef HAL_TOUCH_DeInit(TOUCH_HandleTypeDef *htouch)
{
if (htouch == NULL)
{
return HAL_ERROR;
}
CLEAR_BIT(htouch->Instance->CR, TOUCH_CR_EN);
HAL_TOUCH_MspDeInit(htouch);
return HAL_OK;
}
__attribute__((weak)) void HAL_TOUCH_MspInit(TOUCH_HandleTypeDef *htouch)
{
UNUSED(htouch);
}
__attribute__((weak)) void HAL_TOUCH_MspDeInit(TOUCH_HandleTypeDef *htouch)
{
UNUSED(htouch);
}
__attribute__((weak)) void HAL_TOUCH_Callback(TOUCH_HandleTypeDef *htouch, uint16_t Flag)
{
UNUSED(htouch);
}
void HAL_TOUCH_IRQHandler(TOUCH_HandleTypeDef *htouch)
{
uint32_t flag = __HAL_TOUCH_GET_FLAG(htouch);
if (flag != RESET)
{
__HAL_TOUCH_CLEAR_IT(htouch, flag);
HAL_TOUCH_Callback(htouch, flag & TOUCH_IE_IF_FLAG);
}
}