我想要配置一個delay時間函式,我根據以下範例進行配置,但我不知道for迴圈的延遲時間是幾秒,假設我有三種延遲時間 10s、10ms、10us ,如何正確使用for迴圈函式,使他們蒙垢正確的延遲,或是有沒有其他函式可以進行延遲,而這些函式又該如何使用?
Susan Yang:
若是您想要比较精确的延迟的话,还是需要使用timer的
Susan Yang:
或者您可以使用下面的方式
/* DriverLib Includes */ #include <ti/devices/msp432p4xx/driverlib/driverlib.h>/* Standard Includes */ #include <stdint.h> #include <stdbool.h>int main(void) {/* Stop Watchdog*/MAP_WDT_A_holdTimer();int mclk;while(1){__delay_cycles(1000);mclk = CS_getMCLK();} }
user5121970:
回复 Susan Yang:
可以解釋while迴圈裡面發生了什麼事情嗎?不太懂意思
Susan Yang:
回复 user5121970:
__delay_cycles并不是真正的函数, 只是提供编译器内联展开,该函数并不支持变量参数, 其参数只能是常数.函数原型__intrinsic void __delay_cycles(unsigned long __cycles); 该内部函数实现__cycles个CPU周期的延时
灰小子:
回复 user5121970:
while里是延时1000个时钟周期,然后获取MCLK数据。
在msp430中函数CS_getMCLK在使用内部或外部电阻或者旁路时钟频率下使用DCO才是精确有效的,不清楚在msp432上有没有工作条件的要求。
gaoyang9992006:
如果用for跑空指令延时的话,可以根据选择的时钟配置来估算每一次循环所消耗的时间,只能是个大概,不会很准。但是如果要求不高,是够用的。这延时期间就没法做其他事情了。。