|
MAX32630FTHR设计笔记(8):定时器的使用(Keil版本)
[复制链接]
(1)定时器资源介绍
MAX32630系列的微控制器单元的定时器资源非常丰富,其定时器可以作为GPIO口的PWM输出,GPIO对应的定时器,如下图
定时器的使用可以输出不同占空比的PWM,也可以作为定时轮询中断触发事件,下面介绍一下定时器的定时中断使用
(2)定时器的初始化,以定时器TM0为例
- uint8_t TIM0_Int_Init(uint32_t time_ms)
- {
- int error = 0;
- tmr32_cfg_t cont_cfg;
- uint32_t IntervalTime = time_ms;//ms
- //enable timer interrupt
- NVIC_SetVector(TMR0_0_IRQn, TMR0_IRQHandler);
- TMR32_EnableINT(MXC_TMR0);
- //Setup GPIO to timer output function
- sys_cfg_tmr_t gpio;
- gpio.port = 3;
- gpio.mask = PIN_0;
- gpio.func = GPIO_FUNC_TMR;
- gpio.pad = GPIO_PAD_OPEN_DRAIN;
- //initialize timer and GPIO
- tmr_prescale_t prescale = TMR_PRESCALE_DIV_2_12;
- //error = TMR_Init(MXC_TMR0, prescale, &gpio);
- error = TMR_Init(MXC_TMR0, prescale, NULL); //禁止定时器的输出功能
-
- if(error != E_NO_ERROR)
- return error;
- cont_cfg.mode = TMR32_MODE_CONTINUOUS;
- cont_cfg.polarity = TMR_POLARITY_INIT_LOW; //start GPIO low
- //calculate the ticks values for given time
- error = TMR32_TimeToTicks(MXC_TMR0, IntervalTime, TMR_UNIT_MILLISEC, &(cont_cfg.compareCount));
- if(error != E_NO_ERROR)
- return error;
- //configure and start the timer
- TMR32_Config(MXC_TMR0, &cont_cfg);
- TMR32_Start(MXC_TMR0);
- return error;
- }
复制代码
这里我选用P3_0作为定时器TM0,但禁止其输出波形,函数的输入值为定时中断触发事件,单位毫秒
(2)定时器中断
- uint8_t buffer[100];
- uint16_t ADCValue[1];
- void TMR0_IRQHandler()
- {
- static uint8_t ADC_GET_Time=0;
- SysTime_Struct.Unit_1ms_CurTime++;
- ADC_GET_Time++;
- LED0_TURN;
- TMR32_ClearFlag(MXC_TMR0);
- }
复制代码
中断触发事件,定时时间到达后,LED灯状态翻转一次
总结:
用KEIL C编写MAX32630程序,好处在于其编程方式雷同STM32编程,很多东西可以一直过来,包括串口,外部中断。因为MAX32630是基于M4内核,STM32F4系列的DSP算法都可以直接移植过来,串口中断触发可以参考帖子串口发送接收函数
|
|