FMD初探

前言

  • 之前学习过51单片机,故寻找一个类似的8位单片机进行开发,FMD是国产的可擦写、RISC-V架构的8Bit单片机,价格低廉的同时具备比较丰富的外设,使用场景大都在小家电产品、太阳能控制板等小型程序上。

1. 概述

1.1 学习环境

  • 硬件资源:FT61F02X

    • 这是一款8bit基于EEPROM的RISC-V MCU
    • PROGRAM:2k * 14 bit
    • DATA:256 * 8 bit
    • RAM:128 * 8 bit

1.2 学习任务

  • 了解MCU的基本初始化配置及启动流程。
  • 成功电亮第一盏LED灯。
  • 完成XC-RD-5LED-V2的所有功能。
    1. 5枚LED电源指示灯
    2. 按键控制
    3. 红外接收
    4. 雷达感应

2. System Init

2.1 OSCCON寄存器配置 - 初始化系统时钟

  • 地址 名称 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 复位值
    0x8F OSCCON LFMOD IRCF[2] IRCF[1] IRCF[0] OSTS HTS LTS SCS 0101 x000

    一般情况下,我们要关注的是OSCCON寄存器中的IRCF[2:0]位SCS位。SCS位是OSCCON中的最低位,决定了MCU使用内部晶振(SCS == 1)还是外部晶振(SCS == 0,而3bit IRCF用来对内部高速/低速时钟进行分频,此外LFMOD是低速内部时钟的频率选择位,当LFMOD == 1时,内部低速时钟速率为:256kHz,当LFMOD == 0时,内部低速时钟速率为:32kHz。

    一般的,若不选择外部时钟,都优先考虑选择内部高速时钟,故:

    1
    2
    LFMOD = 0;   //不选择LIRC作为时钟源
    IRCF = 111; //配置HIRC的时钟频率为16Mhz,其它配置请参照手册 表6-2

由此可知OSCCON的值应为:OSCCON = 0B01110001

2.2 GPIO寄存器配置 - 初始化GPIO

  • 地址 名称 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 复位值
    0x85 TRISA TRISA[7] TRISA[6] TRISA[5] TRISA[4] TRISA[3] TRISA[2] TRISA[1] TRISA[0] 1111 1111
    0x87 TRISC None None TRISC[5] TRISC[4] TRISC[3] TRISC[2] TRISC[1] TRISC[0] ++11 1111
    0x05 PORTA PORTA[7] PORTA[6] PORTA[5] PORTA[4] PORTA[3] PORTA[2] PORTA[1] PORTA[0] xxxx xxxx
    0x07 PORTC None None PORTC[5] PORTC[4] PORTC[3] PORTC[2] PORTC[1] PORTC[0] ++xx xxxx
    0x95 WPUA WPUA[7] WPUA[6] WPUA[5] WPUA[4] WPUA[3] WPUA[2] WPUA[1] WPUA[0] 1111 1111
    0x88 WPUC None None WPUC[5] WPUC[4] WPUC[3] WPUC[2] WPUC[1] WPUC[0] ++11 1111
    0x89 WPD None None None WPDA WPDC1 WPDC2 WPDC3 None +++0 000+
    0x81 OPTION /PAPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 1111 1111

    SOP16封装的FT61F02X芯片总共引脚是16枚,除去VCC和GND剩下就是14枚,PORTA+PORTC[5:0]共14bit作为数据输出寄存器通过配置寄存器的值向外输出数据,相应地WPUx寄存器则是控制端口是否处于弱上拉状态(WPUx[i] = 1; 为弱上拉,反之弱下拉),在配置上拉状态之前,由TRISx寄存器控制IO的方向,TRISx[i] = 1 是输入,反之为输出

    特别地,FT61F02X的每个GPIO引脚都可以配置成弱上拉,但弱下拉不是每个引脚都可以配置的,但是都是通过WPD寄存器配置的

    • 弱下拉PORTA中只有bit4可以被配置,涉及到的寄存器WPD中:WPDA4
    • PORTC中,bit1~bit3都可以被配置,涉及到的寄存器WPD中:WPDC[3:1]

    OPTION寄存器是中断相关寄存器,其作用如下表:

  • 地址 bit位号 名称 释义 作用
    0x81 bit7 /PAPU 1 时,关闭所有PORTA上拉功能, 为 0 时,上拉由WPUA控制
    0x81 bit6 INTEDG Init PC1 Edge Interrupt Way 初始化PC1的边沿中断,为 1 时,配置为上升沿, 反之下降沿
    0x81 bit5 T0CS Timer 0 Change Clock Source 选择定时器0的时钟源,为 1 时,由PA2/T0CKI(作计数器)提供, 为 0 时,由指令时钟(作定时器)提供
    0x81 bit4 T0SE Timer 0 Select Edge Interrupt Way 选择定时器边沿触发方式,为 1 时,下降沿, 反之上升沿
    0x81 bit3 PSA Prescaler Allocated 1 时,分频电路分配给WDT后分频器,反之Timer0的预分频器
    0x81 bit2 PS2 Prescaler bit2 PS2\PS1\PS0都是PS,这3个bit用于配置WDT或Timer0的分频比, 具体查看手册 表7-5
    0x81 bit1 PS1 Prescaler bit1 PS2\PS1\PS0都是PS,这3个bit用于配置WDT或Timer0的分频比, 具体查看手册 表7-5
    0x81 bit0 PS0 Prescaler bit0 PS2\PS1\PS0都是PS,这3个bit用于配置WDT或Timer0的分频比, 具体查看手册 表7-5

    由此可知,根据本任务的要求GPIO的配置如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    INTCON = 0; //暂时禁止所有中断

    PORTA = 0B00000000;
    TRISA = 0B01010011;

    PORTC = 0B00000000;
    TRISC = 0B00100000;

    WPUA = 0B00000000;
    WPUC = 0B00000000;

    OPTION = 0B00000000;

2.3 MSCKCON寄存器配置

  • 地址 名称 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 复位值
    0x1B MSCKCON None VREG_OE T2CKSRC SLVREN None CKMAVG CKCNTI None 0000 +00+

    MSCKCON寄存器涵盖了稳压器、Timer2时钟源、睡眠模式LVR控制、LIRC和HIRC交叉校准4次平均模式控制、LIRC和HIRC的交叉校准功能控制,这些功能和上述表单一一对应,写入1就是使能相关功能,反之为关闭。

    值得注意的是,CKCNTI是双晶振校准是否完成的判别位(FLAG),在完成交叉校准后此位会自动清零

    此外,SLVREN位仅适用于 LVREN 配置成由指令 SLVREN 控制 LVR时,此位有效,通过改变SLVREN的值,控制LVR的开关。

    T2CKSRC位用于选择时钟源,并且默认为2倍频,例如当其为1时,Timer2的时钟源为HIRC的2倍(ECCP模式生效),为0时,是指令时钟的2倍。

    VREG_OE用于使能PA4和PC5是否作为稳压器的输出引脚。

2.4 CMCONx,x = [0, 1] 寄存器配置

  • CMCONx寄存器有两个,用于配置C1,C2比较器的输出结果、模式和输入切换,具体配置参考手册 表13-1

3. 调试

  • 使用FMD IDE可以实现类似于Keil的功能,配合FMD Link可以对FMD所有的8位机系列的硬件进行调试、仿真和开发。

3.1 注意事项

  1. FMDIDE的编译器是GCC,但是不能直接用网络上的,其C语言编译器放在IDE安装目录下:{安装目录}\data\bin\c.exe

  2. 注意选对芯片的型号。