ASF库模块里有一个,DELAY模块。
该模块定义好了延时函数,这样就很方便我们使用,再也不需要象51那样去计算,直接拿来用就可以了。
**
* [url=home.php?mod=space&uid=82890]@DEF[/url] delay_init
*
* [url=home.php?mod=space&uid=247401]@brief[/url] Initialize the delay driver.
* @param fcpu_hz CPU frequency in Hz
*
* @deprecated
* This function is provided for compatibility with ASF applications that
* may not have been updated to configure the system clock via the common
* clock service; e.g. sysclk_init() and a configuration header file are
* used to configure clocks.
*
* The functions in this module call \ref sysclk_get_cpu_hz() function to
* obtain the system clock frequency.
*/
#define delay_init(fcpu_hz)
/**
* @def delay_s
* @brief Delay in seconds.
* @param delay Delay in seconds
*/
#define delay_s(delay) cpu_delay_ms(1000 * delay, F_CPU)
/**
* @def delay_ms
* @brief Delay in milliseconds.
* @param delay Delay in milliseconds
*/
#define delay_ms(delay) cpu_delay_ms(delay, F_CPU)
/**
* @def delay_us
* @brief Delay in microseconds.
* @param delay Delay in microseconds
*/
#define delay_us(delay) cpu_delay_us(delay, F_CPU)
#ifdef __cplusplus
}
#endif
/**
* @}
*/
#endif /* _DELAY_H_ */
下午我搞这个程序时,出点小意外。
本来我选择工程是选择开发板的。上来就有board_init();
给我一个错觉就是时钟已经初始化了。
但我错了,本来定1秒程序,跑了25秒,我查了时钟配置,也都对。关键一点一定要加上sysclk_init();
以下是原程,这个程序我就添了一个DELAY模块,顺利通过编译哈:
#include <asf.h>
int main (void)
{
/* Insert system clock initialization code here (sysclk_init()). */
uint32_t count;
sysclk_init();
board_init();
//count=sysclk_get_cpu_hz();
delay_init(F_CPU);
while (1)
{
ioport_set_pin_level(LED0_GPIO, LED0_INACTIVE_LEVEL);
delay_ms(1000);
ioport_set_pin_level(LED0_GPIO, LED0_ACTIVE_LEVEL);
delay_ms(1000);
}
/* Insert application code here, after the board has been initialized. */
}
运行结果是:LED0以1秒一下在改变状态。
|