定时器中断调试
时间:10-02
整理:3721RD
点击:
最近学习了C6655的定时器和中断硬件模块,编写了一个用定时器定时1ms,通过调整基数变量的值来控制LED的亮灭。 首先,简单总结一下C6000定时器。
1.该定时器最大可支持64位时钟计数,通过Timer Global Control Register (TGCR)寄存器中的TIMMODE位来选择控制模式,主要包括四种模式:64位通用定时模式、双32位非链式通用定时器模式、双32位链式定时器模式和看门狗定时器模式。
2.可选择两种时钟源,包括内部时钟和外部时钟。
3.可选择三种工作模式:一次工作、持续工作和周期性重载工作模式。
操作流程:
首先选择合适的时钟源,通过寄存器来配置合适的计数频率,然后选择工作模式。其次,计数寄存器的值在计数时钟更新之后加1,当计数值与装载的计数周期相等时,就会触发中断。最后,通过影子寄存器重载计数周期,继续同样计数流程。下图是64位通用定时器工作流程。
实验代码:
#include "KeyStone_common.h"
#define PIN_CONTROL_0 0x02620580
#define CLOCK_PERIOD_MS 1 //period (in millisecond) of the clock generated by timer
#define NUM_CLOCKS_GENERATED 500 //number of the clocks generated in this test
volatile Uint32 uiTick = 0;
void Timer_Interrupts_Init(void)
{
/**中断源选择**/
gpCGEM_regs->INTMUX1 = 0;
gpCGEM_regs->INTMUX2 = 0;
gpCGEM_regs->INTMUX3 = CSL_GEM_TINTLN EVTCLR[0]= 0xFFFFFFFF;
gpCGEM_regs->EVTCLR[1]= 0xFFFFFFFF;
gpCGEM_regs->EVTCLR[2]= 0xFFFFFFFF;
gpCGEM_regs->EVTCLR[3]= 0xFFFFFFFF;
ICR= IFR; //清楚中断标志
IER = IER|(1 BANK_REGISTERS[0].DIR &= ~((1 BANK_REGISTERS[0].CLR_DATA |= (1 BANK_REGISTERS[0].CLR_DATA |= (1 BANK_REGISTERS[0].SET_DATA |= (1 1000) && (uiTick BANK_REGISTERS[0].CLR_DATA |= (1 2000)
{
uiTick = 0;
}
}
}
实验结果,试用版底板上的D3灯会以2s周期性的亮灭。
1.该定时器最大可支持64位时钟计数,通过Timer Global Control Register (TGCR)寄存器中的TIMMODE位来选择控制模式,主要包括四种模式:64位通用定时模式、双32位非链式通用定时器模式、双32位链式定时器模式和看门狗定时器模式。
2.可选择两种时钟源,包括内部时钟和外部时钟。
3.可选择三种工作模式:一次工作、持续工作和周期性重载工作模式。
操作流程:
首先选择合适的时钟源,通过寄存器来配置合适的计数频率,然后选择工作模式。其次,计数寄存器的值在计数时钟更新之后加1,当计数值与装载的计数周期相等时,就会触发中断。最后,通过影子寄存器重载计数周期,继续同样计数流程。下图是64位通用定时器工作流程。
实验代码:
#include "KeyStone_common.h"
#define PIN_CONTROL_0 0x02620580
#define CLOCK_PERIOD_MS 1 //period (in millisecond) of the clock generated by timer
#define NUM_CLOCKS_GENERATED 500 //number of the clocks generated in this test
volatile Uint32 uiTick = 0;
void Timer_Interrupts_Init(void)
{
/**中断源选择**/
gpCGEM_regs->INTMUX1 = 0;
gpCGEM_regs->INTMUX2 = 0;
gpCGEM_regs->INTMUX3 = CSL_GEM_TINTLN EVTCLR[0]= 0xFFFFFFFF;
gpCGEM_regs->EVTCLR[1]= 0xFFFFFFFF;
gpCGEM_regs->EVTCLR[2]= 0xFFFFFFFF;
gpCGEM_regs->EVTCLR[3]= 0xFFFFFFFF;
ICR= IFR; //清楚中断标志
IER = IER|(1 BANK_REGISTERS[0].DIR &= ~((1 BANK_REGISTERS[0].CLR_DATA |= (1 BANK_REGISTERS[0].CLR_DATA |= (1 BANK_REGISTERS[0].SET_DATA |= (1 1000) && (uiTick BANK_REGISTERS[0].CLR_DATA |= (1 2000)
{
uiTick = 0;
}
}
}
实验结果,试用版底板上的D3灯会以2s周期性的亮灭。