[活动专区] 【赛元95F】2、点灯及部分硬件评估

[复制链接]
1114|0
 楼主| yang_alex 发表于 2020-4-4 09:04 | 显示全部楼层 |阅读模式
本帖最后由 yang_alex 于 2020-4-4 09:08 编辑

            评估第一件事:首先肯定是点灯啊。赛元的SC95F8617_8616_8615_8613_Demo_Code程序中没有提供点灯示例程序,我们自己写好了。LED闪烁延时肯定不能用简单的空循,太浪费MCU资源了。

           Timer定时器中断定时是个好办法。
  1. #include "H/Function_Init.H"

  2. void IO_Init(void);

  3. void Timer_Init(void);

  4. unsigned int T_ms;   //定义一个全局变量进行计数,满100mS反转一次。

  5. void main(void)
  6. {            
  7.     IO_Init();
  8.     Timer_Init();
  9.     T_ms = 0;

  10.     while(1);
  11. }

GPIO初始化程序
  1. /*****************************************************
  2. *函数名称:void IO_Init(void)
  3. *函数功能:IO初始化
  4. *入口参数:void
  5. *出口参数:void
  6. *****************************************************/
  7. void         IO_Init(void)
  8. {
  9.       P0CON = 0xFF;    //设置P0为强推挽模式
  10.       P0PH  = 0x00;
  11. }

Timer0初始化程序和中断处理程序:
  1. /*****************************************************
  2. *函数名称:void Timer_Init(void)
  3. *函数功能:T0/T1/T2初始化
  4. *入口参数:void
  5. *出口参数:void
  6. *****************************************************/
  7. void Timer_Init(void)
  8. {
  9.         TMCON = 0X00;    //Timer0选择时钟Fsys/12
  10.         
  11.         //T0设置
  12.         TMOD |= 0x01;                 //0000 0001;Timer0设置工作方式1
  13.         TL0 = (65536 - 7192)%256;    //时钟为Fsys/12,则溢出时间=7192*(1/Fsys);
  14.         TH0 = (65536 - 7192)/256;
  15.         TR0 = 0;
  16.         ET0 = 1;//定时器0允许
  17.         TR0 = 1;//打开定时器0
  18.         
  19.         EA = 1;        
  20. }

  21. /**************************************************
  22. *函数名称:void timer0() interrupt 1
  23. *函数功能:定时器中断产生方波
  24. *入口参数:void
  25. *出口参数:void
  26. **************************************************/
  27. void timer0() interrupt 1
  28. {
  29.     TL0 = (65536 - 7192)%256;
  30.     TH0 = (65536 - 7192)/256;
  31.         
  32.     T_ms ++;
  33.     if(T_ms == 100)
  34.     {
  35.           T_ms = 0;
  36.           P02 = ~P02;        
  37.      }
  38. }

编译、下载、运行、OK!
          GIF.gif

            在学习的过程中发现赛元的另一个功能:Base Timer(BTM)可以把 CPU 从 STOP mode 唤醒,并且产生中断。
            1001.JPG
     拿Base Timer来定时闪烁LED也是个好办法。说干就干:
  1. #include "H/Function_Init.H"

  2. void IO_Init(void);
  3. void BTM_Init(void);

  4. void main(void)
  5. {
  6.     IO_Init();
  7.     BTM_Init();
  8.         
  9.     while(1)
  10.     {
  11.      }               
  12. }

      GPIO初始化程序
  1. /*****************************************************
  2. *函数名称:void IO_Init(void)
  3. *函数功能:IO初始化
  4. *入口参数:void
  5. *出口参数:void
  6. *****************************************************/
  7. void         IO_Init(void)
  8. {
  9.       P0CON = 0xFF;  //设置P0为强推挽模式
  10.       P0PH  = 0x00;
  11. }

      BTM初始化程序和中断处理程序:
  1. /*****************************************************
  2. *函数名称:void BTM_Init(void)
  3. *函数功能:BTM初始化
  4. *入口参数:void
  5. *出口参数:void
  6. *****************************************************/
  7. void BTM_Init(void)
  8. {
  9.       BTMCON = 0x84;        //每0.25s产生一个中断

  10.       EA = 1;           //开启总中断

  11.       IE1 |= 0x04;       //开启BTM中断
  12. }

  13. /*****************************************************
  14. *函数名称:void BTM_Int(void) interrupt 9
  15. *函数功能:中断函数
  16. *入口参数:void
  17. *出口参数:void
  18. *****************************************************/
  19. void BTM_Int(void) interrupt 9
  20. {
  21.       if(!(BTMCON&0X40))                //中断标志位判断
  22.       {
  23.             P02 = ~P02;
  24.       }
  25. }
          运行的效果和使用定时器定时一样,这里就不上图了。用BTM的方便之处在于代码简单, 可以让CPU进入 STOP mode,然后定时从 STOP mode中把CPU唤醒,并且产生中断,执行完中断程序可以再次进入STOP mode。适用于低功耗应用。

        这里说几个建立新项目后设置容易出错的地方。

       1、项目设置的标签组的“Output”标签下面,“Debug Information”和“ Create HEX File ”必须选择。前者不选的话,不会生成调试信息,后续无法调试。后者不选的话,不会生成目标烧录文件,没法下载烧录。
         2004.JPG

     2、项目设置的标签组的“Debug”标签下面,“SinOne Chip Debug Driver”和“ Run to main ”必须选择。前者不选的话,没有对应的仿真器驱动,没法仿真调试。后者不选的话,调试时不是从你写的C语言代码开始调试。
         2003.JPG

     3、项目设置的标签组的“utilities”标签下面,“Use Target Driver for Flash Programming”和“ Use Debug Driver ”必须选择。
       2002.JPG
     不选的话,没有对应的仿真器驱动,没法仿真调试。下载按钮或者下载菜单是灰色的,没法选择。
         3002.JPG   或者   3001.JPG

      4、3中的“Use Target Driver for Flash Programming”选择后,还要选择“Settings”进行下一步设置。有时候虽然 “Use Target Driver for Flash Programming”前面的选择圆点选中了,但下面的显示框中仍然是空的。这样在下载时,会出现下面的错误:
       3003.JPG
     选择“Settings”进行下一步设置后,会出项芯片的下载选项:
      2001.JPG

     “芯片选择”要选对,要和你开发板上器件型号一致,这个不对的话,就是之前错误提示中“IC型号选择错误”的来源。

      另外,从这个标签可以看到赛元MCU的烧录熔丝。对应你的需求去进行设置。
      WDT:                要不要使能MCU内部的看门狗
      External 32K:     要不要使用外部的32KHz的晶体-----------赛元MCU内部有±4%精度低频 32kHz 振荡器
      System clock:     系统时钟要不要进行分频。赛元MCU内部有±2%高精度高频 32/16/8/4MHz 振荡器
      P52:                  P52当作正常IO引脚还是当作外部复位引脚
      LVR:                 电压低于多少MCU进行复位
      Vref:                 MCU内部参考电压来源
      lAP Range:        IAP程序地址空间
      DISJTG:            是否禁止JTAG调试口。可以进行加密,不过我没敢试,万一芯片锁了,就没法继续玩了。

   从上面看,赛元的MCU硬件还是相当不错的。当然,还有很多很好的MCU硬件,后面慢慢说。



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

本版积分规则

35

主题

2239

帖子

9

粉丝
快速回复 在线客服 返回列表 返回顶部