龙芯1B开发板实验

处理器架构分类

-x86

一系列指令集架构,instruction set architecture,ISA,由intel 基于它的8086微处理器变种开发,16位
->IA32(intel自己取的名字),32位
->x86-64,即AMD64,64位版本
x86是可变指令长度,复杂指令集CISC

-PowerPC

增强精简指令集RISC,由苹果、IBM、摩托罗拉创建(AIM)

-arm

advanced risc machines
精简指令集RISC
功耗低,适合移动设备

-MIPS

无互锁流水线级微处理器Microprocessor without interlocked pipelined stages

RISC-V

龙芯1B

是龙芯2H的衍生产品,2011年研制成功
在这里插入图片描述

LED实验

板子背后的管脚:SPI库,CS片选
在这里插入图片描述
根据方括号里的编号做,如gpio22
在这里插入图片描述
LED1-8按照GPIO9往上连到07
在这里插入图片描述

4个按键从10连到21。共GND,0代表按下,选择上升沿触发
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

灯闪烁

头文件与宏定义

#include <stdio.h>
#include "ls1b.h"
#include "mips.h"
#include "ls1b_gpio.h"

#define LED_1 9
#define LED_2 11
#define LED_3 15
#define LED_4 17
#define LED_5 20
#define LED_6 22
#define LED_7 6
#define LED_8 7

#define LED_OPEN 0
#define LED_OFF 1

#define GPIO_IN      1
#define GPIO_OUT     0

初始化

void gpio_init(){
    gpio_enable(LED_1,GPIO_OUT);
    gpio_enable(LED_2,GPIO_OUT);
    gpio_enable(LED_3,GPIO_OUT);
    gpio_enable(LED_4,GPIO_OUT);
    gpio_enable(LED_5,GPIO_OUT);
    gpio_enable(LED_6,GPIO_OUT);
    gpio_enable(LED_7,GPIO_OUT);
    gpio_enable(LED_8,GPIO_OUT);
}
void led_function(int status){

    gpio_write(LED_1,status);
    gpio_write(LED_2,status);
    gpio_write(LED_3,status);
    gpio_write(LED_4,status);
    gpio_write(LED_5,status);
    gpio_write(LED_6,status);
    gpio_write(LED_7,status);
    gpio_write(LED_8,status);
}

灯全部闪烁的主函数

int main(void)
{
    int status=LED_OFF;
    ls1x_drv_init();            		/* Initialize device drivers */
    install_3th_libraries();      		/* Install 3th libraies */
    gpio_init();

    while(1)
    {
        if(status){
            status=LED_OPEN;
        }else{
            status=LED_OFF;
        }
        led_function(status);
        unsigned int tickcount = get_clock_ticks();
        delay_ms(500);
    }

    /*
     * Never goto here!
     */
    return 0;
}

用按键控制灯亮灭

#include <stdio.h>
#include "ls1b.h"
#include "mips.h"
#include "ls1b_gpio.h"

#define LED_1 9
#define LED_2 11
#define LED_3 15
#define LED_4 17
#define LED_5 20
#define LED_6 22
#define LED_7 6
#define LED_8 7

#define KEY_1 21
#define KEY_2 16
#define KEY_3 12
#define KEY_4 10

#define LED_OPEN 0
#define LED_OFF 1

