添加一些关于midi播放的项目
This commit is contained in:
@@ -0,0 +1,182 @@
|
||||
/************************************************************************!
|
||||
* 技术讨论:QQ群 123763203
|
||||
* 官网 :www.navota.com
|
||||
*
|
||||
* @file pit.c
|
||||
* @brief pit定时器函数库
|
||||
* @author Navota
|
||||
* @date 2018-3-1
|
||||
************************************************************************/
|
||||
|
||||
#include "common.h"
|
||||
#include "pit.h"
|
||||
|
||||
/*!
|
||||
* @brief 存放回调入口
|
||||
*
|
||||
*/
|
||||
PIT_CallbackType PIT_Callback[2] = {(PIT_CallbackType)NULL};
|
||||
|
||||
void PIT_Ch0Isr(void);
|
||||
void PIT_Ch1Isr(void);
|
||||
|
||||
/******************************************************************************
|
||||
* 定义PIT的接口函数
|
||||
*******************************************************************************/
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 初始化PIT模块.
|
||||
*
|
||||
* @param[in] u8Channel_No 通道号
|
||||
* @param[in] pConfig 配置模块的结构体指针
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
void PIT_Init(uint8_t u8Channel_No, PIT_ConfigType *pConfig)
|
||||
{
|
||||
SIM->SCGC |= SIM_SCGC_PIT_MASK; /*!< 选通PIT模块门控时钟 */
|
||||
|
||||
if (pConfig->bFreeze)
|
||||
{
|
||||
PIT_SetDebugFreeze();
|
||||
}
|
||||
|
||||
if (pConfig->bModuleDis == 0)
|
||||
{
|
||||
PIT_Enable(); /*!< 标准PIT定时器的时钟使能 */
|
||||
}
|
||||
|
||||
PIT_SetLoadVal(u8Channel_No, pConfig->u32LoadValue); //加载对应通道的定时器起始值
|
||||
|
||||
if (pConfig->bInterruptEn)
|
||||
{
|
||||
if (u8Channel_No)
|
||||
{
|
||||
NVIC_EnableIRQ(PIT_CH1_IRQn); //开启对应通道IRQ中断
|
||||
}
|
||||
else
|
||||
{
|
||||
NVIC_EnableIRQ(PIT_CH0_IRQn);
|
||||
}
|
||||
PIT_ChannelEnableInt(u8Channel_No); //开启对应通道的中断请求
|
||||
}
|
||||
else
|
||||
{
|
||||
NVIC_DisableIRQ(PIT_CH0_IRQn); //禁止通道0的IRQ中断
|
||||
}
|
||||
|
||||
if (pConfig->bChainMode)
|
||||
{
|
||||
PIT_ChannelEnableChain(u8Channel_No); //定时器链接到前一定时器
|
||||
}
|
||||
|
||||
if (pConfig->bETMerEn)
|
||||
{
|
||||
PIT_ChannelEnable(u8Channel_No); //定时器通道使能
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 装载定时器起始值到加载值寄存器中.
|
||||
*
|
||||
* @param[in] u8Channel_No 通道号
|
||||
* @param[in] u32loadvalue 所有加载的数值
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
void PIT_SetLoadVal(uint8_t u8Channel, uint32_t u32loadvalue)
|
||||
|
||||
{
|
||||
PIT->CHANNEL[u8Channel].LDVAL = u32loadvalue;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 设置PIT模块回调函数.
|
||||
*
|
||||
* @param[in] u8Channel_No 通道号.
|
||||
* @param[in] pfnCallback 指向回调函数.
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
void PIT_SetCallback(uint8_t u8Channel_No, PIT_CallbackType pfnCallback)
|
||||
{
|
||||
PIT_Callback[u8Channel_No] = pfnCallback;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 复位PIT模块
|
||||
*
|
||||
* @param none
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
void PIT_DeInit(void)
|
||||
{
|
||||
NVIC_DisableIRQ(PIT_CH0_IRQn);
|
||||
NVIC_DisableIRQ(PIT_CH1_IRQn);
|
||||
PIT_SetLoadVal(0,0);
|
||||
PIT_SetLoadVal(1,0);
|
||||
PIT_ChannelDisable(0);
|
||||
PIT_ChannelDisable(1);
|
||||
PIT_ChannelDisableInt(0);
|
||||
PIT_ChannelDisableInt(1);
|
||||
PIT_ChannelDisableChain(0);
|
||||
PIT_ChannelDisableChain(1);
|
||||
PIT_ChannelClrFlags(0);
|
||||
PIT_ChannelClrFlags(1);
|
||||
PIT_SetDebugOn();
|
||||
PIT_Disable();
|
||||
SIM->SCGC &= ~SIM_SCGC_PIT_MASK;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief PIT0通道中断服务函数.
|
||||
*
|
||||
* @param none
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
void PIT_Ch0Isr(void)
|
||||
{
|
||||
PIT_ChannelClrFlags(0); //清除中断标志位
|
||||
|
||||
if (PIT_Callback[0])
|
||||
{
|
||||
PIT_Callback[0]();
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief PIT0通道中断服务函数.
|
||||
*
|
||||
* @param none
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
void PIT_Ch1Isr(void)
|
||||
{
|
||||
PIT_ChannelClrFlags(1); //清除中断标志位
|
||||
if (PIT_Callback[1])
|
||||
{
|
||||
PIT_Callback[1]();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,275 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* @brief PIT 驱动头文件.
|
||||
*
|
||||
******************************************************************************/
|
||||
#ifndef PIT_H_
|
||||
#define PIT_H_
|
||||
#include"common.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
* PIT 通道号列表
|
||||
*
|
||||
*//*!
|
||||
*******************************************************************************/
|
||||
enum
|
||||
{
|
||||
PIT_CHANNEL0 = 0, /*!< PIT 通道 0 */
|
||||
PIT_CHANNEL1 /*!< PIT 通道 1 */
|
||||
};
|
||||
|
||||
/*! */
|
||||
|
||||
|
||||
/*!
|
||||
* @brief PIT 回调类型.
|
||||
*
|
||||
*/
|
||||
|
||||
typedef void (*PIT_CallbackType)(void);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* PIT 配置结构体体
|
||||
*/
|
||||
/*!
|
||||
* @brief PIT 配置参数.
|
||||
*
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint8_t bFreeze : 1; /*!< 1: 在调试模式时冻结, 0: 在调试模式时仍然运行 */
|
||||
uint8_t bModuleDis : 1; /*!< 1: 禁用PIT模块, 0: 使能PIT模块 */
|
||||
uint8_t bReserved0 : 1; /*!< 保留 */
|
||||
uint8_t bReserved1 : 5; /*!< 保留 */
|
||||
uint8_t bETMerEn : 1; /*!< 1: 使能PIT通道, 0: 禁止PIT通道 */
|
||||
uint8_t bInterruptEn : 1; /*!< 1: 使能PIT通道中断, 0: 禁止PIT通道中断 */
|
||||
uint8_t bChainMode : 1; /*!< 1: 使能链模式, 0: 禁止链模式 */
|
||||
uint8_t bReserved2 : 5; /*!< 保留 */
|
||||
uint8_t bFlag : 1; /*!< 1: PIT中断标志位置位,写1清0, 0: PIT中断标志位没有置位 */
|
||||
uint8_t bReserved3 : 7; /*!< 保留 */
|
||||
uint32_t u32LoadValue ; /*!< 32位通道加载模值 */
|
||||
} PIT_ConfigType, *PIT_ConfigPtr;
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
******************************************************************************/
|
||||
|
||||
/*!
|
||||
* 内联函数
|
||||
*/
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 使能PIT模块.
|
||||
*
|
||||
* @param none
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void PIT_Enable(void)
|
||||
{
|
||||
|
||||
PIT->MCR &= ~PIT_MCR_MDIS_MASK;
|
||||
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 禁用PIT模块.
|
||||
*
|
||||
* @param none
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void PIT_Disable(void)
|
||||
{
|
||||
|
||||
PIT->MCR |= PIT_MCR_MDIS_MASK;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 设置PIT在调试模式下禁止运行.
|
||||
*
|
||||
* @param none
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void PIT_SetDebugFreeze(void)
|
||||
{
|
||||
|
||||
PIT->MCR |= PIT_MCR_FRZ_MASK;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 设置PIT在调试模式下继续运行.
|
||||
*
|
||||
* @param none
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void PIT_SetDebugOn(void)
|
||||
{
|
||||
|
||||
PIT->MCR &= ~PIT_MCR_FRZ_MASK;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief PIT定时器通道使能.
|
||||
*
|
||||
* @param[in] u8Channel 通道号.
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void PIT_ChannelEnable(uint8_t u8Channel)
|
||||
|
||||
{
|
||||
|
||||
PIT->CHANNEL[u8Channel].TCTRL |= PIT_TCTRL_TEN_MASK;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 禁用PIT定时器通道.
|
||||
*
|
||||
* @param[in] u8Channel 通道号.
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void PIT_ChannelDisable(uint8_t u8Channel)
|
||||
{
|
||||
|
||||
PIT->CHANNEL[u8Channel].TCTRL &= ~PIT_TCTRL_TEN_MASK;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 使能PIT定时器通道中断.
|
||||
*
|
||||
* @param[in] u8Channel 通道号.
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void PIT_ChannelEnableInt(uint8_t u8Channel)
|
||||
|
||||
{
|
||||
|
||||
PIT->CHANNEL[u8Channel].TCTRL |= PIT_TCTRL_TIE_MASK;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 禁用PIT定时器通道中断.
|
||||
*
|
||||
* @param[in] u8Channel 通道号.
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void PIT_ChannelDisableInt(uint8_t u8Channel)
|
||||
|
||||
{
|
||||
|
||||
PIT->CHANNEL[u8Channel].TCTRL &= ~PIT_TCTRL_TIE_MASK;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 使能PIT定时器通道链模式.
|
||||
*
|
||||
* @param[in] u8Channel 通道号.
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void PIT_ChannelEnableChain(uint8_t u8Channel)
|
||||
{
|
||||
PIT->CHANNEL[u8Channel].TCTRL |= PIT_TCTRL_CHN_MASK;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 禁用PIT定时器通道链模式.
|
||||
*
|
||||
* @param[in] u8Channel 通道号.
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void PIT_ChannelDisableChain(uint8_t u8Channel)
|
||||
|
||||
{
|
||||
PIT->CHANNEL[u8Channel].TCTRL &= ~PIT_TCTRL_CHN_MASK;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 获取PIT通道中断标志位.
|
||||
*
|
||||
* @param[in] u8Channel 通道号.
|
||||
*
|
||||
* @return PIT通道中断标志位.
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE uint8_t PIT_ChannelGetFlags(uint8_t u8Channel)
|
||||
|
||||
{
|
||||
uint8_t bflag;
|
||||
|
||||
bflag = (PIT->CHANNEL[u8Channel].TFLG & PIT_TFLG_TIF_MASK);
|
||||
|
||||
return bflag;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 清除PIT通道中断标志位.
|
||||
*
|
||||
* @param[in] u8Channel 通道号.
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void PIT_ChannelClrFlags(uint8_t u8Channel)
|
||||
{
|
||||
PIT->CHANNEL[u8Channel].TFLG |= PIT_TFLG_TIF_MASK;
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
******************************************************************************/
|
||||
void PIT_Init(uint8_t u8Channel_No, PIT_ConfigType *pConfig);
|
||||
void PIT_SetLoadVal(uint8_t u8Channel, uint32_t u32loadvalue);
|
||||
void PIT_SetCallback(uint8_t u8Channel_No, PIT_CallbackType pfnCallback);
|
||||
void PIT_DeInit(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* PIT_H_ */
|
||||
Reference in New Issue
Block a user