【MCXA156开发板测评】+以UTICK实现电子时钟效果
[复制链接]
在厂家提供的例程中有一个UTICK程序,它可以起到精确延时的作用。
相应的函数内容为:
static void UTickDelay(uint32_t usec)
{
UTICK_SetTick(EXAMPLE_UTICK, kUTICK_Onetime, usec - 1, UTickCallback);
while (!utickExpired)
{
}
utickExpired = false;
}
static void UTickCallback(void)
{
utickExpired = true;
}
进行测试的主程序为:
#define EXAMPLE_UTICK UTICK0
#define UTICK_TIME_1S (1000000UL)
int main(void)
{
RESET_ReleasePeripheralReset(kUTICK0_RST_SHIFT_RSTn);
BOARD_InitPins();
BOARD_InitBootClocks();
BOARD_InitDebugConsole();
PRINTF("Utick example start...\r\n");
UTICK_Init(EXAMPLE_UTICK);
while (true)
{
PRINTF("UTICK delay 1 second...\r\n");
UTickDelay(UTICK_TIME_1S);
}
}
经程序的编译与下载,其测试结构如图1所示,即每秒方式一次信息。由测试结果看,延时效果还是比较好的。
图1 测试结果
由于在资料中没见到RTC的相关内容,要想实现RTC的电子计时功能就只有依赖UTICK了。
经修改,实现电子时钟功能的主程序为:
int main(void)
{
uint32_t h,m,s;
RESET_ReleasePeripheralReset(kUTICK0_RST_SHIFT_RSTn);
BOARD_InitPins();
BOARD_InitBootClocks();
BOARD_InitDebugConsole();
PRINTF("clock:\r\n");
UTICK_Init(EXAMPLE_UTICK);
h=23;m=58;s=58;
PRINTF("hh:mm:ss= %d:%d:%d\r\n",h,m,s);
while (true)
{
UTickDelay(UTICK_TIME_1S);
if(s<59)
{
s=s+1;
}
else
{
s=0;
if(m<59)
{
m=m+1;
}
else
{
m=0;
h=(h+1)%24;
}
}
PRINTF("hh:mm:ss= %d:%d:%d\r\n",h,m,s);
}
}
经程序的编译与下载,其测试结果如图2和图3所示。
图2 测试结果1
图3 测试结果2
|