在LPC810的UM中有这么一句,GPIO port registers are located on the ARM Cortex M0+ I/O port for fast access。言下之意就是gpio翻转速度很快咯。但是LPC810控制输出状态的寄存器很多,按官方说法,控制速度不一样哦。
同时对于LPC来讲,貌似有传统直接控制寄存器的传统。因此今天的测试就是比较库函数和各个寄存器的控制gpio的速度。分别是:
Chip_GPIO_SetPinToggle函数
LPC_GPIO_PORT->NOT寄存器
LPC_GPIO_PORT->SET寄存器
LPC_GPIO_PORT->CLR寄存器
其实库函数还是个inline函数,里面就是一句寄存器操作,照道理inline函数就相当于直接运行里面的寄存器操作语句啊,可是测试结果并不支持这个说法哦,不知道为啥,有没有大侠来解释一下。
系统时钟:10M,为了防止while的影响,一个循环翻转6次,具体测试数据如下:都是翻转一次的时间。直接使用函数:7us左右,直接操作寄存器:900ns,无论是NOT、SET还是CLR,3种操作方式都差不多。
结论:直接使用寄存器操作可以实现大概系统频率1/10的GPIO翻转速度,比我想象的要慢点。因为STC12系列的跑在12M也比这个要快啊。还是我哪里没有设好呢?
|