打印
[活动专区]

【赛元95F】2、点灯及部分硬件评估

[复制链接]
674|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 yang_alex 于 2020-4-4 09:08 编辑

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

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

void IO_Init(void);

void Timer_Init(void);

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

void main(void)
{            
    IO_Init();
    Timer_Init();
    T_ms = 0;

    while(1);
}

GPIO初始化程序
/*****************************************************
*函数名称:void IO_Init(void)
*函数功能:IO初始化
*入口参数:void
*出口参数:void
*****************************************************/
void         IO_Init(void)
{
      P0CON = 0xFF;    //设置P0为强推挽模式
      P0PH  = 0x00;
}

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

/**************************************************
*函数名称:void timer0() interrupt 1
*函数功能:定时器中断产生方波
*入口参数:void
*出口参数:void
**************************************************/
void timer0() interrupt 1
{
    TL0 = (65536 - 7192)%256;
    TH0 = (65536 - 7192)/256;
        
    T_ms ++;
    if(T_ms == 100)
    {
          T_ms = 0;
          P02 = ~P02;        
     }
}

编译、下载、运行、OK!
         

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

void IO_Init(void);
void BTM_Init(void);

void main(void)
{
    IO_Init();
    BTM_Init();
        
    while(1)
    {
     }               
}

      GPIO初始化程序
/*****************************************************
*函数名称:void IO_Init(void)
*函数功能:IO初始化
*入口参数:void
*出口参数:void
*****************************************************/
void         IO_Init(void)
{
      P0CON = 0xFF;  //设置P0为强推挽模式
      P0PH  = 0x00;
}

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

      EA = 1;           //开启总中断

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

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

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

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

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

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

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

     “芯片选择”要选对,要和你开发板上器件型号一致,这个不对的话,就是之前错误提示中“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

主题

2193

帖子

8

粉丝