RT1064--pit

参考链接link

PIT定时器(Periodic Interrupt Timer),也叫做周期性中断定时器,是一个32位递减计数器,每个时钟周期减1。与普通的定时器相比,它只能递减计数,而不能向上计数,普通的定时器,相对高级一点的能向上或者向下计数,甚至再高级一点的可以产生pwm等等。而它就只能周期计数。但是不要小看它,它最大的作用就是为其它外设提供周期信号。这听起来像废话,普通定时器不行吗?当然行,但是普通定时器需要重启计数器才能改变计数周期,而PIT定时器可以不需要重新启动(其实就是重新初始化)就可以改变计数周期。典型的应用就是PIT+ADC,ADC周期性采集255(或者更大)的信号数据,通过FFT(快速傅里叶变换)处理,得到一段新的信号,这是很常见的,特别是做混合信号处理的时候。

pit_init();                     //初始化pit外设
pit_interrupt_ms(PIT_CH0,100);  //初始化pit通道0 周期
NVIC_SetPriority(PIT_IRQn,15);  //设置中断优先级 范围0-15 越小优先级越高 四路PIT共用一个PIT中断函数

看pit.h

typedef enum
{
    PIT_CH0 = kPIT_Chnl_0,
    PIT_CH1,
    PIT_CH2,
    PIT_CH3,
    PIT_MAX,
}PIT_enum;


#define PIT_SOURCE_CLOCK CLOCK_GetFreq(kCLOCK_PerClk)//定义PIT定时器的输入时钟



void pit_init(void);
void pit_interrupt(PIT_enum pit_ch, uint32 count);
void pit_delay(PIT_enum pit_ch, uint32 count);
void pit_start(PIT_enum pit_ch);
uint32 pit_get(PIT_enum pit_ch);
void pit_close(PIT_enum pit_ch);

//获取PIT定时器的标志位
#define PIT_FLAG_GET(pit_ch)            PIT_GetStatusFlags(PIT, (pit_chnl_t)pit_ch)

//清除PIT定时器的标志位
#define PIT_FLAG_CLEAR(pit_ch)          PIT_ClearStatusFlags(PIT, (pit_chnl_t)pit_ch, kPIT_TimerFlag)

//------------------------------------以下代码用于PIT中断------------------------------------
//-----------------调用本宏函数前,务必先调用pit_init函数,以初始化PIT外设-------------------
#define pit_interrupt_ms(pit_ch, time)  pit_interrupt(pit_ch, MSEC_TO_COUNT(time, PIT_SOURCE_CLOCK))    //(单位为 毫秒)
#define pit_interrupt_us(pit_ch, time)  pit_interrupt(pit_ch, USEC_TO_COUNT(time, PIT_SOURCE_CLOCK))    //(单位为 微秒)

//------------------------------------以下代码用于PIT延时------------------------------------
//-----------------调用本宏函数前,务必先调用pit_init函数,以初始化PIT外设-------------------
#define pit_delay_ms(pit_ch, time)      pit_delay(pit_ch, MSEC_TO_COUNT(time, PIT_SOURCE_CLOCK))        //(单位为 毫秒)
#define pit_delay_us(pit_ch, time)      pit_delay(pit_ch, USEC_TO_COUNT(time, PIT_SOURCE_CLOCK))        //(单位为 微秒)
#define pit_delay_ns(pit_ch, time)      pit_delay(pit_ch, USEC_TO_COUNT(time, PIT_SOURCE_CLOCK/1000))   //(单位为 纳秒)

//------------------------------------以下代码用于获取PIT计时时间------------------------------------
//-----------------调用本宏函数前,务必先调用pit_init函数,以初始化PIT外设-------------------
#define pit_get_ms(pit_ch)              COUNT_TO_MSEC(pit_get(pit_ch),PIT_SOURCE_CLOCK)                 //(单位为 毫秒)
#define pit_get_us(pit_ch)              COUNT_TO_US

然后调用void PIT_IRQHandler(void)函数
在里面判断是哪个通道的中断
PIT_FLAG_GET(PIT_CHX)
然后写进入中断后需要执行的操作
譬如

PIT_FLAG_CLEAR(PIT_CH0);一定要清楚中断标志位!!!!!!!!!!!!!!!
        gpio_toggle(B9);//反转引脚电平
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值