第1章 SF1 RISC-V Core 驱动OLED屏幕本次测评采用安路的SF1 RISC-V内核实现对SPI OLED屏幕的驱动,实现在屏幕上显示信息的功能。
1.1 外设串口连接
SF1S60CG1121I引脚 | 串口引脚 |
IO_T3_3,CSN(A4) | SF1_UART_TX |
IO_T5_3,GCLK0(E4) | SF1_UART_RX |
通过扩展板上的OLED屏幕与SF1 Demo板的连接如下表所示
SF1S60CG1121I引脚 | OLED引脚 |
IO_R10P_0,GCLK13,D0(A10) | DC |
IO_R11P_0(B9) | RST |
IO_R11N_0(B8) | SPI_MOSI |
IO_R12P_0,GCLK14,USRCLK(A9) | SPI_SCK |
LED
威廉希尔官方网站
通过一个NMOS管控制,控制引脚输出高电平LED亮,低电平LED灭;LED控制引脚与
FPGA管脚的映射关系为:
SF1S60CG121I 管脚位置 | SF1S60CG121I 管脚名称 | | 指示灯IO |
J4 | IO_B6N_2,GCLK4 | 1.2V | LED_R |
J5 | IO_B6P_2,GCLK5 | 1.2V | LED_B |
H5 | IO_B7N_2 | 1.2V | LED_G |
1.2 OLED驱动移植板上的OLED屏幕为中景园的OLED屏幕,官方已经提供了相关的屏幕驱动程序,我们只需要修改其中的DC、RST、SDA、SCL驱动对应的引脚驱动即可。具体的修改如下:
- #include "nuclei_sdk_hal.h"
- #define USE_HORIZONTAL 0
- //-----------------OLED引脚驱动----------------
- #define OLED_SCL_Clr() gpio_write(GPIO,SOC_OLED_SCK_MASK,0)//SCL
- #define OLED_SCL_Set() gpio_write(GPIO,SOC_OLED_SCK_MASK,1)
- #define OLED_SDA_Clr() gpio_write(GPIO,SOC_OLED_SDA_MASK,0)//SDA
- #define OLED_SDA_Set() gpio_write(GPIO,SOC_OLED_SDA_MASK,1)
- #define OLED_RES_Clr() gpio_write(GPIO,SOC_OLED_RST_MASK,0)//RES
- #define OLED_RES_Set() gpio_write(GPIO,SOC_OLED_RST_MASK,1)
- #define OLED_DC_Clr() gpio_write(GPIO,SOC_OLED_DC_MASK,0)//DC
- #define OLED_DC_Set() gpio_write(GPIO,SOC_OLED_DC_MASK,1)
- #define OLED_CS_Clr() do{}while(0)//CS
- #define OLED_CS_Set() do{}while(0)
为了方便理解,定义相关的宏如下:
[code]#define SOC_OLED_DC_OFS 7
#define SOC_OLED_RST_OFS 4
#define SOC_OLED_SDA_OFS 5
#define SOC_OLED_SCK_OFS 6
#define SOC_OLED_DC_MASK (1<