现在使用TMS320F2812芯片,外部时钟24MHz,SYSCLK=24MHz,测试工具:示波器(500MHz)
为了测试指令周期采用GPIO的形式,部分代码如下
#define LED1_ON GpioDataRegs.GPFDAT.bit.GPIOF12=0 //1 灭 0 亮
#define LED1_OFF GpioDataRegs.GPFDAT.bit.GPIOF12=1
#define LED1_TOG GpioDataRegs.GPFTOGGLE.bit.GPIOF12=1
while(1)
{
LED1_ON;
LED1_ON;
LED1_ON;
LED1_ON;
LED1_ON;
LED1_ON;
LED1_ON;
LED1_ON;
LED1_OFF;
LED1_OFF;
LED1_OFF;
LED1_OFF;
}
测得低电平(LED1_ON)宽度2.01us,高电平(LED1_OFF)宽度1.07us,若是单周期指令的话理论应该是低电平约为0.3us,高电平为0.15us。为什么测得有如此大的偏差,是计算方式有误还是其它原因,请大家帮忙解答一下,谢谢了
Jay:
你好。
GPIO控制用DAT寄存器来操作,由于IO有Buff存在,会有延时。
另外,如果程序在Flash中运行,除了指令执行时间,还是Flash等待时间。
所以,你测得的时间比计算的要长。
Jay
现在使用TMS320F2812芯片,外部时钟24MHz,SYSCLK=24MHz,测试工具:示波器(500MHz)
为了测试指令周期采用GPIO的形式,部分代码如下
#define LED1_ON GpioDataRegs.GPFDAT.bit.GPIOF12=0 //1 灭 0 亮
#define LED1_OFF GpioDataRegs.GPFDAT.bit.GPIOF12=1
#define LED1_TOG GpioDataRegs.GPFTOGGLE.bit.GPIOF12=1
while(1)
{
LED1_ON;
LED1_ON;
LED1_ON;
LED1_ON;
LED1_ON;
LED1_ON;
LED1_ON;
LED1_ON;
LED1_OFF;
LED1_OFF;
LED1_OFF;
LED1_OFF;
}
测得低电平(LED1_ON)宽度2.01us,高电平(LED1_OFF)宽度1.07us,若是单周期指令的话理论应该是低电平约为0.3us,高电平为0.15us。为什么测得有如此大的偏差,是计算方式有误还是其它原因,请大家帮忙解答一下,谢谢了
Chen Jones:
建议楼主不要使用DAT寄存器赋值,而要使用SET 和 CLEAR语句
这个在User Guide中专门有讲,可能会出问题,有个Write Protect Read的一个问题。建议楼主去看看。