之前已经实现了RTOS下的Hello World,已经打印出相关的信息了.本节就学习使用一下硬件抽象层的定时器,先找到这里,然后进入TIMER.
新建一个任务,注意Timer ID,比如C6748只能用T0,T1,T2,T3四个,而T0是系统用了,所以现在用T1,然后下面要写的时间是microsec,微秒.
把定时器配置成周期定时,这样,定时器才能周期运行.
然后在主程序添加相应的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还可以使用器件特别指定的定时器,如图.
这里使用的是绝对的硬件时钟.能用所有的硬件特性.算是针对特定设备的定时器组件.配置方法差不多,就不再啰嗦了.这里可以指定使用定时器的低32或者高32位作为基准.就是和硬件定时器一样了,之前就说过纯硬件定时器了.