最近学习了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;