前言
- 之前学习过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的所有功能。
- 5枚LED电源指示灯
- 按键控制
- 红外接收
- 雷达感应
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
2LFMOD = 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 注意事项
FMDIDE的编译器是GCC,但是不能直接用网络上的,其C语言编译器放在IDE安装目录下:
{安装目录}\data\bin\c.exe
。注意选对芯片的型号。