最終效果
最終通過檔案的注釋,生成一個幫助文檔。

軟體安裝
需要安裝3個軟體
1.Doxygen
2.graphviz(可以根據檔案的引用關系生成調用關系圖)
3.htmlhelp(生成windos脫機可用的幫助文檔)
打包位址 連結:.
提取碼:c98c
自行預設安裝即可
注釋規範
想要生成注釋文檔,首先你的注釋要符合Doxygen的要求
檔案注釋
/*!
* @file LQ_CTIME.h
*
* @brief CTIME驅動檔案
*
* @company 北京龍邱智能科技
*
* @author LQ-005
*
* @note LPC55S69有5個32位的CTIME
*
* @version V1.1 2019/12/06 優化注釋 Doxygen
*
* @Software IAR8.32 or MDK5.28
*
* @par URL http://shop36265907.taobao.com
* http://www.lqist.cn
*
* @date 2019/10/18 星期五
*/
生成的效果圖
宏定義注釋
/*! CTIMER 最大占空比 可自行修改 */
#define CMTER_PWM_MAX 10000
生成的效果圖
結構體、枚舉體注釋
/**
* @brief CTIMER子產品 脈沖計數通道
* @note CTIMER 子產品 脈沖捕獲通道
* @note CTIMER 子產品的輸入管腳并不是直接CTIMER連接配接的 而是通過INPUTMUX子產品連接配接的
* @note CTIMER計數器 --- INPUTMUX輸入多路複用子產品17路通道 ---- 晶片外部管腳
* @note 簡單說 就是CTIMER的捕獲通道每個都可以與 INPUTMUX子產品的17路通道相連結
* @note INPUTMUX子產品的17路通道相連結的管腳如下
*/
typedef enum
{
CTInput0_P0_1 = 0x0000 + 1, CTInput0_P0_13 = 0x0000 + 2, /*!< INPUTMUX—CTIMER 輸入通道0管腳 */
CTInput1_P0_14 = 0x0100 + 1, CTInput1_P0_2 = 0x0100 + 2, /*!< INPUTMUX—CTIMER 輸入通道1管腳 */
CTInput2_P1_0 = 0x0200 + 1, CTInput2_P1_28 = 0x0200 + 2, /*!< INPUTMUX—CTIMER 輸入通道2管腳 */
CTInput3_P1_1 = 0x0300 + 1, CTInput3_P1_26 = 0x0300 + 2, /*!< INPUTMUX—CTIMER 輸入通道3管腳 */
CTInput4_P1_9 = 0x0400 + 1, CTInput4_P0_16 = 0x0400 + 2, /*!< INPUTMUX—CTIMER 輸入通道4管腳 */
CTInput5_P1_11 = 0x0500 + 1, /*!< INPUTMUX—CTIMER 輸入通道5管腳 */
CTInput6_P1_13 = 0x0600 + 1, /*!< INPUTMUX—CTIMER 輸入通道6管腳 */
CTInput7_P1_15 = 0x0700 + 1, /*!< INPUTMUX—CTIMER 輸入通道7管腳 */
CTInput8_P0_24 = 0x0800 + 1, /*!< INPUTMUX—CTIMER 輸入通道8管腳 */
CTInput9_P0_25 = 0x0900 + 1, /*!< INPUTMUX—CTIMER 輸入通道9管腳 */
CTInput10_P0_10= 0x0A00 + 1, /*!< INPUTMUX—CTIMER 輸入通道10管腳 */
CTInput11_P0_28= 0x0B00 + 1, /*!< INPUTMUX—CTIMER 輸入通道11管腳 */
CTInput12_P0_4 = 0x0C00 + 1, /*!< INPUTMUX—CTIMER 輸入通道12管腳 */
CTInput13_P0_6 = 0x0D00 + 1, /*!< INPUTMUX—CTIMER 輸入通道13管腳 */
CTInput14_P1_20= 0x0E00 + 1, CTInput14_P0_26= 0x0E00 + 2, /*!< INPUTMUX—CTIMER 輸入通道14管腳 */
CTInput15_P0_20= 0x0F00 + 1, CTInput15_P0_22= 0x0F00 + 2, /*!< INPUTMUX—CTIMER 輸入通道15管腳 */
CTInput16_P0_15= 0x1000 + 1, /*!< INPUTMUX—CTIMER 輸入通道16管腳 */
} CTIMER_InputChannel_t;
生成的效果圖
全局變量
/** DMA link傳輸描述符 */
extern dma_descriptor_t s_dma_descriptor_table0[];
生成的效果圖
函數注釋
/*!
* @brief 初始化CTIMER為PWM輸出功能
*
* @param matchChannel : CTIMER通道 LQ_CTIMER.h中枚舉體
* @param duty : 占空比 * CMTER_PWM_MAX
* @param pwmFreq_Hz : 頻率
*
* @return 無
*
* @note 一個CTIMER子產品隻能用作脈沖計數和PWM輸出的一種
* @note 一個CTIMER子產品最多隻能輸出3路PWM頻率相同的PWM波
*
* @see CTIMER_InitPwmConfig(CT0Outpute0_P0_0, 5000, 100);//初始化P0_0 作為CTIMER0的通道0 的PWM輸出口 頻率100Hz 占空比 百分之(5000/CMTER_PWM_MAX)*100
*
* @date 2019/5/7 星期二
*/
void CTIMER_InitPwmConfig(CTIMER_OutputChannel_t matchChannel,uint32_t duty,uint32_t pwmFreq_Hz);
生成的效果圖
Doxygen配置
1.首先我們建立一個檔案夾,将按上面規則注釋的代碼檔案放裡面(注意,需要所有的代碼保持一樣的編碼方式,這裡用的是GB2312)
/*!
* @file LQ_CTIME.c
*
* @brief CTIME驅動檔案
*
* @company 北京龍邱智能科技
*
* @author LQ-005
*
* @note LPC55S69有5個32位的CTIME
*
* @version V1.1 2019/12/06 優化注釋 Doxygen
*
* @Software IAR8.32 or MDK5.28
*
* @par URL http://shop36265907.taobao.com
* http://www.lqist.cn
*
* @date 2019/10/18 星期五
*/
#include "fsl_inputmux.h"
#include "fsl_iocon.h"
#include "fsl_ctimer.h"
#include "LQ_CTIME.h"
#include "LQ_GPIO.h"
/*!
* @brief 初始化CTIMER為PWM輸出功能
*
* @param matchChannel : CTIMER通道 LQ_CTIMER.h中枚舉體
* @param duty : 占空比 * CMTER_PWM_MAX
* @param pwmFreq_Hz : 頻率
*
* @return 無
*
* @note 一個CTIMER子產品隻能用作脈沖計數和PWM輸出的一種
* @note 一個CTIMER子產品最多隻能輸出3路PWM頻率相同的PWM波
*
* @see CTIMER_InitPwmConfig(CT0Outpute0_P0_0, 5000, 100);//初始化P0_0 作為CTIMER0的通道0 的PWM輸出口 頻率100Hz 占空比 百分之(5000/CMTER_PWM_MAX)*100
*
* @date 2019/5/7 星期二
*/
void CTIMER_InitPwmConfig(CTIMER_OutputChannel_t matchChannel, uint32_t duty, uint32_t pwmFreq_Hz)
{
static uint8_t flag[5];
uint8_t index = matchChannel >> 12;
uint8_t channel_temp = (matchChannel&0x0F00)>>8;
CTIMER_Type * TIMERN[] = CTIMER_BASE_PTRS;
CTIMER_Type * base = TIMERN[index];
assert(pwmFreq_Hz > 0);
uint32_t reg;
ctimer_config_t cconfig;
/* 選擇時鐘源 */
CLOCK_AttachClk((clock_attach_id_t)(kMAIN_CLK_to_CTIMER0 + index));
if ((channel_temp) == kCTIMER_Match_3)
{
return ; //周期通道
}
/* 防止重複初始化 */
if(flag[index] < 1)
{
flag[index]++;
/* 初始化 CTIMER */
CTIMER_GetDefaultConfig(&cconfig);
CTIMER_Init(base, &cconfig);
}
/* 初始化對應管腳 */
CTIME_PWMPinInit(matchChannel);
pwmFreq_Hz = (CLOCK_GetCTimerClkFreq(index) / pwmFreq_Hz) - 1;
/* 使能PWM模式 */
base->PWMC |= (1U << (channel_temp));
/* 清除标志位 */
reg = base->MCR;
reg &= ~((CTIMER_MCR_MR0R_MASK | CTIMER_MCR_MR0S_MASK | CTIMER_MCR_MR0I_MASK) << ((channel_temp) * 3));
/* 設定周期通道 */
reg |= CTIMER_MCR_MR3R_MASK;
base->MCR = reg;
/* 配置PWM頻率 */
base->MR[kCTIMER_Match_3] = pwmFreq_Hz;
/* 配置占空比 */
base->MR[(channel_temp)] = (uint32_t)(pwmFreq_Hz * ((float)(CMTER_PWM_MAX - duty)/CMTER_PWM_MAX));
/* 清除标志位 */
CTIMER_ClearStatusFlags(base, CTIMER_IR_MR0INT_MASK << (channel_temp));
CTIMER_StartTimer(base);
return;
}
/*!
* @brief CTIMER 更新PWM占空比
*
* @param matchChannel : CTIMER通道
* @param duty : 占空比 * CMTER_PWM_MAX
*
* @return 無
*
* @note 使用前請先初始化對應通道
*
* @see CTIMER_SetDuty(CT0Outpute0_P0_0, 4000); //設定P0_0 通道 PWM占空比 百分之 百分之(4000/CMTER_PWM_MAX)*100
*
* @date 2019/5/7 星期二
*/
void CTIMER_SetDuty(CTIMER_OutputChannel_t matchChannel, uint32_t duty)
{
CTIMER_Type * TIMERN[] = CTIMER_BASE_PTRS;
CTIMER_Type * base = TIMERN[matchChannel >> 12];
uint32_t pulsePeriod = 0, period;
/* 擷取周期 */
period = base->MR[kCTIMER_Match_3];
if (duty == 0)
{
pulsePeriod = period + 1;
}
else
{
pulsePeriod = (uint32_t)(period * ((float)(CMTER_PWM_MAX - duty)/CMTER_PWM_MAX));
}
/* 更新占空比 */
base->MR[((matchChannel&0x0F00)>>8)] = pulsePeriod;
}
/*!
* @brief 初始化CTIMER 作為脈沖計數功能
*
* @param base : CTIMER0 - CTIMER4
* @param channel : 輸入脈沖計數通道
*
* @return 無
*
* @note LPC55S69隻能用帶方向編碼器
*
* @see CTIMER_InitCapConfig(CTIMER0, CTInput0_P0_1);//初始化CTIMER0 為脈沖捕獲功能 使用P0_1管腳捕獲脈沖
*
* @date 2019/10/21 星期一
*/
void CTIMER_InitCapConfig(CTIMER_Type *base, CTIMER_InputChannel_t channel)
{
/* 開啟多路複用器時鐘 */
CLOCK_EnableClock(kCLOCK_InputMux);
uint8_t index = CTIMER_GetInstance(base);
int32_t temp = 0;
switch(index)
{
case 0:
temp = (TIMER0CAPTSEL0 << PMUX_SHIFT);
break;
case 1:
temp = (TIMER1CAPTSEL0 << PMUX_SHIFT);
break;
case 2:
temp = (TIMER2CAPTSEL0 << PMUX_SHIFT);
break;
case 3:
temp = (TIMER3CAPTSEL0 << PMUX_SHIFT);
break;
case 4:
temp = (TIMER4CAPTSEL0 << PMUX_SHIFT);
break;
}
/* 選擇時鐘源 */
CLOCK_AttachClk((clock_attach_id_t)(kMAIN_CLK_to_CTIMER0 + index));
/* 将多路複用器通道和CTIMER輸入捕獲通道連接配接起來 */
INPUTMUX_AttachSignal(INPUTMUX, 0U, (inputmux_connection_t)((channel >> 8)+temp));
/* 将對應管腳 複用為輸入捕獲通道 */
CTIMER_CAPPinInit(channel);
ctimer_config_t CTimerConfigStruct;
// 配置CTimer為輸入捕捉模式、計數器模式,下降沿捕捉
CTimerConfigStruct.mode = kCTIMER_IncreaseOnFallEdge;
CTimerConfigStruct.input= kCTIMER_Capture_0;
CTimerConfigStruct.prescale = 0U; // 設定分頻因子
CTIMER_Init(base, &CTimerConfigStruct);
CTIMER_StartTimer(base);
}
/*!
* @brief CTIMER 得到計數值
*
* @param base : CTIMER0 - CTIMER4
* @param pin : 方向管腳 DIR
*
* @return 脈沖計數值
*
* @note 使用前需要對CTMIE初始化 方向管腳也需要初始化
*
* @see CTIMER_GetCounter(CTIMER0, P1_11); //擷取CTIMER0脈沖計數值 P1_11接編碼器方向管腳(DIR)
*
* @date 2019/5/7 星期二
*/
uint32_t CTIMER_GetCounter(CTIMER_Type *base, GPIO_Name_t pin)
{
/* 擷取脈沖計數值 */
uint32_t temp = CTIMER_GetTimerCountValue(base);
/* 清除對應計數器 */
CTIMER_Reset(base);
if(PIN_Read(pin) == 0)
return -temp;
else
return temp;
}
/*!
* @brief CTIMER 清除計數器
*
* @param base : CTIMER0 - CTIMER4
*
* @return 脈沖計數值
*
* @note 使用前需要對CTMIE初始化
*
* @see CTIMER_ClearCounter(CTIMER0); //清除CTIMER0脈沖計數值
*
* @date 2019/5/7 星期二
*/
void CTIMER_ClearCounter(CTIMER_Type *base)
{
CTIMER_Reset(base);
}
/*!
* @brief CTIMER PWM輸出管腳初始化
*
* @param CTn_CHn : PWM通道
*
* @return 無
*
* @note 内部調用
*
* @see CTIME_PWMPinInit(CT0Output0_P0_0); //初始化P0_0 為CTIMER0 的通道0
*
* @date 2019/10/21 星期一
*/
void CTIME_PWMPinInit(CTIMER_OutputChannel_t CTn_CHn)
{
uint32_t PIOFun2_config = FUNC2|MODE_Up|MODE_GPIO|INVERT_Disable|DIGIMODE_Digital|FILTER_Disable;
uint32_t PIOFun3_config = FUNC3|MODE_Up|MODE_GPIO|INVERT_Disable|DIGIMODE_Digital|FILTER_Disable;
uint32_t PIOFun4_config = FUNC4|MODE_Up|MODE_GPIO|INVERT_Disable|DIGIMODE_Digital|FILTER_Disable;
/* 開啟 時鐘 */
CLOCK_EnableClock(kCLOCK_Iocon);
switch(CTn_CHn)
{
case CT0Output0_P0_0:
IOCON_PinMuxSet(IOCON, 0, 0, PIOFun3_config);
break;
case CT0Output0_P0_30:
IOCON_PinMuxSet(IOCON, 0,30, PIOFun4_config);
break;
case CT0Output1_P0_3:
IOCON_PinMuxSet(IOCON, 0, 3, PIOFun2_config);
break;
case CT0Output1_P0_31:
IOCON_PinMuxSet(IOCON, 0,31, PIOFun4_config);
break;
case CT0Output2_P0_19:
IOCON_PinMuxSet(IOCON, 0,19, PIOFun3_config);
break;
case CT0Output2_P1_31:
IOCON_PinMuxSet(IOCON, 1,31, PIOFun4_config);
break;
case CT1Output0_P0_18:
IOCON_PinMuxSet(IOCON, 0, 18, PIOFun3_config);
break;
case CT1Output0_P1_10:
IOCON_PinMuxSet(IOCON, 1,10, PIOFun3_config);
break;
case CT1Output1_P0_20:
IOCON_PinMuxSet(IOCON, 0, 20, PIOFun2_config);
break;
case CT1Output1_P1_12:
IOCON_PinMuxSet(IOCON, 1,12, PIOFun3_config);
break;
case CT1Output2_P0_23:
IOCON_PinMuxSet(IOCON, 0,23, PIOFun2_config);
break;
case CT1Output2_P1_14:
IOCON_PinMuxSet(IOCON, 1,14, PIOFun3_config);
break;
case CT2Output0_P0_10:
IOCON_PinMuxSet(IOCON, 0,10, PIOFun3_config);
break;
case CT2Output0_P1_5:
IOCON_PinMuxSet(IOCON, 1, 5, PIOFun3_config);
break;
case CT2Output1_P1_4:
IOCON_PinMuxSet(IOCON, 1, 4, PIOFun3_config);
break;
case CT2Output1_P1_6:
IOCON_PinMuxSet(IOCON, 1, 6, PIOFun3_config);
break;
case CT2Output2_P0_11:
IOCON_PinMuxSet(IOCON, 0,11, PIOFun2_config);
break;
case CT2Output2_P1_7:
IOCON_PinMuxSet(IOCON, 1,7, PIOFun3_config);
break;
case CT3Output0_P0_5:
IOCON_PinMuxSet(IOCON, 0, 5, PIOFun3_config);
break;
case CT3Output1_P1_19:
IOCON_PinMuxSet(IOCON, 1, 19, PIOFun3_config);
break;
case CT3Output2_P0_27:
IOCON_PinMuxSet(IOCON, 0,27, PIOFun3_config);
break;
case CT3Output2_P1_21:
IOCON_PinMuxSet(IOCON, 1,21, PIOFun3_config);
break;
case CT4Output0_P0_6:
IOCON_PinMuxSet(IOCON, 0, 6, PIOFun3_config);
break;
default:
break;
}
}
/*!
* @brief CTIMER 脈沖計數管腳初始化
*
* @param channel : 脈沖捕獲通道
*
* @return 無
*
* @note 内部調用
*
* @see CTIMER_CAPPinInit(CTInput0_P0_1); //初始化P0_1 管腳複用為CTIMER輸入管教
*
* @date 2019/10/21 星期一
*/
void CTIMER_CAPPinInit(CTIMER_InputChannel_t channel)
{
uint32_t PIOFun2_config = FUNC2|MODE_Up|MODE_GPIO|INVERT_Disable|DIGIMODE_Digital|FILTER_Disable;
uint32_t PIOFun3_config = FUNC3|MODE_Up|MODE_GPIO|INVERT_Disable|DIGIMODE_Digital|FILTER_Disable;
/* 開啟 時鐘 */
CLOCK_EnableClock(kCLOCK_Iocon);
switch(channel)
{
case CTInput0_P0_1:
IOCON_PinMuxSet(IOCON, 0, 1, PIOFun3_config);
break;
case CTInput4_P1_9:
IOCON_PinMuxSet(IOCON, 1, 9, PIOFun3_config);
break;
case CTInput6_P1_13:
IOCON_PinMuxSet(IOCON, 1,13, PIOFun3_config);
break;
case CTInput14_P1_20:
IOCON_PinMuxSet(IOCON, 1,20, PIOFun3_config);
break;
case CTInput2_P1_0:
IOCON_PinMuxSet(IOCON, 1, 0, PIOFun3_config);
break;
case CTInput4_P0_16:
IOCON_PinMuxSet(IOCON, 0,16, PIOFun3_config);
break;
case CTInput10_P0_10:
IOCON_PinMuxSet(IOCON, 0,10, PIOFun2_config);
break;
case CTInput16_P0_15:
IOCON_PinMuxSet(IOCON, 0,15, PIOFun3_config);
break;
case CTInput3_P1_1:
IOCON_PinMuxSet(IOCON, 1,1, PIOFun3_config);
break;
case CTInput14_P0_26:
IOCON_PinMuxSet(IOCON, 0,26, PIOFun3_config);
break;
case CTInput11_P0_28:
IOCON_PinMuxSet(IOCON, 0,28, PIOFun3_config);
break;
case CTInput3_P1_26:
IOCON_PinMuxSet(IOCON, 1,26, PIOFun3_config);
break;
case CTInput8_P0_24:
IOCON_PinMuxSet(IOCON, 0,24, PIOFun3_config);
break;
case CTInput0_P0_13:
IOCON_PinMuxSet(IOCON, 0,13, PIOFun3_config);
break;
case CTInput1_P0_14:
IOCON_PinMuxSet(IOCON, 0,14, PIOFun3_config);
break;
case CTInput2_P1_28:
IOCON_PinMuxSet(IOCON, 1,28, PIOFun3_config);
break;
case CTInput15_P0_20:
IOCON_PinMuxSet(IOCON, 0,20, PIOFun3_config);
break;
case CTInput15_P0_22:
IOCON_PinMuxSet(IOCON, 0,22, PIOFun3_config);
break;
case CTInput1_P0_2:
IOCON_PinMuxSet(IOCON, 0, 2, PIOFun2_config);
break;
case CTInput7_P1_15:
IOCON_PinMuxSet(IOCON, 1,15, PIOFun3_config);
case CTInput12_P0_4:
IOCON_PinMuxSet(IOCON, 0, 4, PIOFun3_config);
case CTInput13_P0_6:
IOCON_PinMuxSet(IOCON, 0, 6, PIOFun2_config);
case CTInput5_P1_11:
IOCON_PinMuxSet(IOCON, 1,11, PIOFun3_config);
break;
default:
break;
}
}
/*!
* @file LQ_CTIME.h
*
* @brief CTIME驅動檔案
*
* @company 北京龍邱智能科技
*
* @author LQ-005
*
* @note LPC55S69有5個32位的CTIME
*
* @version V1.1 2019/12/06 優化注釋 Doxygen
*
* @Software IAR8.32 or MDK5.28
*
* @par URL http://shop36265907.taobao.com
* http://www.lqist.cn
*
* @date 2019/10/18 星期五
*/
#ifndef __LQ_CTIME_H
#define __LQ_CTIME_H
#include "stdint.h"
#include "LQ_GPIO.h"
/**
* @brief CTIMER子產品 PWM輸出通道
* @note CTIMER 用做PWM輸出通道 一個CTIMER子產品隻能用作脈沖計數和PWM輸出中的一種
*/
typedef enum
{
//CTIMER PWM通道 ,一行最多選一個(一個CT最多輸出3路周期相同的PWM,四個通道中通道3用作周期通道)
CT0Output0_P0_0 = 1 + 0x0000, CT0Output0_P0_30 = 2 + 0x0000, /*!< CTIME0 PWM輸出通道0管腳 */
CT0Output1_P0_3 = 1 + 0x0100, CT0Output1_P0_31 = 2 + 0x0100, /*!< CTIME0 PWM輸出通道1管腳 */
CT0Output2_P0_19= 1 + 0x0200, CT0Output2_P1_31 = 2 + 0x0200, /*!< CTIME0 PWM輸出通道2管腳 */
CT1Output0_P0_18= 1 + 0x1000, CT1Output0_P1_10 = 2 + 0x1000, /*!< CTIME1 PWM輸出通道0管腳 */
CT1Output1_P0_20= 1 + 0x1100, CT1Output1_P1_12 = 2 + 0x1100, /*!< CTIME1 PWM輸出通道1管腳 */
CT1Output2_P0_23= 1 + 0x1200, CT1Output2_P1_14 = 2 + 0x1200, /*!< CTIME1 PWM輸出通道2管腳 */
CT2Output0_P0_10= 1 + 0x2000, CT2Output0_P1_5 = 2 + 0x2000, /*!< CTIME2 PWM輸出通道0管腳 */
CT2Output1_P1_6 = 1 + 0x2100, CT2Output1_P1_4 = 2 + 0x2100, /*!< CTIME2 PWM輸出通道1管腳 */
CT2Output2_P1_7 = 1 + 0x2200, CT2Output2_P0_11 = 2 + 0x2200, /*!< CTIME2 PWM輸出通道2管腳 */
CT3Output0_P0_5 = 1 + 0x3000, /*!< CTIME3 PWM輸出通道0管腳 */
CT3Output1_P1_19= 1 + 0x3100, /*!< CTIME3 PWM輸出通道1管腳 */
CT3Output2_P0_27= 1 + 0x3200, CT3Output2_P1_21 = 2 + 0x3200, /*!< CTIME3 PWM輸出通道2管腳 */
CT4Output0_P0_6= 1 + 0x4000, /*!< CTIME4 PWM輸出通道0管腳 */
} CTIMER_OutputChannel_t;
/**
* @brief CTIMER子產品 脈沖計數通道
* @note CTIMER 子產品 脈沖捕獲通道
* @note CTIMER 子產品的輸入管腳并不是直接CTIMER連接配接的 而是通過INPUTMUX子產品連接配接的
* @note CTIMER計數器 --- INPUTMUX輸入多路複用子產品17路通道 ---- 晶片外部管腳
* @note 簡單說 就是CTIMER的捕獲通道每個都可以與 INPUTMUX子產品的17路通道相連結
* @note INPUTMUX子產品的17路通道相連結的管腳如下
*/
typedef enum
{
CTInput0_P0_1 = 0x0000 + 1, CTInput0_P0_13 = 0x0000 + 2, /*!< INPUTMUX—CTIMER 輸入通道0管腳 */
CTInput1_P0_14 = 0x0100 + 1, CTInput1_P0_2 = 0x0100 + 2, /*!< INPUTMUX—CTIMER 輸入通道1管腳 */
CTInput2_P1_0 = 0x0200 + 1, CTInput2_P1_28 = 0x0200 + 2, /*!< INPUTMUX—CTIMER 輸入通道2管腳 */
CTInput3_P1_1 = 0x0300 + 1, CTInput3_P1_26 = 0x0300 + 2, /*!< INPUTMUX—CTIMER 輸入通道3管腳 */
CTInput4_P1_9 = 0x0400 + 1, CTInput4_P0_16 = 0x0400 + 2, /*!< INPUTMUX—CTIMER 輸入通道4管腳 */
CTInput5_P1_11 = 0x0500 + 1, /*!< INPUTMUX—CTIMER 輸入通道5管腳 */
CTInput6_P1_13 = 0x0600 + 1, /*!< INPUTMUX—CTIMER 輸入通道6管腳 */
CTInput7_P1_15 = 0x0700 + 1, /*!< INPUTMUX—CTIMER 輸入通道7管腳 */
CTInput8_P0_24 = 0x0800 + 1, /*!< INPUTMUX—CTIMER 輸入通道8管腳 */
CTInput9_P0_25 = 0x0900 + 1, /*!< INPUTMUX—CTIMER 輸入通道9管腳 */
CTInput10_P0_10= 0x0A00 + 1, /*!< INPUTMUX—CTIMER 輸入通道10管腳 */
CTInput11_P0_28= 0x0B00 + 1, /*!< INPUTMUX—CTIMER 輸入通道11管腳 */
CTInput12_P0_4 = 0x0C00 + 1, /*!< INPUTMUX—CTIMER 輸入通道12管腳 */
CTInput13_P0_6 = 0x0D00 + 1, /*!< INPUTMUX—CTIMER 輸入通道13管腳 */
CTInput14_P1_20= 0x0E00 + 1, CTInput14_P0_26= 0x0E00 + 2, /*!< INPUTMUX—CTIMER 輸入通道14管腳 */
CTInput15_P0_20= 0x0F00 + 1, CTInput15_P0_22= 0x0F00 + 2, /*!< INPUTMUX—CTIMER 輸入通道15管腳 */
CTInput16_P0_15= 0x1000 + 1, /*!< INPUTMUX—CTIMER 輸入通道16管腳 */
} CTIMER_InputChannel_t;
/********************************** CTIMER子產品 結束 ***************************************/
/*! CTIMER 最大占空比 可自行修改 */
#define CMTER_PWM_MAX 10000
/*!
* @brief 初始化CTIMER為PWM輸出功能
*
* @param matchChannel : CTIMER通道 LQ_CTIMER.h中枚舉體
* @param duty : 占空比 * CMTER_PWM_MAX
* @param pwmFreq_Hz : 頻率
*
* @return 無
*
* @note 一個CTIMER子產品隻能用作脈沖計數和PWM輸出的一種
* @note 一個CTIMER子產品最多隻能輸出3路PWM頻率相同的PWM波
*
* @see CTIMER_InitPwmConfig(CT0Outpute0_P0_0, 5000, 100);//初始化P0_0 作為CTIMER0的通道0 的PWM輸出口 頻率100Hz 占空比 百分之(5000/CMTER_PWM_MAX)*100
*
* @date 2019/5/7 星期二
*/
void CTIMER_InitPwmConfig(CTIMER_OutputChannel_t matchChannel,uint32_t duty,uint32_t pwmFreq_Hz);
/*!
* @brief CTIMER 更新PWM占空比
*
* @param matchChannel : CTIMER通道
* @param duty : 占空比 * CMTER_PWM_MAX
*
* @return 無
*
* @note 使用前請先初始化對應通道
*
* @see CTIMER_SetDuty(CT0Outpute0_P0_0, 4000); //設定P0_0 通道 PWM占空比 百分之 百分之(4000/CMTER_PWM_MAX)*100
*
* @date 2019/5/7 星期二
*/
void CTIMER_SetDuty(CTIMER_OutputChannel_t matchChannel, uint32_t duty);
/*!
* @brief 初始化CTIMER 作為脈沖計數功能
*
* @param base : CTIMER0 - CTIMER4
* @param channel : 輸入脈沖計數通道
*
* @return 無
*
* @note LPC55S69隻能用帶方向編碼器
*
* @see CTIMER_InitCapConfig(CTIMER0, CTInput0_P0_1);//初始化CTIMER0 為脈沖捕獲功能 使用P0_1管腳捕獲脈沖
*
* @date 2019/10/21 星期一
*/
void CTIMER_InitCapConfig(CTIMER_Type *base, CTIMER_InputChannel_t channel);
/*!
* @brief CTIMER 得到計數值
*
* @param base : CTIMER0 - CTIMER4
* @param pin : 方向管腳 DIR
*
* @return 脈沖計數值
*
* @note 使用前需要對CTMIE初始化 方向管腳也需要初始化
*
* @see CTIMER_GetCounter(CTIMER0, P1_11); //擷取CTIMER0脈沖計數值 P1_11接編碼器方向管腳(DIR)
*
* @date 2019/5/7 星期二
*/
uint32_t CTIMER_GetCounter(CTIMER_Type *base, GPIO_Name_t pin);
/*!
* @brief CTIMER 清除計數器
*
* @param base : CTIMER0 - CTIMER4
*
* @return 脈沖計數值
*
* @note 使用前需要對CTMIE初始化
*
* @see CTIMER_ClearCounter(CTIMER0); //清除CTIMER0脈沖計數值
*
* @date 2019/5/7 星期二
*/
void CTIMER_ClearCounter(CTIMER_Type *base);
/*!
* @brief CTIMER PWM輸出管腳初始化
*
* @param CTn_CHn : PWM通道
*
* @return 無
*
* @note 内部調用
*
* @see CTIME_PWMPinInit(CT0Output0_P0_0); //初始化P0_0 為CTIMER0 的通道0
*
* @date 2019/10/21 星期一
*/
void CTIME_PWMPinInit(CTIMER_OutputChannel_t CTn_CHn);
/*!
* @brief CTIMER 脈沖計數管腳初始化
*
* @param channel : 脈沖捕獲通道
*
* @return 無
*
* @note 内部調用
*
* @see CTIMER_CAPPinInit(CTInput0_P0_1); //初始化P0_1 管腳複用為CTIMER輸入管教
*
* @date 2019/10/21 星期一
*/
void CTIMER_CAPPinInit(CTIMER_InputChannel_t channel);
#endif
設定Doxygen
重新編譯OK