#define GPIO_IN      1
#define GPIO_OUT     0
//-------------------------------------------------------------------------------------------------
// 主程序
//-------------------------------------------------------------------------------------------------
int led_status=LED_OFF;
int key_status=1;
void led_status_change(){
    if(led_status==LED_OFF){
        led_status=LED_OPEN;
    }else{
        led_status=LED_OFF;
    }
}
void isr1(int va1,void *va2){ //按键1的中断处理函数
    if (key_status)key_status=0;
    else key_status=1;
}
void isr2(int va1,void *va2){ //中断处理函数
}
void isr3(int va1,void *va2){ //中断处理函数
}
void isr4(int va1,void *va2){ //中断处理函数
}
void gpio_init(){
    //LED灯初始化
    gpio_enable(LED_1,GPIO_OUT);
    gpio_enable(LED_2,GPIO_OUT);
    gpio_enable(LED_3,GPIO_OUT);
    gpio_enable(LED_4,GPIO_OUT);
    gpio_enable(LED_5,GPIO_OUT);
    gpio_enable(LED_6,GPIO_OUT);
    gpio_enable(LED_7,GPIO_OUT);
    gpio_enable(LED_8,GPIO_OUT);
    
    //按键初始化
    gpio_enable(KEY_1,GPIO_IN);
    gpio_enable(KEY_2,GPIO_IN);
    gpio_enable(KEY_3,GPIO_IN);
    gpio_enable(KEY_4,GPIO_IN);
    
    ls1x_enable_gpio_interrupt(KEY_1);
    ls1x_enable_gpio_interrupt(KEY_2);
    ls1x_enable_gpio_interrupt(KEY_3);
    ls1x_enable_gpio_interrupt(KEY_4);
    
    ls1x_install_gpio_isr(KEY_1,INT_TRIG_EDGE_UP,isr1,NULL);
    ls1x_install_gpio_isr(KEY_2,INT_TRIG_EDGE_UP,isr2,NULL);
    ls1x_install_gpio_isr(KEY_3,INT_TRIG_EDGE_UP,isr3,NULL);
    ls1x_install_gpio_isr(KEY_4,INT_TRIG_EDGE_UP,isr4,NULL);
}
void led_function(int status){

    gpio_write(LED_1,status);
    gpio_write(LED_2,status);
    gpio_write(LED_3,status);
    gpio_write(LED_4,status);
    gpio_write(LED_5,status);
    gpio_write(LED_6,status);
    gpio_write(LED_7,status);
    gpio_write(LED_8,status);
}
int main(void)
{

    ls1x_drv_init();            		/* Initialize device drivers */
    install_3th_libraries();      		/* Install 3th libraies */
    gpio_init();

    while(1)
    {
        led_function(key_status); //key=1,灯灭
    }
    return 0;
}

/*
 * @@ End
 */

流水灯

void waterflow(){
    led_function(LED_OFF);
    while(1){
    gpio_write(LED_8,LED_OFF);
    gpio_write(LED_1,LED_OPEN);
    delay_ms(500);
    gpio_write(LED_1,LED_OFF);
    gpio_write(LED_2,LED_OPEN);
    delay_ms(500);
    gpio_write(LED_2,LED_OFF);
    gpio_write(LED_3,LED_OPEN);
    delay_ms(500);
    gpio_write(LED_3,LED_OFF);
    gpio_write(LED_4,LED_OPEN);
    delay_ms(500);
    gpio_write(LED_4,LED_OFF);
    gpio_write(LED_5,LED_OPEN);
    delay_ms(500);
    gpio_write(LED_5,LED_OFF);
    gpio_write(LED_6,LED_OPEN);
    delay_ms(500);
    gpio_write(LED_6,LED_OFF);
    gpio_write(LED_7,LED_OPEN);
    delay_ms(500);
    gpio_write(LED_7,LED_OFF);
    gpio_write(LED_8,LED_OPEN);
    delay_ms(500);
    }
}

一直亮着,直到按一下变成流水灯。

led_function(LED_OPEN);
    while(flag==0);
    waterflow();

功能四合一

int led_status=LED_OFF;
int key_status=1;
int flag=0;
void led_status_change(){
    if(led_status==LED_OFF){
        led_status=LED_OPEN;
    }else{
        led_status=LED_OFF;
    }
}
void isr1(int va1,void *va2){ //按键1的中断处理函数
    flag=3;
    if (key_status)key_status=0;
    else key_status=1;
}

