Ejemplo n.º 1
0
/*******************************************************************************
 * 名    称: Bsp_DelayMS
 * 功    能: ms级延迟,延迟精度为正负2ms
 * 入口参数: n : 延迟长度,单位1 ms。 n 应大于2
 * 出口参数: 无
 * 作  者: Roger-WY
 * 创建日期: 2014-08-20
 * 修    改:
 * 修改日期:
 * 备    注:  n 应大于2  该函数为死延时
 *******************************************************************************/
void Bsp_DelayMS(uint32_t n)
{
	if (n == 0) {
		return;
	} else if (n == 1) {
		n = 2;
	}

	DISABLE_SYSTICK_INT();  			/* 关中断 */
	s_uiDelayCount = n / 2;
	s_ucTimeOutFlag = 0;
	ENABLE_SYSTICK_INT();  				/* 开中断 */

	while (1) {
		CPU_IDLE();			/* 此处是空操作。用户可以定义,让CPU进入IDLE状态,以降低功耗;或实现喂狗 */

		/* 等待延迟时间到 */
		/* 注意:编译器认为 s_ucTimeOutFlag = 0,所以可能优化错误
		因此 s_ucTimeOutFlag 变量必须申明为_IO_型 */
		if (s_ucTimeOutFlag == 1) {
			break;
		}
	}
}
Ejemplo n.º 2
0
/*
*********************************************************************************************************
*	函 数 名: bsp_DelayMS
*	功能说明: ms级延迟,延迟精度为正负1ms
*	形    参:n : 延迟长度,单位1 ms。 n 应大于2
*	返 回 值: 无
*********************************************************************************************************
*/
void bsp_DelayMS(uint32_t n)
{
	/* 避免 n = 1 出现主程序死锁 */
	if (n <= 1)
	{
		n = 2;
	}
	
	__set_PRIMASK(1);  		/* 关中断 */
	g_Tmr[0].count = n;
	g_Tmr[0].flag = 0;
	__set_PRIMASK(0);  		/* 开中断 */

	while (1)
	{
		CPU_IDLE();	/* 此处是空操作。用户可以定义,让CPU进入IDLE状态,以降低功耗;或实现喂狗 */

		/* 等待延迟时间到 */
		if (g_Tmr[0].flag == 1)
		{
			break;
		}
	}
}