[TI-RTOS学习-02]使用RTOS硬件抽象层定时器

/ 0评 / 0

之前已经实现了RTOS下的Hello World,已经打印出相关的信息了.本节就学习使用一下硬件抽象层的定时器,先找到这里,然后进入TIMER.
Unnamed QQ Screenshot20160424222140
新建一个任务,注意Timer ID,比如C6748只能用T0,T1,T2,T3四个,而T0是系统用了,所以现在用T1,然后下面要写的时间是microsec,微秒.
Unnamed QQ Screenshot20160424222315
把定时器配置成周期定时,这样,定时器才能周期运行.
Unnamed QQ Screenshot20160424222438
然后在主程序添加相应的ISR程序,因为这个DSP不支持中断嵌套,所以也不要加interrupt的关键字,由系统自己处理就好.假设前面已经执行过GPIO的所有初始化:

Void biostimer0_isr(UArg a0)
{
    UChar i;
    // 循环
	for(i=0;i<5;i++)
	{
		// 延时
		Delay(0xAFFFFF);
		// D10 灭 GPIO0[2]
		// D7  亮 GPIO0[0]
		GPIOBankPinsWrite(SOC_GPIO_0_REGS, 0, GPIO_BANK_PIN_0, GPIO_BANK_PIN_2);
		// 延时
		Delay(0xAFFFFF);
		// D7  灭 GPIO0[0]
		// D6  亮 GPIO0[5]
		GPIOBankPinsWrite(SOC_GPIO_0_REGS, 0, GPIO_BANK_PIN_5, GPIO_BANK_PIN_0);
		// 延时
		Delay(0xAFFFFF);
		// D6  灭 GPIO0[5]
		// D9  亮 GPIO0[1]
		GPIOBankPinsWrite(SOC_GPIO_0_REGS, 0, GPIO_BANK_PIN_1, GPIO_BANK_PIN_5);
		// 延时
		Delay(0xAFFFFF);
		// D9  灭 GPIO0[1]
		// D10 亮 GPIO0[2]
		GPIOBankPinsWrite(SOC_GPIO_0_REGS, 0, GPIO_BANK_PIN_2, GPIO_BANK_PIN_1);
	}
	// 点亮所有 LED
	GPIOPinWrite(SOC_GPIO_0_REGS, 1, GPIO_PIN_HIGH);   // D7  亮 GPIO0[0]
	GPIOPinWrite(SOC_GPIO_0_REGS, 6, GPIO_PIN_HIGH);   // D6  亮 GPIO0[5]
	GPIOPinWrite(SOC_GPIO_0_REGS, 2, GPIO_PIN_HIGH);   // D9  亮 GPIO0[1]
	GPIOPinWrite(SOC_GPIO_0_REGS, 3, GPIO_PIN_HIGH);   // D10 亮 GPIO0[2]
}

然后编译一下.就可以看到LED在流水灯效果了.然后到差不多时候还会停在全亮,没多久又再流水灯一下.TI的SYS/BIOS还可以使用器件特别指定的定时器,如图.
Unnamed QQ Screenshot20160424225104
这里使用的是绝对的硬件时钟.能用所有的硬件特性.算是针对特定设备的定时器组件.配置方法差不多,就不再啰嗦了.这里可以指定使用定时器的低32或者高32位作为基准.就是和硬件定时器一样了,之前就说过纯硬件定时器了.
Unnamed QQ Screenshot20160424225844
 

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注