打印
[活动专区]

基于赛元SC92F8003的开发心得--SC92F8003的小学习板评估

[复制链接]
10386|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
AC, pi, IO, gp, GPIO
本帖最后由 yang_alex 于 2020-4-3 16:35 编辑

基于赛元SC92F8003的开发心得--SC92F8003的小学习板评估

    很早就收到了赛元寄来的开发板,只是一直杂事缠身。今天正好有空,赶紧评估一下。

    以前没用过赛元的MCU,这次活动一下子申请了六块板子,板子做工不错。
    本帖的主角:赛元SC92F8003的小学习板
     

    集仿真、脱机烧录、调试功能于一身的SC Link
   

    赛元LB1014隔空水位检测评估开发板
   

   从左到右分别是:
   LB1013-插件胶圈评估开发板、LB1010-弹簧按键评估开发板、LB1012-PAD按键评估开发板、LB1011-隔空3MM评估开发板
   

   本帖主要讲赛元SC92F8003的小学习板和仿真器SC Link,其他板子另外帖子说明。

    赛元SC92F8003的小学习板的两排引脚对照芯片引脚全部引出,一边是一个Micro USB供电端口,另一边是四个仿真烧录引脚,VDD、DIO、VSS、CLK,非常简洁。PCB上只在P13引脚接出了一只LED,另一个LED是电源灯。

    那就从这只LED开始基础的应用学习吧。

    首先是到赛元的网站上下载相关文档和软件,赛元网站做的不错,但是文档归类感觉有些杂乱。忙了好一会才找齐自己要的文档。建议第一次接触赛元的开发者到赛元的网站上“汇总资料下载”(https://www.socmcu.com/index.php?m=Support&a=index&bid=87)下下载“工具与软件汇总”(http://www.socmcu.com/BBSfiles/工具与软件.rar)

    这个软件包里包括了Keil插件、SC LINK的驱动、量产工具 PRO52相关软件文档和触摸按键调试助手--TK 调试软件。
   

    既然是51内核,开发平台自然少不了用Keil C51了。这个软件之前已经安装过,这里就不多说了。不过Keil C51厂家列表里没有赛元,所以也没法找到赛元的器件。这时就需要安装Keil插件来解决了。此插件将自动检测电脑中的KEIL安装目录,将插件安装在KEIL的安装路径的C51目录下,并创建开始菜单及桌面快捷方式,当然也可以在安装过程中对这些默认设置进行修改。
   

   

    从官网下载了一个赛元8003学习评估开发板 应用资料,里面包含赛元SC92F8003评估板的示例程序。https://www.socmcu.com/index.php?m=Support&a=index&bid=87

    评估第一事:首先肯定是点灯啊。赛元的点灯示例程序在GPIO例程中,拷贝、编译、下载、运行。发现评估板上灯不亮,通过仿真查程序,对照原理图,发现是板子上的LED接的是P13,而例程中是P14,改成P13,编译、下载、运行,赛元SC92F8003评估板上的LED就开始闪烁了。
void main(void)
{
        uint16_t i,j;
        GPIO_Init(GPIO1,GPIO_PIN_3,GPIO_MODE_OUT_PP);        //将P13设置为强推挽输出
        while(1)
        {
                GPIO_WriteHigh(GPIO1,GPIO_PIN_3);                        //P13写高
                for(i=0;i<400;i++)                                           //延时一段时间
                {
                        for(j=0;j<100;j++);
                }
                GPIO_WriteLow(GPIO1,GPIO_PIN_3);                        //P13写低
                for(i=0;i<400;i++)                                            //延时一段时间
                {
                        for(j=0;j<100;j++);
                }
        }
}
   也可以仿真看看:
   
    这是什么鬼?我代码中没对P1.1进行操作啊?为什么始终是“1”?
    对照PIN脚图发现,P1.1原来和仿真调试的CLK引脚是复用的。同样的,P2.0原来和仿真调试的DIO引脚是复用的。大家调试的时候要注意一下,这两个管脚,调试时可以用其他引脚调试,正式生成烧录代码时再调回这两个引脚。
   
    由于只有一个板子,没敢尝试如果代码中启用了这两个引脚,调试时会发生什么。如果原厂有个明确的说明就更好了。

    点灯程序里LED闪烁时间间隔是用的循环延时,太浪费MCU资源了。下面试试定时器中断定时。

    打开赛元8003评估板的Timer0示例程序,原来GPIO用的是P1.0,把它改成P1.3。注意:中断服务程序里也要改啊!
uint8_t T_ms;
   定义一个全局变量进行计数,满100mS反转一次。    Timer0初始化程序:
void Timer0Init()
{
    TIM0_TimeBaseInit(TIM0_PRESSEL_FSYS_D12,TIM0_MODE_TIMER);        //Timer0 12分频,做定时器
    TIM0_WorkMode0Config(7192);                                                //设置Timer0工作模式0,初值为7192,定时1ms
    //        TIM0_WorkMode1Config(65536-1600);
    TIM0_ITConfig(ENABLE, LOW);                                                //使能Timer0中断
    TIM0_Cmd(ENABLE);                                                                //使能Timer0计数
}

    Timer0定时中断程序:
void Timer0Interrupt()                interrupt 1
{
    TIM0_Mode0SetReloadCounter(7192);
        
    T_ms ++;
    if(T_ms == 100)
    {
        GPIO_WriteHigh(GPIO1,GPIO_PIN_3);                        //P13写高
   编译、下载、运行、OK!
        

    再接下来试试呼吸灯。正好008具有PWM功能,直接利用PWM来调LED亮度,这时发现板子不知是巧合还是有意这样设计,P13正好和PWM6复用。

    打开赛元8003评估板的PWM示例程序,原来GPIO用的是P2.0,把它改成P1.3。PWM0PWM3互补设置改成PWM6独立模式。其他不需要的去掉,注意:中断服务程序里也要改啊!
GPIO初始化程序
void IOInit()
{
    GPIO_Init(GPIO1, GPIO_PIN_3, GPIO_MODE_OUT_PP);        //P13强推输出模式
}
PWM初始化程序
void PWM_INIT(void)
{
    PWM_Init(PWM_PRESSEL_FOSC_D2, 599);                           //PWM时钟源2分频,周期为(599+1)*2/FOSC
    PWM_OutputStateConfig(PWM6, PWM_OUTPUTSTATE_ENABLE);//使能PWM6
    PWM_IndependentModeConfig(PWM6, 300);                        //PWM6独立设置,占空比设置300/600=1/2
    PWM_Cmd(ENABLE);                                          //打开PWM总开关
    PWM_ITConfig(ENABLE, LOW);                            //打开PWM中断
}
Timer0初始化程序:
void Timer0Init()
{
    TIM0_TimeBaseInit(TIM0_PRESSEL_FSYS_D12,TIM0_MODE_TIMER);        //Timer0 12分频,做定时器
    TIM0_WorkMode0Config(7192);                                   //设置Timer0工作模式0,初值为7192,定时1ms
    //        TIM0_WorkMode1Config(65536-1600);
    TIM0_ITConfig(ENABLE, LOW);                                    //使能Timer0中断
    TIM0_Cmd(ENABLE);                                                  //使能Timer0计数
}
Timer0定时中断程序:
void Timer0Interrupt()                interrupt 1
{
        
    if(Dir == 1)
   {
      T_PWM_Duty += 5;
               
      if(T_PWM_Duty > 1000)
      {
          Dir = 0;
      }
   }
   else
   {
       T_PWM_Duty -= 5;
               
       if(T_PWM_Duty < 2)
       {
           Dir = 1;
       }                        
    }
        
    PWM_IndependentModeConfig(PWM6, T_PWM_Duty);      //PWM6独立设置,占空比设置        
}
主程序:
void main(void)
{            
    IOInit();
    Timer0Init();
    PWM_INIT();
        
    T_PWM_Duty = 0;
    Dir = 1;
    enableInterrupts();
    while(1);
}
   编译、下载、运行、OK!
         

    赛元8003评估板和SC-LINK仿真器初步试用结束。

谈谈试用感受:

      赛元的底层驱动软件还是很贴心的,不需要自己啃手册自己写。而且代码风格很好,很是赏心悦目!
      示例程序也不错,恰到好处的体现了底层驱动代码的初始化和调用,对开发人员学习很有帮助!
      最不错的就是SC-LINK仿真器了,应该说SC-LINK不仅仅是仿真器,用赛元自己的话说“SC LINK 适用于赛元 92F/93F 系列 IC 的脱机/在线烧写、仿真以及 92F/93F 系列触控 IC 的 TouchKey 调试”。真正是一机多用啊!配合烧录软件 SOC PRO51使用,完全胜任批量生产!更重要的是支持脱机烧录!支持序列号烧录,真是太贴心了。
   
    最后,美国已经开始变本加厉的围堵中国,是困难也是机遇!国货当自强!我们一起加油!!


使用特权

评论回复

相关帖子

沙发
沃利贝尔| | 2020-8-29 08:36 | 只看该作者
T_PWM_Duty和Dir是要自己定义的吗

使用特权

评论回复
板凳
yang_alex|  楼主 | 2020-8-29 21:18 | 只看该作者
沃利贝尔 发表于 2020-8-29 08:36
T_PWM_Duty和Dir是要自己定义的吗

是的。这两个是全局变量。在Timer0定时中断程序中定时加或减,来实现呼吸灯效果。

使用特权

评论回复
地板
沃利贝尔| | 2020-8-31 11:42 | 只看该作者
yang_alex 发表于 2020-8-29 21:18
是的。这两个是全局变量。在Timer0定时中断程序中定时加或减,来实现呼吸灯效果。 ...

请问楼主,PWM的中断怎么设置。我试了多次都不行

使用特权

评论回复
评论
赛元MCU3 2020-8-31 16:01 回复TA
在IE1寄存器上有一个PWM中断使能位,在总中断打开的情况下,将PWM中断位使能就可以打开PWM中断。 
5
沃利贝尔| | 2020-8-31 11:43 | 只看该作者
yang_alex 发表于 2020-8-29 21:18
是的。这两个是全局变量。在Timer0定时中断程序中定时加或减,来实现呼吸灯效果。 ...

请问楼主,PWM的中断怎么设置。我试了多次都不行

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

2193

帖子

8

粉丝