1375|4

104

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

[中微快充电压申请kit] 测评报告3: OS高级点灯 [复制链接]

  本帖最后由 flyaqiao 于 2023-11-14 15:33 编辑
Demo2_20231109203202.rar (241.09 KB, 下载次数: 2) 上次我们已经使用SysTick定时器实现了跑马灯效果,我们今天学习用OS再点一次,使用本人的超级微内核KiteOS

老规矩,先上视频

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拼写错误

最新回复

这也可以跑系统吗?电压管理的话,我感觉跑裸机会不会实时性好一些呀。   详情 回复 发表于 2023-11-15 11:14
点赞 关注
 
 

回复
举报

7244

帖子

2

TA的资源

版主

沙发
 

用自己写的OS就是好,出了问题也好找!

 
 
 

回复

7046

帖子

11

TA的资源

版主

板凳
 

这也可以跑系统吗?电压管理的话,我感觉跑裸机会不会实时性好一些呀。

 
 
 

回复

104

帖子

0

TA的资源

一粒金砂(中级)

4
 

评测就是各种测试,研究了下QC充电协议,这周先把这个QC支持上试试

 
 
 

回复

104

帖子

0

TA的资源

一粒金砂(中级)

5
 

这个例子里还实现了串口中断接收,并移植了lettle-shell

void UART1_Config(void)
{
  UART_ConfigRunMode(UART1, 115200, UART_WLS_8, UART_PARITY_NONE, UART_STOP_BIT_1);
  UART_EnableRBRInt(UART1);
  UART_EnableFIFO(UART1, FIFO_L0_1BYTE, FIFO_L3_14BYTE, 0, 0);
  SYS_EnablePeripheralClk(SYS_CLK_UART1_MSK);
  SYS_SET_IOCFG(IOP22CFG, SYS_IOCFG_P22_TXD1);
  SYS_SET_IOCFG(IOP23CFG, SYS_IOCFG_P23_RXD1);
  /*
  (2)设置Uart1 中断
  */
  NVIC_SetPriority(UART1_IRQn, 4);
  NVIC_EnableIRQ(UART1_IRQn);
}
void Uart1SendByte(uint8_t dat)
{
  while (!(UART1->LSR & UART_LSR_THRE_Msk));
  UART1->THR = dat;
}
void UartReceive(uint16_t c);
void UART1_IRQHandler(void)
{
  while (UART1->LSR & (UART_LSR_OE_Msk | UART_LSR_RDR_Msk))
    UartReceive(UART1->RBR);
}
root:/$ help

Command List:
logSetLevel           CMD   --------  set log level
setVar                CMD   --------  set var
help                  CMD   --------  show command info
users                 CMD   --------  list all user
cmds                  CMD   --------  list all cmd
vars                  CMD   --------  list all var
keys                  CMD   --------  list all key
clear                 CMD   --------  clear console
hexdump               CMD   --------  hex dump

方便自定义串口命令

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表