[中微快充电压申请kit] 测评报告3: OS高级点灯
[复制链接]
本帖最后由 flyaqiao 于 2023-11-14 15:33 编辑
老规矩,先上视频
b1c159da0c74bb9fadf0fb8dd3462608
KiteOS原码在
为了测试这个,我们需要对前一个DEMO进行整理,工程我打包放在最后:
为了实际KiteOS初始化,需要实现SystemInit函数,做系统初始化和SysTick定时器初始化,官方的DEMO中SystemInit是一个空函数,初始化都在main中做了,我们需要把初始化部分移到SystemInit中,方便KiteOS的库调用
void SystemInit(void)
{
SYS_DisableIOCFGProtect(); /*关闭IOCONFIG写保护*/
SYS_DisableGPIO0Protect(); /*关闭GPIO0的相关寄存器写保护*/
SYS_DisableGPIO1Protect(); /*关闭GPIO1的相关寄存器写保护*/
SYS_DisableGPIO2Protect(); /*关闭GPIO2的相关寄存器写保护*/
SYS_DisableGPIO3Protect(); /*关闭GPIO3的相关寄存器写保护*/
SYS_DisableGPIO4Protect(); /*关闭GPIO4的相关寄存器写保护*/
SYS_ConfigHSI(SYS_CLK_HSI_48M); /*设置内部高速时钟为48Mhz*/
SYS_EnableHSI(); /*开启高速时钟*/
SYS_ConfigAHBClock(SYS_CLK_SEL_HSI, SYS_CLK_DIV_1); /*设置AHB时钟为高速时钟的1分频*/
SYS_ConfigAPBClock(AHB_CLK_DIV_1); /*设置APB时钟为AHB时钟的1分频*/
SystemCoreClockUpdate(); /*刷新SystemCoreCLk、SystemAPBClock变量值*/
}
删除isr.c和demo_systick.c,demo_systick.h文件
然后修改main.c
由于main函数在KiteOS中有实现,新的入口函数是void AppEntry(void)
这是系统的第一个任务,由KiteOS创建.此时已经运行于OS下
void AppEntry(void)
{
// 初始化LED的GPIO
SYS_SET_IOCFG(IOP06CFG, SYS_IOCFG_P06_GPIO);
SYS_SET_IOCFG(IOP07CFG, SYS_IOCFG_P07_GPIO);
SYS_SET_IOCFG(IOP26CFG, SYS_IOCFG_P26_GPIO);
SYS_SET_IOCFG(IOP25CFG, SYS_IOCFG_P25_GPIO);
SYS_SET_IOCFG(IOP24CFG, SYS_IOCFG_P24_GPIO);
// 清除GPIO状态
GPIO0->DO_f.P6 = 0;
GPIO0->DO_f.P7 = 0;
GPIO2->DO_f.P6 = 0;
GPIO2->DO_f.P5 = 0;
GPIO2->DO_f.P4 = 0;
// 设置GPIO输出模式
GPIO_CONFIG_IO_MODE(GPIO0, GPIO_PIN_6, GPIO_MODE_OUTPUT);
GPIO_CONFIG_IO_MODE(GPIO0, GPIO_PIN_7, GPIO_MODE_OUTPUT);
GPIO_CONFIG_IO_MODE(GPIO2, GPIO_PIN_6, GPIO_MODE_OUTPUT);
GPIO_CONFIG_IO_MODE(GPIO2, GPIO_PIN_5, GPIO_MODE_OUTPUT);
GPIO_CONFIG_IO_MODE(GPIO2, GPIO_PIN_4, GPIO_MODE_OUTPUT);
while (1)
{
OsWaitDelay(10); // 10ticks=50ms
iSysTicks++;
TriggerLed(iSysTicks % 5);
}
}
static void TriggerLed(int idx)
{
switch (idx) {
case 0:
GPIO0->DO_f.P6 = ~GPIO0->DO_f.P6;
break;
case 1:
GPIO0->DO_f.P7 = ~GPIO0->DO_f.P7;
break;
case 2:
GPIO2->DO_f.P6 = ~GPIO2->DO_f.P6;
break;
case 3:
GPIO2->DO_f.P5 = ~GPIO2->DO_f.P5;
break;
case 4:
GPIO2->DO_f.P4 = ~GPIO2->DO_f.P4;
break;
}
}
通过本例程,可学习CM0的任务调试和中断现场保护
补充内容 (2023-11-14 15:39):
ToggleLed拼写错误
|