void isr2(int va1,void *va2){ //中断处理函数
    flag=1;
}
void isr3(int va1,void *va2){ //中断处理函数
    flag=2;
}
void isr4(int va1,void *va2){ //中断处理函数
    flag=0;
}
void gpio_init(){
    //LED灯初始化
    gpio_enable(LED_1,GPIO_OUT);
    gpio_enable(LED_2,GPIO_OUT);
    gpio_enable(LED_3,GPIO_OUT);
    gpio_enable(LED_4,GPIO_OUT);
    gpio_enable(LED_5,GPIO_OUT);
    gpio_enable(LED_6,GPIO_OUT);
    gpio_enable(LED_7,GPIO_OUT);
    gpio_enable(LED_8,GPIO_OUT);
    
    //按键初始化
    gpio_enable(KEY_1,GPIO_IN);
    gpio_enable(KEY_2,GPIO_IN);
    gpio_enable(KEY_3,GPIO_IN);
    gpio_enable(KEY_4,GPIO_IN);
    
    ls1x_enable_gpio_interrupt(KEY_1);
    ls1x_enable_gpio_interrupt(KEY_2);
    ls1x_enable_gpio_interrupt(KEY_3);
    ls1x_enable_gpio_interrupt(KEY_4);
    
    ls1x_install_gpio_isr(KEY_1,INT_TRIG_EDGE_UP,isr1,NULL);
    ls1x_install_gpio_isr(KEY_2,INT_TRIG_EDGE_UP,isr2,NULL);
    ls1x_install_gpio_isr(KEY_3,INT_TRIG_EDGE_UP,isr3,NULL);
    ls1x_install_gpio_isr(KEY_4,INT_TRIG_EDGE_UP,isr4,NULL);
}
void led_function(int status){

    gpio_write(LED_1,status);
    gpio_write(LED_2,status);
    gpio_write(LED_3,status);
    gpio_write(LED_4,status);
    gpio_write(LED_5,status);
    gpio_write(LED_6,status);
    gpio_write(LED_7,status);
    gpio_write(LED_8,status);
}
void waterflow(){
    gpio_write(LED_1,LED_OPEN);
    delay_ms(500);
    gpio_write(LED_1,LED_OFF);
    gpio_write(LED_2,LED_OPEN);
    delay_ms(500);
    gpio_write(LED_2,LED_OFF);
    gpio_write(LED_3,LED_OPEN);
    delay_ms(500);
    gpio_write(LED_3,LED_OFF);
    gpio_write(LED_4,LED_OPEN);
    delay_ms(500);
    gpio_write(LED_4,LED_OFF);
    gpio_write(LED_5,LED_OPEN);
    delay_ms(500);
    gpio_write(LED_5,LED_OFF);
    gpio_write(LED_6,LED_OPEN);
    delay_ms(500);
    gpio_write(LED_6,LED_OFF);
    gpio_write(LED_7,LED_OPEN);
    delay_ms(500);
    gpio_write(LED_7,LED_OFF);
    gpio_write(LED_8,LED_OPEN);
    delay_ms(500);

}

int main(void)
{

    ls1x_drv_init();            		/* Initialize device drivers */
    install_3th_libraries();      		/* Install 3th libraies */
    gpio_init();
    while(1){
        if(flag==0)led_function(LED_OPEN); //按键4,常量
        else if(flag==1){ //按键2,闪烁
            led_status_change();
            led_function(led_status);
            delay_ms(500);
        }else if(flag==2){ //按键3,流水灯
            led_function(LED_OFF);
            waterflow();
        }else if(flag==3){ //按键4,开关控制亮灭
            led_function(key_status);
        }
    }
    
    /*
     * Never goto here!
     */
    return 0;
}

异步串口 UART

ISP工具,比PuTTY好看。

原理

9根线,在这里插入图片描述
在这里插入图片描述
波特率(默认速率):码元速率 可以很高
每个数据多少位
停止位
在这里插入图片描述

在这里插入图片描述
UART3和5 官方接口
用串口控制LED或者打印图案
在这里插入图片描述
在这里插入图片描述

rt-thread

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值